Share via


Azure CLI を使用して Azure VM に SQL データベースを復元する

Azure CLI は、コマンドラインやスクリプトで Azure リソースを作成および管理するために使用します。 この記事では、Azure CLI を使用して、バックアップされた SQL データベースを Azure VM に復元する方法について説明します。 これらのアクションは、Azure portal を使用して実行することもできます。

CLI コマンドを実行するには、Azure Cloud Shell を使用します。

この記事では、次の方法について学習します。

  • バックアップされたデータベースの復元ポイントを表示する
  • データベースを復元する

この記事では、Azure Backup を使用してバックアップした SQL データベースが Azure VM 上で実行されていることを前提としています。 CLI を使用して Azure の SQL データベースをバックアップする方法を使用して SQL データベースをバックアップした場合は、次のリソースを使用しています。

  • SQLResourceGroup という名前のリソース グループ。
  • SQLVault という名前のコンテナー。
  • VMAppContainer;Compute;SQLResourceGroup;testSQLVM という名前の保護されたコンテナー。
  • sqldatabase;mssqlserver;master という名前のバックアップされたデータベース/項目。
  • westus リージョン内のリソース。

Note

サポートされている構成とシナリオの詳細については、SQL バックアップのサポート マトリックスに関する記事を参照してください。

バックアップされたデータベースの復元ポイントを表示する

データベースのすべての復旧ポイントの一覧を表示するには、次のように az backup recoverypoint list コマンドを使用します。

az backup recoverypoint list --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
   --output table

復旧ポイントの一覧は次のように表示されます。

Name                      Time                               BackupManagementType   Item Name               		RecoveryPointType
-------------------       ---------------------------------  ---------------------  ----------------------  		------------------
7660777527047692711       2019-12-10T04:00:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Full
7896624824685666836       2019-12-15T10:33:32.346000+00:00   AzureWorkload          sqldatabase;mssqlserver;master  Differential
DefaultRangeRecoveryPoint                                    AzureWorkload          sqldatabase;mssqlserver;master  Log

上記の一覧には、完全、差分、ログの各バックアップに対応する 3 つの復旧ポイントが含まれています。

Note

az backup recoverypoint show-log-chain コマンドを使用して、すべての連続したログ バックアップ チェーンの開始ポイントと終了ポイントを表示することもできます。

データベースを復元するための前提条件

データベースを復元する前に、次の前提条件が満たされていることを確認してください。

  • データベースの復元先にできるのは、同じリージョン内の SQL インスタンスのみです。
  • ターゲット インスタンスは、ソースと同じコンテナーに登録されている必要があります。

データベースを復元する

Azure Backup では、Azure VM 上で実行されている SQL データベースを次のように復元できます。

  • ログ バックアップを使用して、特定の日付または時刻 (秒) に復元する。 選択された時刻を基に、Azure Backup は完全、差分、または一連のログ バックアップから、必要になる適切なバックアップを自動的に判別します。
  • 特定の完全バックアップまたは差分バックアップに復元することで、特定の復旧ポイントに復元する。

データベースを復元するには、az restore restore-azurewl コマンドを使用します。これには、入力の 1 つとして復旧構成オブジェクトが必要です。 このオブジェクトは、az backup recoveryconfig show コマンドを使用して生成できます。 復旧構成オブジェクトには、復元を実行するためのすべての詳細が含まれています。 これらの 1 つは復元モード (OriginalWorkloadRestore または AlternateWorkloadRestore) です。

Note

OriginalWorkloadRestore: 元のソースと同じ SQL インスタンスにデータを復元します。 このオプションでは、元のデータベースが上書きされます。 AlternateWorkloadRestore: データベースを別の場所に復元し、元のソース データベースを保持します。

別の場所に復元する

別の場所にデータベースを復元するには、復元モードとして AlternateWorkloadRestore を使用します。 次に、復元ポイントを選択する必要があります。以前の特定の時点、または以前の復元ポイントのいずれかを選択できます。

前の復元ポイントへの復元に進みましょう。 データベースの復元ポイントの一覧を表示して、復元するポイントを選択します。 ここでは、7660777527047692711 という名前の復元ポイントを使用しましょう。

上記の復元ポイント名と復元モードで、az backup recoveryconfig show コマンドを使用して復旧構成オブジェクトを作成します。 このコマンドの残りのパラメーターを確認します。

  • --target-item-name: 復元されたデータベースによって使用される名前。 このシナリオでは、restored_database という名前を使用しました。
  • --target-server-name: Recovery Services コンテナーに正常に登録され、復元対象のデータベースと同じリージョンにとどまる SQL サーバーの名前。 ここでは、保護したのと同じ SQL サーバー (名前は testSQLVM) にデータベースを復元します。
  • --target-server-type: SQL データベースの復元の場合、SQLInstance を使用する必要があります。

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name SQLDataBase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --rp-name 7660777527047692711 \
    --target-item-name restored_database \
    --target-server-name testSQLVM \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --output json

上記のクエリに対する応答は、次のような復旧構成オブジェクトです。

{
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/restored_database",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "7660777527047692711",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": []
}

ここで、データベースを復元するには、az restore restore-azurewl コマンドを実行します。 このコマンドを使用するには、recoveryconfig.json という名前のファイルに保存されている上記の JSON 出力を入力します。

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --recovery-config recoveryconfig.json \
    --output table

出力は次のように表示されます。

Name                                  Operation    Status      Item Name                          Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  ---------------------------------  ------------------------  --------------------------------  --------------
be7ea4a4-0752-4763-8570-a306b0a0106f  Restore      InProgress  master [testSQLVM]  				  AzureWorkload             2022-06-21T03:51:06.898981+00:00  0:00:05.652967

応答によってジョブ名がわかります。 このジョブ名と az backup job show コマンドを使用してジョブの状態を追跡できます。

復元および上書き

元の場所に復元するには、復元モードとして OriginalWorkloadRestore を使用します。 次に、復元ポイントを選択する必要があります。以前の特定の時点、または以前の復元ポイントのいずれかを選択できます。

例として、以前の特定の時点 "28-11-2019-09:53:00" に復元することを選択してみましょう。 この復元ポイントは、dd-mm-yyyy, dd-mm-yyyy-hh:mm:ss の形式で指定できます。 復元する有効な特定の時点を選択するには、az backup recoverypoint show-log-chain コマンドを使用します。これにより、連続したログ チェーン バックアップの間隔が一覧表示されます。

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode OriginalWorkloadRestore \
    --log-point-in-time 20-06-2022-09:02:41 \
    --output json

上記のクエリに対する応答は、次のような復旧構成オブジェクトです。

{
  "alternate_directory_paths": null,
  "container_id": null,
  "container_uri": "VMAppContainer;compute;petronasinternaltest;sqlserver-11",
  "database_name": null,
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;msdb",
  "log_point_in_time": "20-06-2022-09:02:41",
  "recovery_mode": null,
  "recovery_point_id": "DefaultRangeRecoveryPoint",
  "restore_mode": "OriginalLocation",
  "source_resource_id": "/subscriptions/62b829ee-7936-40c9-a1c9-47a93f9f3965/resourceGroups/petronasinternaltest/providers/Microsoft.Compute/virtualMachines/sqlserver-11",
  "workload_type": "SQLDataBase"
}

ここで、データベースを復元するには、az restore restore-azurewl コマンドを実行します。 このコマンドを使用するには、recoveryconfig.json という名前のファイルに保存されている上記の JSON 出力を入力します。

az backup restore restore-azurewl --resource-group sqlResourceGroup \
    --vault-name sqlVault \
    --recovery-config recoveryconfig.json \
    --output table

出力は次のように表示されます。

Name                                  Operation    Status      Item Name                        Backup Management Type    Start Time UTC                    Duration
------------------------------------  -----------  ----------  -------------------------------  ------------------------  --------------------------------  --------------
1730ec49-166a-4bfd-99d5-93027c2d8480  Restore      InProgress  master [testSQLVM]  				AzureWorkload             2022-06-21T04:04:11.161411+00:00  0:00:03.118076

応答によってジョブ名がわかります。 このジョブ名と az backup job show コマンドを使用してジョブの状態を追跡できます。

セカンダリ リージョンへの復元

データベースをセカンダリ リージョンに復元するには、復元構成で、セカンダリ リージョンにあるターゲット コンテナーとサーバーを指定します。

az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode AlternateWorkloadRestore \
    --from-full-rp-name 293170069256531 \
    --rp-name 293170069256531 \
    --target-server-name targetSQLServer \
    --target-container-name VMAppContainer;compute;SQLResourceGroup;targetSQLServer \
    --target-item-name testdb_restore_1 \
    --target-server-type SQLInstance \
    --workload-type SQLDataBase \
    --target-resource-group SQLResourceGroup \
    --target-vault-name targetVault \
    --backup-management-type AzureWorkload

応答は、次のような回復構成オブジェクトです。

 {
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;SQLResourceGroup;targetSQLServer",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": "MSSQLSERVER/sqldatabase;mssqlserver;testdb_restore_1",
  "filepath": null,
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase",
  "alternate_directory_paths": [],
}

az restore restore-azurewl コマンドでこの復元構成を使用します。 --use-secondary-region フラグを選択して、データベースをセカンダリ リージョンに復元します。

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name testSQLVault \
    --recovery-config recoveryconfig.json \
    --use-secondary-region \
    --output table

出力は次のように表示されます。

Name                                  Operation           Status      Item Name                  Backup Management Type    Start Time UTC                    Duration
------------------------------------  ------------------  ----------  -------------------------  ------------------------  --------------------------------  --------------
0d863259-b0fb-4935-8736-802c6667200b  CrossRegionRestore  InProgress  master [testSQLVM] 		 AzureWorkload             2022-06-21T08:29:24.919138+00:00  0:00:12.372421

Note

セカンダリ リージョンで使用できるバックアップ データの RPO は 12 時間です。 このため、CRR をオンにすると、セカンダリ リージョンの RPO は 12 時間 + ログ頻度期間 (15 分以上に設定できます) になります。

ファイルとして復元

バックアップ データをデータベースではなくファイルとして復元するために、復元モードとして RestoreAsFiles を使用します。 次に、復元ポイントを選択します。以前の特定の時点、または以前の復元ポイントのいずれかを選択できます。 指定されたパスにファイルがダンプされると、ファイルをデータベースとして復元したい任意の SQL マシンにこれらのファイルを移すことができます。 これらのファイルを任意のマシンに移動できるので、サブスクリプションやリージョンをまたいでデータを復元できるようになりました。

ここでは、過去における特定の時点 (28-11-2019-09:53:00) を復元することを選択し、バックアップ ファイルのダンプ先に、同じ SQL サーバー上の /home/sql/restoreasfiles を選択します。 この復元ポイントは、dd-mm-yyyy または dd-mm-yyyy-hh:mm:ss の形式で指定できます。 復元する有効な特定の時点を選択するには、az backup recoverypoint show-log-chain コマンドを使用します。これにより、連続したログ チェーン バックアップの間隔が一覧表示されます。

上記の復元ポイント名と復元モードで、az backup recoveryconfig show コマンドを使用して復旧構成オブジェクトを作成します。 このコマンドの残りの各パラメーターを確認します。

  • --target-container-name: Recovery Services コンテナーに正常に登録され、復元対象のデータベースと同じリージョンに存在する SQL サーバーの名前。 hxehost という名前の、保護したものと同じ SQL サーバーにデータベースをファイルとして復元しましょう。
  • --rp-name: ポイントインタイム リストアでは、復元ポイントの名前は DefaultRangeRecoveryPoint です。
az backup recoveryconfig show --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --item-name sqldatabase;mssqlserver;master \
    --restore-mode RestoreAsFiles \
    --rp-name 932606668166874635 \
    --target-container-name VMAppContainer;Compute;SQLResourceGroup;testSQLVM \
    --filepath /sql/restoreasfiles \
    --output json

上記のクエリに対する応答は、次のような復旧構成オブジェクトです。

{
  "alternate_directory_paths": null,
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SQLResourceGroup;testSQLVM",
  "container_uri": "VMAppContainer;compute;SQLResourceGroup;testSQLVM",
  "database_name": null,
  "filepath": "/sql/restoreasfiles",
  "item_type": "SQL",
  "item_uri": "SQLDataBase;mssqlserver;master",
  "log_point_in_time": null,
  "recovery_mode": "FileRecovery",
  "recovery_point_id": "932606668166874635",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.Compute/virtualMachines/testSQLVM",
  "workload_type": "SQLDataBase"
}

ここで、データベースをファイルとして復元するには、az restore restore-azurewl コマンドを実行します。 このコマンドを使用するには、recoveryconfig.json という名前のファイルに保存されている上記の JSON 出力を入力します。

az backup restore restore-azurewl --resource-group SQLResourceGroup \
    --vault-name SQLVault \
    --restore-config recoveryconfig.json \
    --output json

出力は次のように表示されます。

{
  "eTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SQLResourceGroup/providers/Microsoft.RecoveryServices/vaults/SQLVault/backupJobs/e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "location": null,
  "name": "e9cd9e73-e3a3-425a-86a9-8dd1c500ff56",
  "properties": {
    "actionsInfo": [
      "1"
    ],
    "activityId": "9e7c8ee4-f1ef-11ec-8a2c-3c52826c1a9a",
    "backupManagementType": "AzureWorkload",
    "duration": "0:00:04.304322",
    "endTime": null,
    "entityFriendlyName": "master [testSQLVM]",
    "errorDetails": > [!NOTE]
> Information the user should notice even if skimmingnull,
    "extendedInfo": {
      "dynamicErrorMessage": null,
      "propertyBag": {
        "Job Type": "Restore as files"
      },
      "tasksList": [
        {
          "status": "InProgress",
          "taskId": "Transfer data from vault"
        }
      ]
    },
    "isUserTriggered": true,
    "jobType": "AzureWorkloadJob",
    "operation": "Restore",
    "startTime": "2022-06-22T05:53:32.951666+00:00",
    "status": "InProgress",
    "workloadType": "SQLDataBase"
  },
  "resourceGroup": "SQLResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupJobs"
}

応答によってジョブ名がわかります。 このジョブ名と az backup job show コマンドを使用してジョブの状態を追跡できます。

注意

チェーン全体を復元せず、ファイルのサブセットのみを復元する場合は、こちらに記載されている手順に従ってください。

クロス サブスクリプション復元

クロス サブスクリプション復元 (CSR) を使用すると、復元アクセス許可が使用可能な場合は、任意のサブスクリプションとテナントの下の任意のコンテナーに柔軟に復元できます。 既定では、CSR はすべての Recovery Services コンテナー (既存のコンテナーと新しく作成されたコンテナー) で有効になっています。

注意

  • Recovery Services コンテナーからクロス サブスクリプション復元をトリガーできます。
  • CSR はストリーミング ベースのバックアップでのみサポートされ、スナップショット ベースのバックアップではサポートされていません。
  • CSR を使用したリージョン間復元 (CRR) はサポートされていません。
az backup vault create

コンテナーの作成と更新中にコンテナーの CSR 状態を設定できるようにするパラメーター cross-subscription-restore-state を追加します。

az backup recoveryconfig show

SQL または HANA データソースのサブスクリプション間復元をトリガーするときに、ターゲット サブスクリプションを入力として指定できるようにするパラメーター --target-subscription-id を追加します。

:

   az backup vault create -g {rg_name} -n {vault_name} -l {location} --cross-subscription-restore-state Disable
   az backup recoveryconfig show --restore-mode alternateworkloadrestore --backup-management-type azureworkload -r {rp} --target-container-name {target_container} --target-item-name {target_item} --target-resource-group {target_rg} --target-server-name {target_server} --target-server-type SQLInstance --target-subscription-id {target_subscription} --target-vault-name {target_vault} --workload-type SQLDataBase --ids {source_item_id}

次のステップ