方法: データベースを別のサーバーにコピーする (SQL Azure)

Windows Azure Platform

Microsoft SQL Azure データベースは、Windows Azure Platform 上のリレーショナル データベース サービスです。SQL Azure でデータベースを作成したら、それを新しいデータベースにコピーして、データベースをバックアップすることができます。このトピックでは、データベースを異なる SQL Azure サーバー上の新しいデータベースにコピーする方法について説明します。

コピー処理によって作成された新しいデータベースは通常のデータベースになり、ソース データベースとは独立して完全に機能します。詳細については、「SQL Azure でのデータベースのコピー」を参照してください。

データベースを異なるサーバー上の新しいデータベースにコピーする方法

  1. コピー先サーバー (新しいデータベースが作成される SQL Azure サーバー) の master データベースにログオンします。ソース SQL Azure サーバーのソース データベースのデータベース所有者 (DBO) と同じ名前とパスワードを持つログインを使用する必要があります。また、コピー先サーバー上のログインは、dbmanager ロールのメンバーであるか、サーバーレベル プリンシパル ログインである必要があります。ログインの詳細については、「SQL Azure におけるデータベースとログインの管理」を参照してください。サーバーへの接続の詳細については、「開発: 方法に関するトピック (SQL Azure データベース)」を参照してください。

  2. SQL Azure CREATE DATABASE ステートメントを使用して、ソース データベースのコピーを開始します。コピー先サーバーでこのステートメントを実行すると、データベースのコピー処理が開始されます。これは非同期プロセスなので、CREATE DATABASE ステートメントが戻ってからデータベースのコピーが完了します。

  3. コピー先サーバーで sys.databases および sys.dm_database_copies ビューをクエリして、コピー処理を監視します。

    1. コピーが進行中の場合は、新しいデータベースの sys.databases ビューの state_desc 列に、"COPYING" と表示されます。
    2. コピーが失敗した場合は、新しいデータベースの sys.databases ビューの state_desc 列に、"SUSPECT" と表示されます。この場合は、新しいデータベースに対して DROP ステートメントを実行してから、コピーを再実行してください。
    3. コピーが成功した場合は、新しいデータベースの sys.databases ビューの state_desc 列に、"ONLINE" と表示されます。この場合は、コピーが完了し、新しいデータベースは通常のデータベースになり、ソース データベースとは無関係に変更することができます。
  4. (オプション) コピーの進行中にコピー操作をキャンセルする場合は、新しいデータベースに対して DROP DATABASE ステートメントを実行します。または、ソース データベースに対して DROP DATABASE ステートメントを実行して、コピー処理をキャンセルすることもできます。

  5. (オプション) コピー先サーバーで新しいデータベースが Online になったら、ALTER USER ステートメントを使用して、新しいデータベースのユーザーをコピー先サーバー上のログインに再マップします。新しいデータベースのすべてのユーザーは、ソース データベースで持っていたアクセス許可を保持します。データベース コピーを開始したユーザーが新しいデータベースのデータベース所有者 (DBO) になり、新しいセキュリティ識別子 (SID) が割り当てられます。コピーの成功後、他のユーザーが再マップされるまでは、コピーを開始したログイン (DBO) だけが新しいデータベースにログオンできます。

次のコード例は、Server2 からデータベース コピー処理を開始し、Server1 という名前の SQL Azure サーバー上のデータベース Database1AServer2 上の Database2A という名前の新しいデータベースにコピーする方法を示します。

-- execute on the master database of Server2
-- start copying from Server1 to Server2
CREATE DATABASE Database2A AS COPY OF Server1.Database1A

次のコード例では、Database2A という名前の新しいデータベースに関する情報を取得するために Server2sys.databases および sys.dm_database_copies ビューをクエリして、データベースのコピー処理を監視します。

-- execute on the master database of Server2
-- retrieve state of the new database, Database2A
select name, state, state_desc from sys.databases
where name = ‘Database2A‘

-- retrieve copying details
select * from sys.dm_database_copies
where database_id = DB_ID(‘Database2A‘)

次のコードでは、新しいデータベースのユーザーをコピー先サーバー上のログインに再マップし、user1user2、および user3 という名前の Database2A ユーザーを login1login2、および login3 という名前の Server2 ログインにマップします。

-- execute on the new Server2 database, named Database2A
-- re-map database users to logins on the destination server
ALTER USER user1 WITH LOGIN = login1
ALTER USER user2 WITH LOGIN = login2
ALTER USER user3 WITH LOGIN = login3

参照

タスク

方法: データベースをバックアップする (SQL Azure)

情報参照

CREATE DATABASE (SQL Azure データベース)

DROP DATABASE (SQL Azure データベース)

概念

SQL Azure でのデータベースのコピー

ページのトップへ