【问题标题】:Delete SQL backups from blob storage从 Blob 存储中删除 SQL 备份
【发布时间】:2019-06-26 10:17:42
【问题描述】:

我正在创建一个从 Azure Blob 存储中删除 SQL 备份文件的进程。

通过我的研究,我似乎可靠地分阶段删除早于 X 天的备份的唯一方法是将文件名读入文本文件,然后根据包含的字符串日期创建具有过滤结果的第二个文件文件名。

此任务涉及两种日期格式:yyyy_MMdd 和 yyyyMMdd。

我需要查找 120 到 365 天之间的所有文件。有超过 50,000 个文件需要处理,大约 500 个不同的日期字符串需要搜索。

我知道我目前所拥有的可以改进,因为它需要 forever 才能运行(加上它的 RBAR)。如何更有效地处理所有文件?

Get-AzureStorageBlob -Context $context -Container "ContainerName" | SELECT name | Out-File -filepath C:\Users\name\Desktop\Deletions.txt

$Arr1 = @()
$Arr2 = @()
$collection = @()

ForEach($number in 120..365)
{
 $Arr1  += (Get-Date).addDays(-$number).ToString("yyyy_MMdd")
 $Arr2  += (Get-Date).addDays(-$number).ToString("yyyyMMdd")
}

$collection += $Arr1
$collection += $Arr2

ForEach ($date in $collection)
{
Get-Content -Path C:\Users\name\Desktop\Deletions.txt | Where-Object { $_ -like "*$date*" } | Out-File -filepath C:\Users\name\Desktop\DeleteThese.txt -Append
}

【问题讨论】:

    标签: powershell azure-storage


    【解决方案1】:

    使用 ArrayLists 而不是数组应该会给你一个提升。您可以创建 ArrayList 对象,例如:$Arr1 = New-Object System.Collections.ArrayList

    $Arr1 = @()
    $Arr2 = @()
    $collection = New-Object System.Collections.ArrayList
    
    ForEach($number in 120..365)
    {
     $Arr1 += (Get-Date).addDays(-$number).ToString("yyyy_MMdd")
     $Arr2 += (Get-Date).addDays(-$number).ToString("yyyyMMdd")
    }
    
    # have to add each item from the original arrays into the arraylist
    # otherwise the arraylist will only have a count of 2, the entirety of $Arr1 and $Arr2 respectively
    
    foreach($item in $Arr1) { $collection.Add($item) | Out-Null }
    foreach($item in $Arr2) { $collection.Add($item) | Out-Null }
    
    foreach($date in $collection)
    {
        Get-Content -Path C:\Users\name\Desktop\Deletions.txt | Where-Object { $_ -like "*$date*" } | Out-File -filepath C:\Users\name\Desktop\DeleteThese.txt -Append
    }
    

    希望有帮助!

    【讨论】:

    • hmm... 我做了您建议的更改,但 1 到 245 之间的数字打印到控制台,结果文件为空。
    • 发布一个关于Deletions.txt 输出的简单示例集,我会帮助纠正它
    • Deletions.txt 中的 50,000 个文件名大致是这样的:Server/Database/FULL_Server_Database_20180805_000009.bak
    • 好的我更新了我的答案,关于如何使用 ArrayLists 的错误。使用我根据您提供的内容在本地制作的样本集。希望对你有用
    猜你喜欢
    • 2017-10-22
    • 2015-01-08
    • 2021-10-16
    • 2016-12-10
    • 1970-01-01
    • 2021-11-02
    • 2013-06-30
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多