【Azure for ITPRO】SQL Azure のデータベースを Create Database を使用してコピーする

SQL Azure 上のデータベースをバックアップしたい…でもオンプレミスにバックアップするのは時間がかかりすぎるし、どうせならば Azure 上にバックアップしたい…当然そう考えますよね。

プログラムを作れる人なら「簡単ジャーン」てなことですが、プログラムとは縁のない ITPRO はどうするか?

最も簡単なのは、Create Database に 「AS COPY OF」オプションを使用して実行する方法です。

さっそくやってみましょう。

何を使うか?選択肢としては、

  • SQL Server 2008 R2 Management Studio
  • sqlcmd.exe コマンド
  • Project Houston (CTP1)

あたりですが、今回は手軽な sqlcmd コマンドを使ってみたいと思います。

SQL Server がインストールされているコンピューターでコマンドプロンプトを開いてください。

まずは、SQL Azure に接続します。

C:\>sqlcmd -U junichia@hta8lqsu49 –P password -S hta8lqsu49.database.windows.net -d master –N 1>

「-U junichia@hta8lqsu49 SQL Azure に接続するためのIDを指定します。データベースを作成する権限をもったアカウントでなければなりません。@の後ろに書かれている hta8lqsu49 は SQL Azure のホスト名です。これを指定しないとエラーになりますので注意してください。

「–P password」 上で指定したアカウントのパスワードを指定します。

「-S hta8lqsu49.database.windows.net」 SQL Azure のサーバー名を FQDN で指定します。

「-d master」 SQL Azure のマスターデータベースを指定しています。SQL Azure の場合、データベースを作成するには master データベースに接続しなければなりません。また、SQL Azure では UE コマンドがサポートされないため、USE AdventureWorks などと入力すると「USE statement is not supported to switch between databases. Use a new connection to connect to a different Database.」といったエラーメッセージが表示されるので注意してください。

「–N」 通信を暗号化するために指定しています。SQL Azure では暗号化通信が必須となります。

次に複製先のデータベースを作成します。ただし、ただ単に作成するのではなく、「AS COPY OF」を使用して既存のデータベースを複製しましょう。

今回は、複製元 として hta8lqsu49 というサーバーにある AdventureWorks というデータベースを指定しています。複製先は、AdventureWorks_tmp です。

1> Create Database AdventureWorks_tmp as copy of hta8lqsu49.AdventureWorks 2> go

クエリーを実行しても、特にメッセージが表示されるわけではありません。

複製はバックグラウンドで静かに行われます。

複製の状態を確認するには、sys.databases に対して、以下のようにクエリーを入力します。「COPYING」は「複製中」を意味します。

1> select state_desc from sys.databases where name = 'AdventureWorks_tmp' 2> go state_desc ------------------------------------------------------------ COPYING

(1 行処理されました)

複製が終了すると、ステータスは「ONLINE」に変更され、複製元のデータベースと同様に利用が可能になります。

1> select state_desc from sys.databases where name = 'AdventureWorks_tmp' 2> go state_desc ------------------------------------------------------------ ONLINE

(1 行処理されました) 1>

どうでしょう?

とても簡単ですよね。

残念ながら、現時点ではバックアップのスケジューリングを構成することはできませんが、今後提供される予定になっています。

ちなみに、Welcome to SQL Azure Labs で公開されている「SQL Azure Data Sync Service」を使用すると、データベース間の「同期」をスケジューリングすることができます。現在”パブリックプレビュー”という状態で公開されていますので、こちらも試してみてください。