Windows Azure

SQL Server 2012 SP1 CU2で、バックアップ先/リストア元のストレージとしてWindows Azureストレージを選択できるようになりました。
T-SQLかSMO(Server Management Objects)で実行できます。

オンプレミスのSQL Server向けの機能強化ですが、Windows Azure VM上のSQL Serverでも使用できます。

前提条件

SQL Server 2012 SP1 CU2をインストールしている必要があります。
ダウンロードは、ここからできます。
当然、Windows Azureのアカウントが必要です。

Windows Azureストレージの作成

Windows Azure blobストレージにデータベースをバックアップするために、Windows Azureストレージアカウントを作成する必要があります。

  1. Windows Azure管理ポータルにログインします。
  2. 管理ポータルの下部の「New」ボタンをクリックします。
  3. リボン上で、[DATA SERVICES]‐[STORAGE]‐[QUICK CREATE]を選択します。
  4. [URL]にストレージアカウントのURLに使用するサブドメイン名を入力します。
    3~24文字の英数字を入力してください。
    [REGION/AFFINITY GROUP]に、地域とアフィニティグループを選択してください。
  5. [CREATE STORAGE ACCOUNT]をクリックします。

コンテナの作成

次にストレージアカウントにコンテナを作成します。
コンテナはblobをグルーピングする一塊です。

  1. 管理ポータルからストレージアカウントを選択します。ストレージアカウントのダッシュボードが開きます。
  2. [CONTAINERS]タブを選択し、コンテナ一覧を表示します。
    ストレージアカウントを作成した直後であれば、コンテナはありません。
    [CREATE A BLOB CONTAINER]か[ADD CONTAINER]ボタンをクリックします。
  3. 新しいBLOBコンテナを作成する画面が開きます。
    NAMEに、コンテナ名を入力します。ACCESSをPrivateに選択し、ボタンをクリックします。

SQL Serverで認証情報を作成する

SQL ServerにWindows Azure ストレージ認証情報を格納するために認証を作成する必要があります。SQL Server Manaement Studioを使用してSQL Serverに接続し、新しいクエリウィンドウを開きます。
次のT-SQLで、Windows Azureストレージ認証用の認証情報を作成します。

CREATE CREDENTIAL mycredential
WITH IDENTITY = ‘mystorageaccount’,SECRET = ‘<storage access key>’;

Windows Azure管理ポータルに戻り、ストレージのDASHBOARDで[MANAGE KEYS]ボタンをクリックします。

Manage Access Keysウィンドウが開きます。

ストレージアカウントの名前をコピーし、T-SQLの「mystorageaccount」部分に貼り付けます。[PRIMARY ACCESS KEY]か[SECONDARY ACCESS KEY]をコピーし、「Storage Access Key」部分に貼り付けます。

T-SQLを実行します。
「mycredential」認証の作成に成功したら、次のクエリで情報を確認することができます。

データベースのバックアップ

認証を作成した後、認証情報を使用してWindows Azure Blobストレージにデータベースをバックアップすることができます。次の例は、AdventureWorks2012データベースをWindows Azure Blobストレージサービスにバックアップしています。

BACKUP DATABASE AdventureWorks2012
TO URL = ‘https://pfestorageaccount.blob.core.windows.net/sqlbackup/AdventureWorks2012.bak’
WITH CREDENTIAL = ‘mycredential’
,STATS = 5;
GO

サードパーティのWindows Azureストレージの管理ツールで、バックアップファイルを確認することができます。

データベースのリストア

次のクエリでデータベースをリストアすることができます。

RESTORE DATABASE AdventureWorks2012
FROM URL = ‘https://pfestorageaccount.blob.core.windows.net/sqlbackup/AdventureWorks2012.bak’
WITH CREDENTIAL = ‘mycredential’
,STATS = 5;
GO

参考情報

詳細な情報が、MSDNライブラリで提供されています。
このチュートリアルを参照してください。

この投稿は、MSDNブログの韓国プレミアムフィールドエンジニブログに投稿された「How to backup and restore user database from SQL server to Windows Azure blob storage.」をざっくり違約した投稿です。

Windows Azure

MSDNブログ「AzCopy – Uploading/Downloading files for Windows Azure Blobs」を抜粋意訳した投稿です。

Windows Azure Blobストレージとローカルファイルシステム間のファイルのダウンロードやアップロードを簡単にできるようにしたいとの要望は、Windows Azure Storageチームがよく受ける要望の一つです。

Windows Azure Storageチームは、コマンドラインツールであるAzCopy(ベータ版)をリリースしました。このツールは、Windows Azureストレージアカウントの内外にデータを転送するタスクを観覧にできるようにするために設計されました。
このツールはスタンドアロンツールとしても、既存のアプリケーションに統合することもできます。

このツールは、Githubからダウンロードできます。

使ったことがあるかもしれませんがrobocopyのようなMicrosoftの他のファイルコピーツールにとても似ています。構文は次のようになっています。

AzCopy <Source> <Destination> [filepattern [filepattern…]] [Options]

特徴

効率的で柔軟性のあるツール

AzCopyは、コピーするデータを選択しやすくなっています。
再起モードを使用すると、ネストさえたディレクトリ配下にあるファイルをコピーすることができます。

ファイルパターンを指定できます。
WindowsファイルシステムやWindows Azure Blobストレージのプレフィックスからワイルドカードで選択できます。さらに、アーカイブ属性を持っているファイルをコピーするというオプションを設定することもできます。

とても多くのファイルをコピーするとき、ネットワークやほかの問題でコピーに失敗するかもしれません。再開オプションは、まだコピーしていない、コピーに失敗したところからコピー処理を再開できます。

Windows Azure ストレージデータ型のサポート

AzCopyは、ストレージアカウントで、ブロックBlobかページBlobかをdestination dataオプションで指定することができます。デフォルトでは、ブロックBlobに設定されています。
ページBlobオプションを賜与王すると、Blobは512バイトごとに0詰めされます。

ネーミングルール

URIフォーマット(httpやhttps)はBlobストレージパスの指定に、NTFS Windows ファイルフォルダーパスはWindows ファイルシステムで使用されています。
Blob名の中には、そのままWindows ファイルシステムに転送できないものもあります。AzCopyはWindowsファイルシステム名に変換するときに、独自のルールを使用します。

Windowsファイル名としてBlob名が使用できない場合は、次のルールを使用します。
「.」は「dot」
「..」は「dotdot」
「/」は「slash」
他には、重複を回避するためにファイル名やBlob名に、文字列「(n)」を追加します。

ロギング

AzuCopyは冗長モードで、ファイルとディレクトリの一覧や、コピーに失敗したファイル一覧を表示します。進捗状況も表示します。

サンプル

例1 再起モードでローカルファイルをBlobストレージコンテナーにコピーする

AzCopy C:\blob-data https://myaccount.blob.core.windows.net/mycontainer/ /destkey:key /S

c:\blob-dataとサブディレクトリにある全てのファイルをストレージアカウント「myaccount」のコンテナー名「mycontainer」のブロックBlobにコピーします。
blob-dataフォルダーには「subfolder1」サブディレクトリがあります。

C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\train1.docx
C:\blob-data\subfolder1\car_sub1.docx
C:\blob-data\subfolder1\car_sub2.docx

は、「mycontainer」BlobコンテーにBlobを格納します。

car1.docx
car2.docx
car3.docx
train1.docx
subfolder1/car_sub1.docx
subfolder1/car_sub2.docx

例2 Blobからローカルに冗長と式モードでコピーする

AzCopy https://myaccount.blob.core.windows.net/mycontainer c:\blob-data /sourceKey:key /S /V

冗長モードでは次のような表示があります。

Finished Transfer: car1.docx
Finished Transfer: car2.docx
Finished Transfer: car3.docx
Finished Transfer: train1.docx
Finished Transfer: subfolder1/car_sub1.docx
Finished Transfer: subfolder1/car_sub2.docx
Transfer summary:
—————–
Total files transferred: 6
Transfer successfully: 6
Transfer failed: 0
After the copy operation, c:\blob-data folder will contain the files listed below:
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\train1.docx
C:\blob-data\subfolder1\car_sub1.docx
C:\blob-data\subfolder1\car_sub2.docx

例3 再開モードでローカルからBlobにコピーする

AzCopy c:\blob-data https://myaccount.blob.core.windows.net/mycontainer /destkey:key /Z:restart.log /S

再開をするために、進捗状況を記録するログファイル「azcop.log」がカレントディレクトリに作成されます。

例4 ファイルパターンを使用して、ストレージBlobコンテナーのファイルを選択しローカルにコピーする

AzCopy https://myaccount.blob.core.windows.net/mycontainer c:\blob-data car /sourceKey:key /Z /S

パフォーマンス

Windows Azureデータセンター内で(同じDC内のコンピュートインスタンスとストレージアカウント)、ファイルのアップロード、ダウンロードに50MB/sぐらいの速度になります(エクストラLargeインスタンスの場合)。