SQL Azure でのデータベースのコピー
Windows Azure Platform
Microsoft SQL Azure データベースは、Windows Azure Platform 上のリレーショナル データベース サービスです。SQL Azure でデータベースを作成したら、それを SQL Azure の新しいデータベースにコピーして、データベースをバックアップすることができます。コピー処理によって作成された新しいデータベースは、コピーが完了すると通常のデータベースになり、ソース データベースとは独立して完全に機能します。また、新しいデータベースのエディションと最大サイズはソース データベースと同じになります。
データベースのコピー機能を使用すると、オンプレミス データベースで普通に行っているバックアップ シナリオの多くを実行できます。
- アプリケーション データのバックアップ: ユーザーやアプリケーション エラーからデータベースを保護するために、アプリケーション データベースを新しいデータベースにコピーします。アプリケーション データベースの状態を回復するには、新しいデータベースの名前をアプリケーション データベース名に変更します。また、新しいデータベースからデータのサブセットを指定して回復するには、Transact-SQL クエリを使用します。
- アプリケーションの開発およびテスト: 運用データベースを新しいデータベースにコピーして、開発やテストに使用できます。
- アプリケーションのアップグレード: 大幅なアプリケーションの更新前に、アプリケーション データベースを新しいデータベースにコピーします。アップグレード時に間違いがあった場合は、新しいデータベースの名前をアプリケーション データベース名に変更することで、前のデータベースの状態を回復できます。
注意
コピー機能によって作成されたデータベースは、SQL Azure サーバーあたり 150 データベースという SQL Azure データベース制限に含まれます。
データベースは非同期にコピーされるため、この処理の間中 SQL Azure サーバーへの接続が必要になることはありません。データベースをコピーするには、コピー先サーバーの master データベースにログインし、AS COPY OF
句を使用して Transact-SQL CREATE DATABASE
ステートメントを実行します。コピー先サーバーの sys.dm_database_copies
および sys.databases
ビューを使用すると、このコピー処理を監視できます。
同じ SQL Azure サーバー上でデータベースをコピーして新しいデータベースを作成する場合は、両方のデータベースで同じログインを使用できます。新しいデータベースが作成されると、データベースのコピーに使用したセキュリティ プリンシパルが新しいデータベースのデータベース所有者 (DBO) になります。次の図に、同じサーバー上でのコピーを示します。
この図では、Database1A
が、同じ SQL Azure サーバー Server1
にある新しいデータベース Database1B
にコピーされます。データベースをコピーしたログインが Database1B
の DBO になります。Database1A
のすべてのデータベース ユーザー、アクセス許可、およびセキュリティ識別子 (SID) が Database1B
にコピーされます。ユーザー SID は両方のデータベースで同じなので、Server1
に含まれるログインは、両方のデータベースに対して同じアクセス許可を保持します。
コピーが完了すると、Database1B
は通常のデータベースになります。Database1B
のログイン、ユーザー、およびアクセス許可は、Database1A
とは関係なく管理できます。
同じサブ領域またはデータ センター内にある 2 つの異なる SQL Azure サーバー間でデータベースをコピーすることもできます。新しいデータベースは別の SQL Azure サーバー上に作成されるため、異なる master データベースに関連付けられます。新しいデータベースのすべてのユーザーは、ソース データベースで持っていたアクセス許可を保持します。新しいデータベースが作成されると、データベースのコピーに使用されたセキュリティ プリンシパルが新しいデータベースの DBO になり、新しいセキュリティ識別子 (SID) が割り当てられます。次の図に、異なるサーバー間でのコピーを示します。
この図では、Server1
の Database1A
が、別の SQL Azure サーバー Server2
にある新しいデータベース Database2A
にコピーされます。データベースをコピーしたログインが Database2A
の DBO になります。Database1A
に含まれるすべてのデータベース ユーザーとアクセス許可 (SID を除く) が Database2A
にコピーされます。Server1
に含まれるログインは、新しいデータベースで使用できません。新しいログインは別の SQL Azure サーバーに関連付けられ、Database2A
のユーザー SID と Database1A
のユーザー SID は異なるからです。
コピーが完了すると、Database2A
は通常のデータベースになります。Database2A
のログイン、ユーザー、およびアクセス許可は、Database1A
とは関係なく管理できます。
メモ 異なるサーバー間でのコピー処理が完了したら、DBO ログインと ALTER USER
ステートメントを使用して、新しいデータベースのユーザーを新しい SQL Azure サーバー上のログインにマップできます。たとえば、ALTER USER userName WITH LOGIN='loginName'
とします。詳細については、「ALTER USER (SQL Azure データベース)」を参照してください。
SQL Azure でデータベースをコピーするには、ログインに次のアクセス許可が必要です。
- 両方のサーバー: ログインは、両方の SQL Azure サーバーで同じログイン名とパスワードを持つ必要があります。
- コピー先サーバー: ログインは、サーバーレベルの
dbmanager
ロールのメンバーである必要があります。メモ: SQL Azure サーバーのサーバーレベル プリンシパルは、dbmanager
ロールのメンバーではありませんが、自動的に同じアクセス許可を持ちます。SQL Azure のログイン管理の詳細については、「SQL Azure におけるデータベースとログインの管理」を参照してください。 - コピー元サーバー: ログインは、ソース データベースの DBO である必要があります。ソース データベースを作成したログイン (DBO) だけが、そのデータベースを同じサーバーまたは異なるサーバー上の別のデータベースにコピーできます。
以上のアクセス許可要件が満たされている場合は、そのログインで、新しいデータベースに対して ALTER DATABASE
および DROP DATABASE
ステートメントを実行できます。
注意
SQL Azure では、ALTER AUTHORIZATION ON DATABASE
ステートメントを使用してデータベース所有者を変更することはできません。ただし、SQL Server と同様に、SQL Azure のデータベース内にユーザーを新たに作成し、ユーザーを db_owner
データベースレベル ロールに追加することができます。これらの追加ユーザーは、最初にデータベースを作成したログイン以外のログインにリンクできます。ただし、これらの追加ユーザーがデータベースのコピーを実行することはできません。
データベース コピーの作業負荷は、関連する SQL Azure サーバーのパフォーマンスに影響を及ぼし、その他のデータベース負荷と同様に管理されます。このため、コピー作業が完了するまで時間がかかる可能性があります (リソースを過度に使用するために処理が抑えられる場合)。
注意
データベースのコピーが失敗した場合は、ソース データベースの需要が少ないときにコピー処理を再開してください。コピー処理が完了するまで、ソース データベースで行う他の作業は一時停止してください。
SQL Azure CREATE DATABASE ステートメントを使用して、ソース データベースのコピーを開始します。「アクセス許可」で説明したアクセス許可要件を満たすログインを使用して、master データベースに接続している必要があります。異なるサーバー間のコピーを開始するには、新しいデータベースが作成される SQL Azure サーバー (コピー先サーバー) の master データベースに接続している必要があります。
CREATE DATABASE destination_database_name
AS COPY OF [source_server_name.]source_database_name
このステートメントを実行すると、データベースのコピー処理が開始されます。source_server_name
を指定しない場合は、ソース データベースがログインの接続先と同じ SQL Azure サーバーに置かれている必要があります。これは非同期プロセスなので、CREATE DATABASE
ステートメントが戻ってからデータベースのコピーが完了します。
データベースのコピーが開始されたら、コピー先サーバーの master データベースの sys.databases
および sys.dm_database_copies
ビューをクエリして、コピーの詳細な進行状況を取得できます。次の Transact-SQL の例は、databaseBackup
という名前の新しいデータベースを作成するコピーの進行状況を取得する方法を示します。
-- execute on the master database
-- retrieve state of the new database
select name, state, state_desc from sys.databases
where name = 'databaseBackup'
-- retrieve copying details
select * from sys.dm_database_copies
where database_id = DB_ID('databaseBackup')
使用したデータベースに対して、使用した日数分の料金をお支払いいただきます。コピー時にエラーが発生した場合は、すぐにターゲット データベースを削除してください。課金情報の詳細については、「SQL Azure の課金情報」を参照してください。データベース コピー エラーの一覧については、「データベース コピーのエラー」を参照してください。
コピー処理によって作成された新しいデータベースには、コピーが完了した時点で、ソース データベースとトランザクション的に一貫性があります。
データベース バックアップの観点から見ると、SQL Azure で定期的にデータベースをコピーすることは、オンプレミス SQL Server データベースで完全バックアップを取ることと同じです。コピーが正常に完了すれば、前回コピーしたデータベースは削除できます。
コピー処理を完了前に中止する場合は、DROP DATABASE
ステートメントを使用して、コピー先データベースを削除できます。ソース データベースを削除しても、コピー処理はキャンセルされます。これらのオプションが機能するには、「アクセス許可」で説明したアクセス許可要件を満たすログインを使用する必要があります。
データベース コピーが完了すると、新しいデータベースは次のいずれかの状態になります。これは、sys.databases
ビューの state_desc
列に示されます。コピーが正常に実行された場合、新しいデータベースは、Online
状態になります。Online
状態になった新しいデータベースは、通常のデータベースになり、ソース データベースとは独立して管理および使用できます。
コピーが正常に実行されなかった場合、新しいデータベースは、Suspect
状態になります。Suspect
状態になった新しいデータベースは使用できず、アクセスまたは回復することもできません。この場合は、コピー先データベースを削除し、ソース データベースのコピーを再度実行してください。
注意
データベースのエディションと最大サイズは、データベースの作成時に指定します。SQL Azure でデータベースを作成したら、それを SQL Azure の新しいデータベースにコピーして、データベースをバックアップすることができます。コピーが完了すると、新しいデータベースのエディションと最大サイズはソース データベースと同じになります。SQL Azure でデータベースのエディションまたは最大サイズを設定および変更する方法については、「SQL Azure の課金情報」を参照してください。
方法: データベースをバックアップする (SQL Azure)
方法: データベースを別のサーバーにコピーする (SQL Azure)
CREATE DATABASE (SQL Azure データベース)
Administration (SQL Azure データベース)
ページのトップへ