トランザクション上一貫性のある Azure SQL Database のデータベースのコピーを作成する

適用対象: Azure SQL データベース

Azure SQL Database では、同じサーバーまたは別のサーバーのいずれかに、既存のデータベースのコピーを作成するための複数の方法が用意されています。 Azure Portal、PowerShell、Azure CLI、または Transact-SQL を使って、データベースをコピーできます。

注意

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

概要

データベースのコピーは、コピー要求が開始された時点でのソース データベースのトランザクション上一貫性のあるスナップショットになります。 コピーには、同じサーバーまたは別のサーバーを選択できます。 また、ソース データベースのバックアップの冗長性とコンピューティング サイズを維持するか、同じサービス レベル内で別のバックアップ ストレージの冗長性とコンピューティング サイズ、またはそのいずれかを使用することもできます。 Standard サービス レベルのデータベースを Standard レベルまたは General Purpose レベルにコピーでき、プレミアム サービス レベルのデータベースを プレミアム または Business Critical レベルにコピーできます。

コピーが完了すると、新しいデータベースは、ソース データベースに対して完全に機能し、独立したデータベースになります。 コピーしたデータベースのログイン、ユーザー、およびアクセス許可は、ソース データベースとは別に管理されます。 コピーは geo レプリケーション テクノロジを使用して作成されます。 レプリカのシード処理が完了すると、geo レプリケーション リンクは自動的に終了します。 geo レプリケーションを使用するためのすべての要件が、データベースのコピー操作に適用されます。 詳細については、「アクティブ geo レプリケーションの作成と使用」を参照してください。

注意

Azure portal、PowerShell、および Azure CLI は、別のサブスクリプションへのデータベースのコピーをサポートしていません。

Hyperscale データベースのデータベース コピー

Hyperscale サービス レベルのデータベースでは、ターゲット データベースによって、コピーが高速コピーとデータ サイズ コピーのどちらになるかが決定されます。

  • 高速コピー: コピーがソースと同じリージョンで行われると、BLOB のスナップショットからコピーが作成されます。このコピー操作は、データベースのサイズに関係なく高速に行われます。

  • データ コピーのサイズ: ターゲット データベースがソースとは異なるリージョンにある場合、またはターゲットのデータベースのバックアップ ストレージの冗長性 (ローカル、ゾーン、Geo) がソース データベースと異なる場合、コピー操作はデータ サイズの操作になります。 コピー時間は、ページ サーバー BLOB が並列コピーされるときのように、サイズと直接比例しません。

データベースのコピーへのログイン

データベースを同じサーバーにコピーすると、両方のデータベースで同じログインを利用できます。 データベースをコピーするために使うセキュリティ プリンシパルが、新しいデータベースのデータベース所有者になります。

データベースを別のサーバーにコピーすると、ターゲット サーバーでコピー操作を開始したセキュリティ プリンシパルが、新しいデータベースの所有者になります。

ターゲットサーバーに関係なく、すべてのデータベース ユーザー、アクセス許可、およびセキュリティ識別子 (SID) がデータベースのコピーにコピーされます。 データ アクセスに 包含データベース ユーザー を使用すると、コピーしたデータベースのユーザー資格情報が同じであることが確認されます。これにより、コピーの完了後すぐに同じ資格情報でアクセスできるようになります。

データ アクセスにサーバー レベルのログインを使用し、別のサーバーにデータベースをコピーする場合、ログイン ベースのアクセスが機能しない可能性があります。 これは、ログインがターゲット サーバーに存在しないか、そのパスワードとセキュリティ識別子 (SID) が異なるために発生する場合があります。 別のサーバーにデータベースをコピーする場合のログイン管理の詳細については、ディザスター リカバリー後に Azure SQL Database のセキュリティを管理する方法をご覧ください。 別のサーバーへのコピー操作が成功した後、他のユーザーが再マップされる前に、データベース所有者に関連付けられているログインのみ、またはサーバー管理者がコピーしたデータベースにログインできます。 コピー操作の完了後にログインを解決し、データ アクセスを確立する方法については、「ログインの解決」をご参照ください。

Azure Portal を使用したコピー

Azure portal を使用してデータベースをコピーするには、データベースのページを開き、[コピー] を選択して [SQL Database の作成 - データベースのコピー] ページを開きます。 データベースのコピー先となるターゲット サーバーの値を入力します。

Azure portal のスクリーンショット。データベースの概要ページで [データベースのコピー] オプションが強調表示されています。

データベースをコピーする

PowerShell、Azure CLI、または Transact-SQL (T-SQL) を使って、データベースをコピーできます。

PowerShell の場合、New-AzSqlDatabaseCopy コマンドレットを使用します。

重要

PowerShell Azure Resource Manager (RM) モジュールは Azure SQL Database で引き続きサポートされますが、今後の開発はすべて Az.Sql モジュールを対象に行われます。 AzureRM モジュールのバグ修正は、少なくとも 2020 年 12 月までは引き続き受け取ることができます。 Az モジュールと AzureRm モジュールのコマンドの引数は実質的に同じです。 その互換性の詳細については、「新しい Azure PowerShell Az モジュールの概要」を参照してください。

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

データベースのコピーは非同期操作ですが、要求が受け入れられた直後にターゲット データベースが作成されます。 まだ進行中のコピー操作を取り消す必要がある場合は、Remove-AzSqlDatabase コマンドレットを使用してターゲット データベースをドロップします。

完全な PowerShell のサンプル スクリプトについては、「新しいサーバーにデータベースをコピーする」をご覧ください。

コピー操作の進行状況の監視

に対してクエリを実行してコピー処理を監視し、 sys. dm_database_copiesdm_operation_status を表示します。 コピーの進行中は、新しいデータベースの sys.databases ビューの state_desc 列は COPYING に設定されます。

  • コピーに失敗した場合は、新しいデータベースの sys.databases ビューの state_desc 列は SUSPECT に設定されます。 新しいデータベースに対して DROP ステートメントを実行した後でもう一度やり直してください。
  • コピーに成功した場合は、新しいデータベースの sys.databases ビューの state_desc 列が ONLINE に設定されます。 コピー操作は完了しています。新しいデータベースは通常のデータベースであり、コピー元データベースから独立して変更することができます。

注意

進行中のコピー操作を取り消すには、新しいデータベースに対して DROP DATABASE ステートメントを実行します。

重要

ソースよりも非常に小さいサービス目標を使用してコピーを作成する必要がある場合、ターゲット データベースには、シード処理を完了するための十分なリソースがない可能性があります。これにより、コピー操作が失敗する可能性があります。 このシナリオでは、geo リストア要求を使用して、別のサーバーや別のリージョンにコピーを作成します。 詳細については、「データベースのバックアップを使用した Azure SQL Database の復旧」を参照してください。

アクセス許可

データベースのコピーを作成するには、次のロールが必要です:

  • サブスクリプションの所有者または
  • SQL Server 共同作成者ロールまたは
  • 次の権限を持つソースサーバーのカスタムロール:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/writeと
  • 次の権限を持つターゲットサーバーのカスタムロール:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

データベースのコピーを取り消すには、次のロールが必要です:

  • サブスクリプションの所有者または
  • SQL Server 共同作成者ロールまたは
  • 次の権限を持つターゲットデータベース上のカスタムロール:
    • Microsoft.Sql/servers/databases/delete

Azure portal を使用してデータベースのコピーを管理するには、以下のアクセス許可も必要です。

  • Microsoft.Resources/subscriptions/resources/read
  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/operationstatuses/read

ポータルでリソース グループのデプロイの下の操作と、SQL 操作を含む、複数のリソースプロバイダーにまたがる操作を表示するには、これらの追加アクセス許可が必要です。

  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

ログインの解決

新しいデータベースがターゲット サーバーでオンラインになった後、 ALTER USER ステートメントを使用して、ユーザーを新しいデータベースからターゲット サーバーのログインに再マップします。 孤立したユーザーを解決するには、「 孤立ユーザーのトラブルシューティング」をご覧ください。 ディザスター リカバリー後に Azure SQL Database のセキュリティを管理する方法に関するページもご覧ください。

新しいデータベースのすべてのユーザーのアクセス許可は、コピー元データベースで保持していたものと同じです。 データベースのコピーを開始したユーザーが、新しいデータベースのデータベース所有者になります。 コピーが成功した後、他のユーザーが再マップされる前に、データベース所有者のみが新しいデータベースにサインインできます。

別のサーバーにデータベースをコピーする場合のユーザーおよびログインの管理の詳細については、ディザスター リカバリー後に Azure SQL Database のセキュリティを管理する方法に関するページをご覧ください。

データベース コピー エラー

次のエラーは、Azure SQL Database でデータベースをコピーしているときに発生する可能性があります。 詳細については、「 Azure SQL Database のコピー」を参照してください。

エラー コード 重大度 説明
40635 16 IP アドレスが '%.*ls' のクライアントは、一時的に無効になっています。
40637 16 データベース コピーの作成は現在無効です。
40561 16 データベースのコピーに失敗しました。 ソースまたはターゲットのデータベースが存在しません。
40562 16 データベースのコピーに失敗しました。 ソース データベースは削除されました。
40563 16 データベースのコピーに失敗しました。 ターゲット データベースは削除されました。
40564 16 データベースのコピーに失敗しました。内部エラーが発生しました。 ターゲット データベースを削除してやり直してください。
40565 16 データベースのコピーに失敗しました。 同じソースから複数のデータベース コピーを同時に実行することはできません。 ターゲット データベースを削除してやり直してください。
40566 16 データベースのコピーに失敗しました。内部エラーが発生しました。 ターゲット データベースを削除してやり直してください。
40567 16 データベースのコピーに失敗しました。内部エラーが発生しました。 ターゲット データベースを削除してやり直してください。
40568 16 データベースのコピーに失敗しました。 ソース データベースが使用できなくなりました。 ターゲット データベースを削除してやり直してください。
40569 16 データベースのコピーに失敗しました。 ターゲット データベースが使用できなくなりました。 ターゲット データベースを削除してやり直してください。
40570 16 データベースのコピーに失敗しました。内部エラーが発生しました。 ターゲット データベースを削除してやり直してください。
40571 16 データベースのコピーに失敗しました。内部エラーが発生しました。 ターゲット データベースを削除してやり直してください。