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) になります。次の図に、同じサーバー上でのコピーを示します。

データベースを同じ SQL Azure サーバーにコピーする

この図では、Database1A が、同じ SQL Azure サーバー Server1 にある新しいデータベース Database1B にコピーされます。データベースをコピーしたログインが Database1B の DBO になります。Database1A のすべてのデータベース ユーザー、アクセス許可、およびセキュリティ識別子 (SID) が Database1B にコピーされます。ユーザー SID は両方のデータベースで同じなので、Server1 に含まれるログインは、両方のデータベースに対して同じアクセス許可を保持します。

コピーが完了すると、Database1B は通常のデータベースになります。Database1B のログイン、ユーザー、およびアクセス許可は、Database1A とは関係なく管理できます。

異なるサーバー間でのコピー

同じサブ領域またはデータ センター内にある 2 つの異なる SQL Azure サーバー間でデータベースをコピーすることもできます。新しいデータベースは別の SQL Azure サーバー上に作成されるため、異なる master データベースに関連付けられます。新しいデータベースのすべてのユーザーは、ソース データベースで持っていたアクセス許可を保持します。新しいデータベースが作成されると、データベースのコピーに使用されたセキュリティ プリンシパルが新しいデータベースの DBO になり、新しいセキュリティ識別子 (SID) が割り当てられます。次の図に、異なるサーバー間でのコピーを示します。

データベースを異なる SQL Azure サーバーにコピーする

この図では、Server1Database1A が、別の 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 データベース)

ページのトップへ