xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

Azure SQL Databaseのスナップショットを取る

Windows Azure上のSQLデータベースのバックアップは、通常「BLOBストレージ」と呼ばれるところにエクスポートすることで行います。同じく、リストアはBLOBストレージからインポートすることで行います。これらはWindows Azureの管理ポータルからGUIを利用して行うことができ大変に簡単です。しかしながら、単にデータベースをテスト用として複製してサクッと検証したいという場合は、ほんの少しメンドクサイ感じがします。SQLデータベースをダイレクトに複製する (スナップショットを取る) 方法はないか。...もちろんあります。

Step.1 : masterデータベースへの接続

まず、データベースのコピー先としたいサーバーの「masterデータベース」にアクセスする必要があります。下図のように管理ポータルからSQLデータベースのサーバー一覧を開き、コピー先サーバーを選択します。

ServerList

選択できたら画面下部にある [管理] を押してデータベースサーバーの管理画面を開きます。ログインする際、データベース名を省略してログインします。

SqlDbLogin

ログインできたら、画面左上にある [データベースの選択] から [master] を選択します。

SelectMasterDb

Step.2 : SQLの発行

GUIが好きな方 (自分自身含む)、ごめんなさい。データベースのコピーはSQLを発行することで行います。SQLは次のような感じで入力します。

create database [コピー先データベース名]
as copy of ([コピー元サーバー名].)[コピー元データベース名]

[新しいクエリ] からSQLを入力して実行すればコピー処理が開始されます。コピーされたデータベースは即座にオンラインになり課金が開始されますので、その点注意が必要です。単にデータベースのバックアップを取りたいだけの場合は、データベースのエクスポートでストレージに格納する方が安上がりで良いと思います。

ちなみに、コピー元とコピー先のサーバーが同じ場合はコピー元サーバー名を省略できます。不勉強でまだやり方は分からないのですが、権限さえ設定すれば別のサブスクリプションアカウントのデータベースのコピーも可能なようです。

進捗確認

コピーの進捗状態は次のSQLを実行することで確認できます。データベースのサイズが大きいときなどは複製に時間が掛かるハズなので特に有効かと思います。

select * from sys.dm_database_copies

CopyProgress

コピーが完了すると上記の進捗状態はクエリの実行結果として表示されなくなります。

名前の変更

例えばスナップショットを取ったデータベースに変更を加え、それを本番環境に適用したいとします。このとき、データベースを再度複製するのではなく名前を変更するだけで対応できたら楽でしょう。管理ポータルには名前を変更する機能がないですが、SQLを使えば実現可能です。データベース名を変更する場合は、masterデータベースに接続した状態で次のSQLを実行します。

alter database [変更前のデータベース名] modify name = [変更後のデータベース名]