SQL Azure 上のデータベースをバックアップしたい…でもオンプレミスにバックアップするのは時間がかかりすぎるし、どうせならば Azure 上にバックアップしたい…当然そう考えますよね。
プログラムを作れる人なら「簡単ジャーン」てなことですが、プログラムとは縁のない ITPRO はどうするか?
最も簡単なのは、Create Database に 「AS COPY OF」オプションを使用して実行する方法です。
さっそくやってみましょう。
何を使うか?選択肢としては、
あたりですが、今回は手軽な sqlcmd コマンドを使ってみたいと思います。
SQL Server がインストールされているコンピューターでコマンドプロンプトを開いてください。
まずは、SQL Azure に接続します。
「-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 では暗号化通信が必須となります。
「-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 です。
クエリーを実行しても、特にメッセージが表示されるわけではありません。
複製はバックグラウンドで静かに行われます。
複製の状態を確認するには、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」を使用すると、データベース間の「同期」をスケジューリングすることができます。現在”パブリックプレビュー”という状態で公開されていますので、こちらも試してみてください。