Backing Up Your SQL Azure Database Using Database Copy – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。
異なるSQL Azureサーバー間でDATABASE COPYを実行した も参照してください。
また記事内に誤りがありますので、コメント欄を参照してください。
SQL Azure Service Update 4のリリースで、SQL Azure上で動作しているデータベースのスナップショットを作成できるようになりました。
本番環境のデータベースを変更する前に簡単にバックアップを作成したり、本番環境のデータベースと同じテストデータベースを作成できるようになりました。
元のデータベースのダウンタイム無しでトランザクション・メカニズムを使用して、バックアップがSQL Azureデータセンターで実行されます。データベースは、同じデータセンター内に新しいデータベースに完全にコピーされます。同じデータセンター内の別のサーバにコピーするか、同じサーバの別のデータベース名にコピーするかを選択することができます。
コピープロセスで作成される新しいデータベースは、コピーが完了した時の時点で元のデータベースとのトランザクション一貫性があります。つまり、スナップショットのタイミングは、コピーを開始した時間では無く、コピーが終了した時間です。
事始め
次のようなT-SQLを使用します。
CREATE DATABASE destination_database_name AS COPY OF [source_server_name.]source_database_name
同じサーバーにAdventure Worksをコピーするために、次のようなクエリを実行します。
CREATE DATABASE [AdvetureWorksBackup] AS COPY OF [AdventureWorksLTAZ2008R2]
このコマンドは、コピー先のSQL Azureサーバーのmasterデータベースに接続して実行しなければなりません。
コピーのモニタリング
sys.dm_database_copiesと呼ばれる動的管理ビューを使用することで、データベースのコピー状況をモニタリングすることができます。クエリは次のようなものを使用します。
SELECT * FROM sys.dm_database_copies
Adventure Worksのコピーの状況は次のように表示されます。
必要な権限
別のSQL Azureサーバーにデータベースをコピーするときは、コピー元のサーバーとコピー先のサーバーに、コマンドを実行するログインとパスワードが同じものが存在していなければなりません。コピー元のサーバーのログインには、db_owner権限が必要で、コピー先のサーバーのログインには、dbmanager権限が必要です。権限についての詳細情報はMSDNのドキュメント(Copying Databases in SQL Azure)を参照してください。
注意点は、コピー先のデータベースとコピー元のデータベースは同じサービスアカウント(Live ID)に所属している必要が無いということです。実際、あなたのデータベースをコピーコマンドを使用して、第三者のサーバーにコピーすることができます。
なぜ他のサーバーにコピーするのですか?
同じサーバーか、別のサーバーにデータベースをコピーした場合、同じデータセンター内で同じリソースを配分することになります。それぞれのサーバーは、同じエンドポイントですが、物理マシンは異なります。このことの詳細は、A Server Is Not a Machineにて説明しています。では、なぜ他のサーバーにコピーするのですか?その理由は2つあります。
- 新しいデータベースでは、SQL Azureポータルの管理者アカウントを別の物にしたいときです。本番サーバーからテストサーバーにテストサーバーにデータベースをコピーした場合、テスト責任者がテストサーバーにデータベースを作成したり削除したりできるようにします。
- 新しいデータベースの支払いを、別の支払い用のサービスアカウントに課金されるようにしたい時です。
まとめ
データベースコピーに関する追加情報は、MSDNのドキュメント(Copying Databases in SQL Azure)を参照してください。