読者です 読者をやめる 読者になる 読者になる

SQL Server 2012でAzure BLOB使ってDBバックアップ・リストアしてみた

Azure SQL Server

SQL Serverから直接AzureのBlobへのバックアップと、リストアを行ってみました。

この機能はSQL Server 2012 CU2から実装された機能で、TSQLから直接BLOBのURLを指定してSQL Serverのバックアップを取得できます。


TSQL文

手元のSQL Server 2012 CU11でもGUIからは実行できなそうなので、TSQL書く必要があります。

と言ってもとても簡単です。バックアップに関してはこのような感じで書きます。

CREATE CREDENTIAL mycredential 
	WITH IDENTITY= 'ストレージアカウント名'
	,SECRET = 'アクセスキー';

BACKUP DATABASE [DB名] 
	TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/XXXXXXX.BAK' 
	WITH CREDENTIAL = 'mycredential',
        FORMAT,
        STATS = 5;
GO


最初にAzureから取得したストレージアクセス情報を使ってCredentialを作って、後はバックアップ先としてBLOBオブジェクトを指定するだけです。

LOGバックアップの時も通常通り、BACKUP LOG [DB名]と書けます。


リストアの場合のサンプルはこちらです。リストア時にファイルの配置を変更する場合に、RESTORE FILELISTONLYを事前に実行しますが、その場合もCREDENTIALが必要になります。

CREATE CREDENTIAL mycredential 
	WITH IDENTITY= 'ストレージアカウント名'
	,SECRET = 'アクセスキー';

RESTORE FILELISTONLY 
   FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/XXXXXXX.BAK'
   WITH CREDENTIAL = 'mycredential';

RESTORE DATABASE [PE1] 
	FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/XXXXXXX.BAK'
	WITH
	MOVE '論理データファイル1' TO 'C:\DATA\XXX.MDF',
	MOVE '論理データファイル2' TO 'C:\DATA\XXX.NDF',
	MOVE '論理ログファイル1' TO 'C:\LOG\XXX.LDF',
	CREDENTIAL = 'mycredential',
	STATS = 5;
GO


上記は基本的な書き方ですが、他のオプションや詳しい書き方などはこちらのリンクに纏まっています。
Windows Azure BLOB ストレージ サービスを使用した SQL Server のバックアップと復元
 
 

実際に実行してみて(バックアップ)

オンプレミス環境からAzureへインターネット回線越しにバックアップしています。
データはSAP ERP 6.0 EHP7にベストプラクティスをいくつか有効化したものです。

ソースDB
Total Space Usage 83,538.69
Transaction Log Space Usage 3,138.69 MB
Data Files Space Usage 80,400.00 MB


バックアップ時間

1:02:20

BACKUP DATABASE successfully processed 4606699 pages in 3736.645 seconds (9.631 MB/sec).

BLOBオブジェクト(バックアップファイル)のサイズ

35.15 GB(Azure Portalから確認)
 
 

 
この結果から単純に計算すると1TBのDBだと10時間以上かかることになりますので、大きなDBの場合は少し工夫が必要だと思います。



実際に実行してみて(リストア)

BLOBオブジェクトと同一リージョン(東日本)の仮想マシンにリストア

Azureインスタンスサイズ

A5

リストア時間

00:23:24

RESTORE DATABASE successfully processed 4606699 pages in 1374.675 seconds (26.180 MB/sec).

 
 

Azure上へのリストアなら1TBでも4時間程度に収まりそうです。