セールス: 1-800-867-1380

方法: データベース コピーを使用する (Azure SQL データベース)

更新日: 2014年7月

このトピックでは、データベース コピー (DB コピー) を使用して Microsoft Azure SQL データベース のコピーを作成する方法について説明します。コピー操作の結果として作成される新しいデータベースは、完全な機能を備え、コピー元のデータベースからは独立しています。コピー操作では、コピー元データベースのサービス階層とパフォーマンス レベルが維持されます。コピー先のサーバーに使用可能なクォータがあることを確認してください。ない場合、操作は失敗します。データベースのコピーに使用できるすべての方法とシナリオについては、「Azure SQL データベースでのデータベースのコピー」を参照してください。

このトピックの内容

次の表は、データベースのコピーを作成するために利用できる手法をまとめたものです。

 

コピー手法 プレミアム Standard Basic Business Web サーバー間/地域間

Azure Management Portal

同じサーバーへのコピーのみをサポートします。

Important重要
詳細については、後の制限事項のセクションを参照してください。

Transact-SQL

(CREATE DATABASE ステートメント + AS COPY OF 句)

サーバー間がサポートされますが、両方のサーバーが同じ地域にある必要があります。

REST API

サーバー間およびリージョン間のコピーをサポートします。Premium データベースの場合、地域間レプリケーションの関係を設定することもできます。この関係を使用すると、地理的地域に分散された複数のサーバーでデータベースのコピーを維持することができます。詳細については、「Available Methods to Copy a Database」を参照してください。

PowerShell

サーバー間およびリージョン間のコピーをサポートします。Premium データベースの場合、地域間レプリケーションの関係を設定することもできます。この関係を使用すると、地理的地域に分散された複数のサーバーでデータベースのコピーを維持することができます。詳細については、「Available Methods to Copy a Database」を参照してください。

  • Azure SQL データベース の領域は、複数の物理クラスターで構成されている場合がありますが、現在、PowerShell のコマンドレットまたは REST API を使ったデータベースのコピーは、2 つの異なるクラスター間に限られます。また、Transact-SQL を使ったデータベースのコピーは、2 つの異なるサブスクリプション間に限られます。容量管理の一環として、Azure SQL データベースは定期的にサーバーを異なるクラスターに移動することがあります。ただし、同じサブスクリプションに属しているサーバーは同じクラスター内に一緒に維持されます。

    データベースをコピーできるかどうかを確認するには: コピー元サーバーとコピー先サーバーの両方で ping コマンド ("ping <server>") を使用して、これらのサーバーの IP アドレスを解決します。IP アドレスが同じ場合、データベースのコピーを行うことができます。詳細については、「ping コマンドを使用する」を参照してください。

  • データベースのコピーは、Transact-SQL、PowerShell、または REST API を使用して行うことができます。ただし、Transact-SQL を使用したコピーは、同じクラスター内の異なるサーバー間に制限されています。PowerShell と REST API では、異なる物理クラスターに存在する異なるサーバーへのコピーがサポートされます。

データベースのコピーのワークロードは、コピー処理に関係する Azure SQL データベース サーバーのパフォーマンスに影響するため、コピー処理が完了するまでに時間がかかる可能性があります。データベースのコピーに失敗した場合は、コピー元データベースに対する処理要求が少ないときにコピー処理を再度実行してください。場合によっては、コピー処理が完了するまでの間、コピー元データベースの他のワークロードを中断する必要があります。

Transact-SQL を使用してデータベースをコピーするには、現在のログインに次の権限が必要です。

  • 両方のサーバー:ログインは、両方の Azure SQL データベース サーバーに対して、同じログイン名とパスワードを持っている必要があります。

  • コピー先サーバー:ログインは、サーバーレベルの dbmanager ロールのメンバーである必要があります。注: Azure SQL データベース サーバーのサーバーレベル プリンシパルは dbmanager ロールのメンバーではありませんが、自動的に同じ権限が与えられます。Azure SQL データベース でのログイン管理の詳細については、「Azure SQL データベースにおけるデータベースとログインの管理」を参照してください。

  • コピー元サーバー:ログインは、コピー元データベースの DBO であることが必要です。コピー元データベースを作成したログイン、DBO、またはサーバー レベルのプリンシパルのみが、そのデータベースを別のデータベースにコピーできます。

以上の権限の要件が満たされている場合に、現在のログインを使って新しいデータベースに対して Azure SQL データベースの ALTER DATABASE ステートメントおよび DROP DATABASE ステートメントを実行できます。PowerShell または REST API を使用してデータベースをコピーする場合の許可には、証明書ベースの認証が使用されます。

noteメモ
ALTER AUTHORIZATION ON DATABASE ステートメントを使用したデータベース所有者の変更は、Azure SQL データベース ではサポートされません。Azure SQL データベースのデータベース内部に追加ユーザーを作成し、そのユーザーを db_owner データベースレベル ロールに追加できます。この追加ユーザーを、データベースを最初に作成したログイン以外のログインに関連付けることができます。ただし、そのような追加ユーザーはデータベースのコピーを実行できません。

Important重要
データベースの監査設定は、新しいデータベースにコピーされません。新しいデータベースに監査が必要な場合は、データベースをアクティブにした後で有効にしてください。新しいデータベースが元のデータベースと同じリージョンに存在する場合、同じ Azure ストレージ アカウントを使用することができます。新しいデータベースが、元のデータベースと異なるリージョンに存在する場合は、新しいデータベースと同じリージョン内のストレージ アカウントを使用する必要があります。Azure SQL Database の監査の詳細については、「Get started with SQL database auditing (SQL Database の監査の概要)」を参照してください。

[トップに戻る] リンクで使用される矢印アイコン [Top]

  1. Microsoft アカウントを使用して Azure 管理ポータルにサインインします。

  2. [SQL データベース] タブに移動します。

  3. [データベース] ボックスの一覧でデータベースを選択し、画面の下部にあるコマンド バーで [コピー] ボタンをクリックします。[データベース設定のコピー] ダイアログ ボックスが開きます。新しいデータベースの名前を指定し、ダイアログ ボックスの [チェック] をクリックしてコピー操作を開始します。

  1. PowerShell を開始し、Azure サブスクリプションに接続します。

  2. データベースのコピーを作成するには、Start-AzureSqlDatabaseCopy コマンドレットを使用します。

    このコマンドレットの –ContinuousCopy パラメーターはこのケースでは使用されないことに注意してください。このパラメーターは、geo レプリケーションの設定のみに使用されます。geo レプリケーションの詳細については、「Azure SQL データベースの継続性」を参照してください。

  3. 使用例: この例では、データベース "Orders" をデータベース "Orders Copy" にコピーします。元のデータベースとコピーは同じサーバー "abc" に存在します。

    PS C:\>Start-AzureSqlDatabaseCopy -ServerName "abc" -DatabaseName "Orders" -PartnerDatabase "Orders Copy"
    
    

  • サーバーレベル プリンシパル ログインまたはコピー対象のデータベースを作成したログインを使用して、master データベースにログオンします。サーバーレベル プリンシパルではないログインがデータベースをコピーするには、dbmanager ロールのメンバーである必要があります。サーバーへのログインと接続の詳細については、それぞれ「Azure SQL データベースにおけるデータベースとログインの管理」と「Azure SQL データベース開発:操作方法に関するトピック」を参照してください。

  • CREATE DATABASE ステートメントを使用して、コピー元データベースのコピーを開始します。このステートメントを実行すると、データベースのコピー処理が開始されます。データベースのコピーは非同期的な処理であるため、データベースのコピーが完了する前に CREATE DATABASE ステートメントは制御を戻します。

  • sys.databases ビューと sys.dm_database_copies ビューを照会して、コピー処理を監視します。

    • コピーの進行中は、新しいデータベースの sys.databases ビューの state_desc 列が COPYING に設定されます。

    • コピーに失敗した場合は、新しいデータベースの sys.databases ビューの state_desc 列が SUSPECT に設定されます。この場合は、新しいデータベースに対して DROP ステートメントを実行し、後でもう一度実行してください。

    • コピーに成功した場合は、新しいデータベースの sys.databases ビューの state_desc 列が ONLINE に設定されます。この場合、コピーは完了し、新しいデータベースは通常のデータベースとして、コピー元のデータベースとは無関係に変更することができます。

  • (省略可) コピー処理を途中で取り消す場合は、新しいデータベースに対して DROP DATABASE ステートメントを実行します。コピー元のデータベースに対して DROP DATABASE ステートメントを実行することによっても、コピー処理を取り消すことができます。

次のコード例は、データベースのコピー処理を開始します。この例では、データベース Database1A が、同じ Azure SQL データベース サーバー上の Database1B という新しいデータベースにコピーされます。

-- Execute on the master database.
-- Start copying.
CREATE DATABASE Database1B AS COPY OF Database1A;

次のコード例を使って、データベースのコピー処理を監視できます。Database1B という名前の新しいデータベースに関する情報を取得するために、sys.databases ビューと sys.dm_database_copies ビューを照会します。

-- Execute on the master database.
-- Retrieve state of the new database, Database1B.
SELECT name, state, state_desc FROM sys.databases WHERE name = 'Database1B'

Important重要
次のステートメントでは、コピー処理中のときだけ結果セットが返されます。コピーが完了して、新しいデータベースがオンラインになると、このクエリでは結果が返されなくなります。

-- Execute on the master database.
-- Retrieve copying details.
SELECT * FROM sys.dm_database_copies copies
Inner JOIN sys.databases databases ON copies.database_id = databases.database_id
      WHERE databases.name = 'Database1B';

[トップに戻る] リンクで使用される矢印アイコン [Top]

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

  • Azure SQL データベース の CREATE DATABASE ステートメントを使用して、コピー元データベースのコピーを開始します。コピー先のサーバー上でこのステートメントを実行すると、データベースのコピー処理が開始されます。データベースのコピーは非同期的な処理であるため、データベースのコピーが完了する前に CREATE DATABASE ステートメントは制御を戻します。

  • sys.databases ビューと sys.dm_database_copies ビューを照会して、コピー処理を監視します。

    • コピーの進行中は、新しいデータベースの sys.databases ビューの state_desc 列が COPYING に設定されます。

    • コピーに失敗した場合は、新しいデータベースの sys.databases ビューの state_desc 列が SUSPECT に設定されます。この場合は、新しいデータベースに対して DROP ステートメントを実行し、後でもう一度実行してください。

    • コピーに成功した場合は、新しいデータベースの sys.databases ビューの state_desc 列が ONLINE に設定されます。この場合、コピーは完了し、新しいデータベースは通常のデータベースとして、コピー元のデータベースとは無関係に変更することができます。

  • (省略可) コピー処理を途中で取り消す場合は、新しいデータベースに対して DROP DATABASE ステートメントを実行します。コピー元のデータベースに対して DROP DATABASE ステートメントを実行することによっても、コピー処理を取り消すことができます。

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

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

-- Execute on the master database of bipk56ex
-- Start copying from Server1 to Server2
CREATE DATABASE Database2A AS COPY OF vipk56ex5c.Database1A;

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

Important重要
次のステートメントでは、コピー処理中のときだけ結果セットが返されます。コピーが完了して、新しいデータベースがオンラインになると、このクエリでは結果が返されなくなります。

-- Execute on the master database.
-- Retrieve state of the new database, Database1B.
SELECT name, state, state_desc FROM sys.databases WHERE name = 'Database1B'

Important重要
次のステートメントでは、コピー処理中のときだけ結果セットが返されます。コピーが完了して、新しいデータベースがオンラインになると、このクエリでは結果が返されなくなります。

-- Execute on the master database.
-- Retrieve copying details.
SELECT * FROM sys.dm_database_copies copies
Inner JOIN sys.databases databases ON copies.database_id = databases.database_id
      WHERE databases.name = 'Database1B';

[トップに戻る] リンクで使用される矢印アイコン [Top]

コピー処理を完了前に停止する必要がある場合、DROP DATABASE ステートメントを使用してコピー先データベースを削除できます。このような操作を正常に実行するために、前の「権限」で説明した権限の要件を満たすログインを使用してください。

[トップに戻る] リンクで使用される矢印アイコン [Top]

  • データベースのコピーが完了すると、新しいデータベースは次のどちらかの状態になります。

    • コピー処理に成功した場合、新しいデータベースは ONLINE 状態になります。新しいデータベースがオンラインになると、コピー元のデータベースとは無関係に管理し、使用できるようになります。

    • コピー処理に失敗した場合、新しいデータベースは SUSPECT 状態になります。問題のあるデータベースは使用できません。アクセスや復旧もできません。この場合、コピー先データベースを削除したうえで、コピー元データベースのコピーを再試行してください。

    状態を確認するには、sys.databases ビューの state_desc 列を調べます。

  • コピーが完了すると、新しいデータベースのサービス階層、パフォーマンス レベル、および最大サイズはコピー元データベースと同じになります。Azure SQL データベース でサービス階層またはパフォーマンス レベルを設定および変更する方法については、「データベースのサービス階層とパフォーマンス レベルの変更」を参照してください。

  • サーバー間でのコピーが完了すると、コピーのログイン、ユーザー、および権限は、コピー元データベースとは無関係に管理できるようになります。DBO ログインと ALTER USER ステートメントを使用して、新しいデータベースのユーザーを新しい Azure SQL データベース サーバーのログインにマップしてください。例:ALTER USER userName WITH LOGIN='loginName'。詳細については、「ALTER USER」を参照してください。

[トップに戻る] リンクで使用される矢印アイコン [Top]

関連項目

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2014 Microsoft