SQL Server のデータを Windows Azure Blob Storage に簡単バックアップ
SQL Server の BACKUP DATABASE コマンドが拡張されて、直接 .bak ファイルを Azure Blob Storage にバックアップ出来るようになりました。C#でも実現できます。
今までテープやディスクにバックアップして職場で管理していた方もいると思います。私も新入社員のころ、毎週金曜日の夜になるとデスクから徐に立ち上がり、部署サーバーのデータをテープにバックアップしていました。
これでは、煩雑ですしコストもかかります、問題があった時に見つけるのが大変、災害対策も出来ていません。加えて、そこまでオフィス自体のセキュリティが強固だったわけではないので、悪意ある人間が盗もうと思えば出来ないとは言えません。
ということで「このころ Azure Storage があったらなぁ、楽できたし安全だったのに・・・」と思ったりするわけです。
Windows Azure Blob Storage では次のようなメリットがあります。(もちろん SQL Server のデータバックアップ以外でも使えます)
安価 | Azure は上りの通信は無料、ストレージの価格も1ヶ月あたり4円/1G 程度と非常に安い(価格の詳細はこちら) |
スケーラブル | ほぼ無限にスケールします。テープやディスクの置き場所に困ることもありません。 |
容易 | 今まで物理的に管理していたものが、URL だけで管理できます。テープやディスクを購入する必要もありませんし、リカバリが必要になった時の取り出しも簡単です。作業自体もプログラムを組めば自動化できます。 |
安全 | 自動的に冗長化されるので、まず消えません。データセンターを跨った冗長化も可能で災害対策もばっちり。セキュリティ面でも特別なキーがなければアクセスできません。 |
使い方は簡単
完全なデータベースをバックアップ
次の例、Windows Azure Blob Storage に、AdventureWorks2012 データベースがバックアップされます。
TSQL
1: BACKUP DATABASE AdventureWorks2012
2: FILEGROUP = 'Primary'
3: TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012files.bck'
4: WITH CREDENTIAL = 'mycredential';
C#
1: Backup backup = new Backup();
2: backup.CredentialName = credentialName;
3: backup.Database = dbName;
4: backup.Devices.AddDevice(url, DeviceType.Url);
5: backup.SqlBackup(server);
データベースを復元
次の使用例は、データベース全体のバックアップを復元します。
TSQL
1: RESTORE DATABASE AdventureWorks2012 FROM URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/AdventureWorks2012.bak'
2: WITH CREDENTIAL = 'mycredential'
3: ,MOVE 'AdventureWorks2012_data' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.mdf'
4: ,MOVE 'AdventureWorks2012_log' to 'C:\Program Files\Microsoft SQL Server\myinstance\MSSQL\DATA\AdventureWorks2012.ldf'
5: ,STATS = 5
C#
1: Restore restore = new Restore();
2: restore.CredentialName = credentialName;
3: restore.Database = dbName;
4: restore.ReplaceDatabase = true;
5: restore.Devices.AddDevice(urlBackupData, DeviceType.Url);
6: restore.RelocateFiles.Add(new RelocateFile(dbName, newDataFilePath));
7: restore.RelocateFiles.Add(new RelocateFile(dbName+ "_Log", newLogFilePath));
8: restore.SqlRestore(server);
9:
尚、この機能を使うには SQL Server 2012 SP1 CU2 をインストールする必要があります。
ダウンロードサイトが調子悪い時には下記からどうぞ。
https://hotfix.partners.extranet.microsoft.com/search.aspx?search=2790947
また、SQL Server 2012 SP1 CU2 の新機能は公式サイトに記載してあります。参考にしてください。
https://support.microsoft.com/kb/2792921/ja
チュートリアルや、その他の詳細な使い方はこちら(英語)