Share via


使用 Azure CLI 在 Azure VM 中還原 SQL 資料庫

Azure CLI 可用來從命令列或透過指令碼建立和管理 Azure 資源。 本文說明如何使用 Azure CLI 在 Azure VM 上還原備份的 SQL 資料庫。 您也可以使用 Azure 入口網站來執行這些動作。

使用 Azure Cloud Shell 來執行 CLI 命令。

在本文中,您將學會如何:

  • 檢視所備份資料庫的還原點
  • 還原資料庫

本文假設您擁有在 Azure VM 上執行的 SQL 資料庫,且會使用 Azure 備份來加以備份。 如果您已使用使用 CLI 在 Azure 中備份 SQL 資料庫來備份 SQL 資料庫,則您使用的是下列資源:

  • 名為 SQLResourceGroup 的資源群組。
  • 名為 SQLVault 的保存庫。
  • 名為 VMAppContainer;Compute;SQLResourceGroup;testSQLVM 的受保護容器。
  • 名為 sqldatabase;mssqlserver;master 的備份資料庫/項目。
  • westus 區域中的資源。

注意

若要深入了解支援的設定和案例,請參閱 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

上述清單包含三個復原點:各自用於完整、差異和記錄備份。

注意

您也可以使用 az backup recoverypoint show-log-chain 命令,來檢視每個未中斷記錄備份鏈結的起點和終點。

用以還原資料庫的必要條件

在還原資料庫之前,請先確定您符合下列必要條件:

  • 您只能將資料庫還原到相同區域中的 SQL 執行個體。
  • 目標執行個體必須使用相同的來源保存庫進行註冊。

還原資料庫

Azure 備份可以還原在 Azure VM 上執行的 SQL 資料庫,如下所示:

  • 使用記錄備份還原至特定日期或時間 (可精確到秒)。 Azure 備份會根據選取的時間,自動決定還原所需的適當完整差異備份和記錄備份鏈結。
  • 還原至特定完整或差異備份,以還原至特定復原點。

若要還原資料庫,請使用 az restore restore-azurewl 命令,這需要某個復原設定物件來作為其中一個輸入。 您可以使用 az backup recoveryconfig show 命令來產生這個物件。 復原設定物件包含用來執行還原的所有詳細資料。 其中一個詳細資料是還原模式 – OriginalWorkloadRestoreAlternateWorkloadRestore

注意

OriginalWorkloadRestore:將資料還原至與原始來源相同的 SQL 執行個體。 此選項會覆寫原始資料庫。 AlternateWorkloadRestore:將資料庫還原至替代位置,並保留原始來源資料庫。

還原至替代位置

若要將資料庫還原至替代位置,請使用 AlternateWorkloadRestore 作為還原模式。 接著,您必須選擇還原點,這可以是先前的時間點,或是任何先前的還原點。

讓我們繼續還原至先前的還原點。 檢視資料庫的還原點清單,然後選擇要還原的還原點。 這裡讓我們使用名稱為 7660777527047692711 的還原點。

使用上述還原點名稱和還原模式,藉由 az backup recoveryconfig show 命令來建立復原設定物件。 檢查此命令中的其餘參數:

  • --target-item-name:還原資料庫要使用的名稱。 在本案例中,我們使用的名稱為 restored_database
  • --target-server-name:這是已成功向復原服務保存庫完成註冊,並且和所要還原的資料庫位於相同區域的 SQL 伺服器名稱。 現在,您要將資料庫還原到已保護的相同 SQL Server,名為 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 命令。 為了使用此命令,請輸入上述 JSON 輸出,其已儲存至名為 recoveryconfig.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 命令。 為了使用此命令,請輸入上述 JSON 輸出,其已儲存至名為 recoveryconfig.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-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

注意

次要區域中可供使用的備份資料 RPO 為 12 個小時。 因此,當您開啟 CRR 時,次要區域的 RPO 是 12 小時 + 記錄頻率持續時間 (可設定為至少 15 分鐘)。

還原為檔案

若要將備份資料還原為檔案 (而非資料庫),需要使用 RestoreAsFiles 作為還原模式。 接著選擇還原點,這可以是先前的時間點,或是任何先前的還原點。 一旦檔案備份到指定的路徑,您就可以將這些檔案放到任何 SQL 機器上,並在其中將檔案還原為資料庫。 因為您可以將這些檔案移至任何機器,所以您現在可以在訂用帳戶和區域之間還原資料。

現在,我們將選擇還原到先前的時間點:28-11-2019-09:53:00,並選擇相同 SQL 伺服器上的 /home/sql/restoreasfiles 作為傾印備份檔案的位置。 您可以使用下列其中一種格式來提供此還原點:dd-mm-yyyydd-mm-yyyy-hh:mm:ss。 為了選擇有效的還原時間點,請使用 az backup recoverypoint show-log-chain 命令,以列出未中斷記錄鏈結備份的間隔。

使用上述還原點名稱和還原模式,藉由 az backup recoveryconfig show 命令來建立復原設定物件。 檢查此命令中的其餘各項參數:

  • --target-container-name:這是已成功向復原服務保存庫完成註冊,並且和所要還原的資料庫位於相同區域的 SQL 伺服器名稱。 讓我們將資料庫作為檔案還原到已保護的相同 SQL Server,名為 hxehost
  • --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 命令。 為了使用此命令,請輸入上述 JSON 輸出,其已儲存至名為 recoveryconfig.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。

注意

  • 您可以從復原服務保存庫觸發跨訂用帳戶還原。
  • 只有對串流型備份才支援 CSR,而且對快照型備份也不支援 CSR。
  • 不支援使用 CSR 的跨區域還原(CRR)。
az backup vault create

新增參數 cross-subscription-restore-state,此參數可讓您在保存庫建立和更新期間設定保存庫的 CSR 狀態。

az backup recoveryconfig show

新增參數 --target-subscription-id,此參數可讓您在觸發 SQL 或 HANA 資料來源的跨訂用帳戶還原時,提供目標訂用帳戶作為輸入。

範例:

   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}

下一步