SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure ストレージに直接バックアップを取得した場合のバックアップのクリーンアップについて

without comments

元になる情報は、Remove SQL Backup Files from your Azure Storage となります。

SQL Server 2012 SP1 CU4 以降では、Azure ストレージに直接バックアップを取得できるようになりました。
SQL Server Backup to URL

SQL Server 2012 SP1 CU4 で機能が追加された際には、メンテナンスプランを使用してのバックアップ取得先として指定することはできなかったのですが、SQL Server 2014 でメンテナンスプランの取得先として、URL (Azure ストレージ) を指定できるようになりました。
image

SQL Server 2014 では「管理対象バックアップ」(マネージ バックアップ) という機能が追加され、一定のルールに基づいて自動的にバックアップを取得できるようになりました。
Windows Azure への SQL Server マネージ バックアップ

この機能では保有期間を設定することができ、バックアップのクリーンアップができるようになっています。

バックアップのクリーンアップですが、メンテナンスプランのメンテナンスクリーンアップタスクでは、Azure ストレージのバックアップのクリーンアップを実施するための仕組みは提供されておらず、自前で実装をする必要があります。

この実装の方法が冒頭で紹介したブログの内容となります。
SQL Server Agent では PowerShell を実行することができるため、Downloads から Windows Azure PowerShell をダウンロードしてインストールすることで、Web PI 経由でなくても Azure PowerShell をインストーすることができるので、ここからモジュールをインストールすることで、SQL Server Agent の PowerShell でクリーンアップをすることができます。

$CleanupTime = [DateTime]::UtcNow.AddHours(-72)
$StorageAccountName = "<ストレージアカウント>"
$StorageAccountKey = "<ストレージアカウントキー>
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
Get-AzureStorageBlob -Container "sqlbackup" -Context $context |
Where-Object { $_.LastModified.UtcDateTime -lt $CleanupTime -and $_.BlobType -eq "PageBlob" -and $_.Name -like "*.bak"} |
Remove-AzureStorageBlob
Get-AzureStorageBlob -Container "sqlbackup" -Context $context |
Where-Object { $_.LastModified.UtcDateTime -lt $CleanupTime -and $_.BlobType -eq "PageBlob" -and $_.Name -like "*.trn"} |
Remove-AzureStorageBlob

 

Azure ストレージに格納されたバックアップファイルは UTC で日付が管理されていますので、世代数の管理については UTC の日付で管理する必要があります。

このようなジョブを設定しておくことで、Azure ストレージのバックアップのクリーンアップを実施することができるようになります。

image

Written by Masayuki.Ozawa

3月 23rd, 2015 at 9:21 pm

Posted in SQL Server

Tagged with

Leave a Reply