Share via


教學課程:使用 Azure CLI 在 Azure VM 中還原 SAP HANA 資料庫

本教學課程說明如何使用 Azure CLI,還原 SAP HANA 資料庫執行個體和 SAP HANA 系統複寫 (HSR) 執行個體。

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

注意

  • 目前不支援對 HSR 進行原始位置復原 (OLR)。
  • 不支援還原至 HSR 執行個體。 不過,僅支援還原至 HANA 執行個體。

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

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

  • 名為 saphanaResourceGroup 的資源群組。
  • 名為 saphanaVault 的保存庫。
  • 名為 VMAppContainer;Compute;saphanaResourceGroup;saphanaVM 的受保護容器。
  • 名為 saphanadatabase;hxe;hxe 的備份資料庫/項目。
  • westus2 區域中的資源。

若要深入了解支援的設定和案例,請參閱 SAP HANA 備份支援矩陣

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

若要檢視資料庫的所有復原點清單,請使用 az backup recoverypoint list Cmdlet,如下所示:

選擇資料庫類型

若要檢視可用的復原點,請執行下列命令:

az backup recoverypoint list --resource-group saphanaResourceGroup \
    --vault-name saphanaVault \
    --container-name VMAppContainer;Compute;saphanaResourceGroup;saphanaVM \
    --item-name saphanadatabase;hxe;hxe \
   --output table

復原點清單看起來會像下面這樣:

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

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

注意

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

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

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

  • 您只能將資料庫還原到相同區域中的 SAP HANA 執行個體
  • 目標執行個體必須使用相同的來源保存庫進行註冊
  • Azure 備份無法在相同的 VM 上識別出兩個不同的 SAP HANA 執行個體。 因此,您無法在相同 VM 上將資料從某個執行個體還原到另一個執行個體。

還原資料庫

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

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

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

注意

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

還原至替代位置

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

在本教學課程中,您將還原到先前的還原點。 檢視資料庫的還原點清單,然後選擇要作為還原目標的還原點。 本教學課程會使用名稱為 7660777527047692711 的還原點。

讓我們使用上述還原點名稱和還原模式,透過 az backup recoveryconfig show Cmdlet 來建立復原設定物件。 讓我們看看此 Cmdlet 中的其餘參數各自代表什麼:

  • --target-item-name 這是所還原的資料庫將會使用的名稱。 在本案例中,我們使用的名稱為 restored_database
  • --target-server-name 這是已成功向復原服務保存庫完成註冊,並且和所要還原的資料庫位於相同區域的 SAP HANA 伺服器所具有的名稱。 在本教學課程中,我們會將資料庫還原到我們已保護的相同 SAP HANA 伺服器,其名稱為 hxehost
  • --target-server-type 若要還原 SAP HANA 資料庫,則必須使用 HANAInstance

選擇資料庫類型

若要開始還原作業,請執行下列命令:


az backup recoveryconfig show --resource-group saphanaResourceGroup \
    --vault-name saphanaVault \
    --container-name VMAppContainer;Compute;saphanaResourceGroup;saphanaVM \
    --item-name saphanadatabase;hxe;hxe \
    --restore-mode AlternateWorkloadRestore \
    --rp-name 7660777527047692711 \
    --target-item-name restored_database \
    --target-server-name hxehost \
    --target-server-type HANAInstance \
    --workload-type SAPHANA \
    --output json

上述查詢的回應將會是如下所示的復原設定物件:

{"restore_mode": "AlternateLocation", "container_uri": " VMAppContainer;Compute;saphanaResourceGroup;saphanaVM ", "item_uri": "SAPHanaDatabase;hxe;hxe", "recovery_point_id": "7660777527047692711", "item_type": "SAPHana", "source_resource_id": "/subscriptions/ef4ab5a7-c2c0-4304-af80-af49f48af3d1/resourceGroups/saphanaResourceGroup/providers/Microsoft.Compute/virtualMachines/saphanavm", "database_name": null, "container_id": null, "alternate_directory_paths": null}

現在,為了還原資料庫,請執行 az restore restore-azurewl Cmdlet。 為了使用此命令,我們將輸入上述 json 輸出,其已儲存至名為 recoveryconfig.json 的檔案中。

az backup restore restore-azurewl --resource-group saphanaResourceGroup \
    --vault-name saphanaVault \
    --restore-config recoveryconfig.json \
    --output table

輸出看起來像這樣:

Name                                  Resource
------------------------------------  -------
5b198508-9712-43df-844b-977e5dfc30ea  SAPHANA

回應會提供您作業名稱。 使用 az backup job show Cmdlet,即可透過此作業名稱來追蹤作業狀態。

還原並覆寫資料庫

為了還原到原始位置,我們將使用 OrignialWorkloadRestore 作為還原模式。 接著,您必須選擇還原點,這可以是先前的時間點或任何先前的還原點。

在本教學課程中,我們選擇先前的時間點 “28-11-2019-09:53:00” 來作為還原目標。 您可以使用下列格式來提供此還原點:dd-mm-yyyy, dd-mm-yyyy-hh:mm:ss。 為了選擇有效的還原目標時間點,請使用 az backup recoverypoint show-log-chain Cmdlet,以列出未中斷記錄鏈結備份的間隔。

az backup recoveryconfig show --resource-group saphanaResourceGroup \
    --vault-name saphanaVault \
    --container-name VMAppContainer;Compute;saphanaResourceGroup;saphanaVM \
    --item-name saphanadatabase;hxe;hxe \
    --restore-mode OriginalWorkloadRestore \
    --log-point-in-time 28-11-2019-09:53:00 \
    --output json

上述查詢的回應將會是如下所示的復原設定物件:

{"restore_mode": "OriginalLocation", "container_uri": " VMAppContainer;Compute;saphanaResourceGroup;saphanaVM ", "item_uri": "SAPHanaDatabase;hxe;hxe", "recovery_point_id": "DefaultRangeRecoveryPoint", "log_point_in_time": "28-11-2019-09:53:00", "item_type": "SAPHana", "source_resource_id": "/subscriptions/ef4ab5a7-c2c0-4304-af80-af49f48af3d1/resourceGroups/saphanaResourceGroup/providers/Microsoft.Compute/virtualMachines/saphanavm", "database_name": null, "container_id": null, "alternate_directory_paths": null}"

現在,為了還原資料庫,請執行 az restore restore-azurewl Cmdlet。 為了使用此命令,我們將輸入上述 json 輸出,其已儲存至名為 recoveryconfig.json 的檔案中。

az backup restore restore-azurewl --resource-group saphanaResourceGroup \
    --vault-name saphanaVault \
    --restore-config recoveryconfig.json \
    --output table

輸出看起來像這樣:

Name                                  Resource
------------------------------------  --------
5b198508-9712-43df-844b-977e5dfc30ea  SAPHANA

回應會提供您作業名稱。 使用 az backup job show Cmdlet,即可透過此作業名稱來追蹤作業狀態。

還原到次要地區

若要將資料庫還原到次要區域,請在還原設定中指定位於次要區域的目標保存庫和伺服器。

az backup recoveryconfig show --resource-group saphanaResourceGroup \
    --vault-name saphanaVault \
    --container-name VMAppContainer;compute;hanasnapshotcvtmachines;hanasnapcvt01 \
    --item-name SAPHanaDatabase;h10;h10 \
    --restore-mode AlternateWorkloadRestore \
    --from-full-rp-name 293170069256531 \
    --rp-name 293170069256531 \
    --target-server-name targethanaserver \
    --target-container-name VMAppContainer;compute;saphanaTargetRG;targethanaserver \
    --target-item-name h10 \
    --target-server-type HANAInstance \
    --workload-type SAPHANA \
    --target-resource-group saphanaTargetRG \
    --target-vault-name targetVault \
    --backup-management-type AzureWorkload

下列是上述命令的回應,此命令將會是復原設定物件:

{
  "alternate_directory_paths": null,
  "container_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/saphanaTargetRG/providers/Microsoft.RecoveryServices/vaults/targetVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;saphanaTargetRG;targethanaserver",
  "container_uri": "VMAppContainer;compute;hanasnapshotcvtmachines;hanasnapcvt01",
  "database_name": "SAPHanaDatabase;h10;h10",
  "filepath": null,
  "item_type": "SAPHana",
  "item_uri": "SAPHanaDatabase;h10;h10",
  "log_point_in_time": null,
  "recovery_mode": null,
  "recovery_point_id": "293170069256531",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/saphanaResourceGroup/providers/Microsoft.Compute/virtualMachines/hanasnapcvt01",
  "workload_type": "SAPHanaDatabase"
}

az restore restore-restore-azurewl cmdlet 中使用此復原設定。 選取 --use-secondary-region 旗標以將資料庫還原到次要地區。

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

輸出將如下所示:

Name                                  Operation           Status      Item Name            Backup Management Type    Start Time UTC                    Duration
------------------------------------  ------------------  ----------  -------------------  ------------------------  --------------------------------  --------------
00000000-0000-0000-0000-000000000000  CrossRegionRestore  InProgress  H10 [hanasnapcvt01]  AzureWorkload             2021-12-22T05:21:34.165617+00:00  0:00:05.665470

注意

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

還原為檔案

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

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

讓我們使用上述還原點名稱和還原模式,透過 az backup recoveryconfig show Cmdlet 來建立復原設定物件。 讓我們看看此 Cmdlet 中的其餘參數各自代表什麼:

  • --target-container-name 這是已成功向復原服務保存庫完成註冊,並且和所要還原的資料庫位於相同區域的 SAP Hana 伺服器所具有的名稱。 在本教學課程中,我們會以檔案形式將資料庫還原到我們已保護的相同 SAP Hana 伺服器,其名稱為 hxehost
  • --rp-name 針對時間點還原,還原點名稱將會是 DefaultRangeRecoveryPoint
az backup recoveryconfig show --resource-group saphanaResourceGroup \
    --vault-name saphanaVault \
    --container-name VMAppContainer;Compute;saphanaResourceGroup;saphanaVM \
    --item-name saphanadatabase;hxe;hxe \
    --restore-mode RestoreAsFiles \
    --log-point-in-time 28-11-2019-09:53:00 \
    --rp-name DefaultRangeRecoveryPoint \
    --target-container-name VMAppContainer;Compute;saphanaResourceGroup;saphanaVM \
    --filepath /home/saphana/restoreasfiles \
    --output json

上述查詢的回應將會是如下所示的復原設定物件:

{
  "alternate_directory_paths": null,
  "container_id": "/Subscriptions/ef4ab5a7-c2c0-4304-af80-af49f48af3d1/resourceGroups/saphanaResourceGroup/providers/Microsoft.RecoveryServices/vaults/SAPHANAVault/backupFabrics/Azure/protectionContainers/VMAppContainer;Compute;SAPHANA;hanamachine",
  "container_uri": "VMAppContainer;compute;saphana;hanamachine",
  "database_name": null,
  "filepath": "/home/",
  "item_type": "SAPHana",
  "item_uri": "SAPHanaDatabase;hxe;hxe",
  "log_point_in_time": "04-07-2020-09:53:00",
  "recovery_mode": "FileRecovery",
  "recovery_point_id": "DefaultRangeRecoveryPoint",
  "restore_mode": "AlternateLocation",
  "source_resource_id": "/subscriptions/ef4ab5a7-c2c0-4304-af80-af49f48af3d1/resourceGroups/saphanaResourceGroup/providers/Microsoft.Compute/virtualMachines/hanamachine"
}

現在,為了將資料庫還原為檔案,請執行 az restore restore-azurewl Cmdlet。 為了使用此命令,我們將輸入上述 json 輸出,其已儲存至名為 recoveryconfig.json 的檔案中。

az backup restore restore-azurewl --resource-group saphanaResourceGroup \
    --vault-name saphanaVault \
    --restore-config recoveryconfig.json \
    --output json

輸出看起來像這樣:

{
  "eTag": null,
  "id": "/Subscriptions/ef4ab5a7-c2c0-4304-af80-af49f48af3d1/resourceGroups/SAPHANARESOURCEGROUP/providers/Microsoft.RecoveryServices/vaults/SAPHANAVault/backupJobs/608e737e-c001-47ca-8c37-57d909c8a704",
  "location": null,
  "name": "608e737e-c001-47ca-8c37-57d909c8a704",
  "properties": {
    "actionsInfo": [
      "Cancellable"
    ],
    "activityId": "7ddd3c3a-c0eb-11ea-a5f8-54ee75ec272a",
    "backupManagementType": "AzureWorkload",
    "duration": "0:00:01.781847",
    "endTime": null,
    "entityFriendlyName": "HXE [hxehost]",
    "errorDetails": null,
    "extendedInfo": {
      "dynamicErrorMessage": null,
      "propertyBag": {
        "Job Type": "Restore as files"
      },
      "tasksList": [
        {
          "status": "InProgress",
          "taskId": "Transfer data from vault"
        }
      ]
    },
    "jobType": "AzureWorkloadJob",
    "operation": "Restore",
    "startTime": "2020-07-08T07:20:29.336434+00:00",
    "status": "InProgress",
    "workloadType": "SAPHanaDatabase"
  },
  "resourceGroup": "saphanaResourceGroup",
  "tags": null,
  "type": "Microsoft.RecoveryServices/vaults/backupJobs"
}

回應會提供您作業名稱。 使用 az backup job show Cmdlet,即可透過此作業名稱來追蹤作業狀態。

傾印到目標容器的檔案包括:

  • 資料庫備份檔案
  • 類別目錄檔案
  • JSON 中繼資料檔案 (每個包含的備份檔案都有)

一般而言,網路共用路徑 (或是指定為目的地路徑的掛接 Azure 檔案路徑) 可讓相同網路中或掛接相同 Azure 檔案共用的其他機器,更輕鬆地存取這些檔案。

注意

若要在目標 (已註冊的 VM) 所掛接的 Azure 檔案共用上還原資料庫備份檔案,請確定根帳戶具有 Azure 檔案共用的讀取/寫入權限。

根據選擇的還原點類型 (時間點完整和差異),您會看到目的地路徑中建立一個或多個資料夾。 其中一個名為 Data_<date and time of restore> 的資料夾包含完整備份,另一個名為 Log 的資料夾則包含記錄備份和其他備份 (例如差異和增量)。

注意

如果您已選取 [還原至某個時間點],則記錄檔 (已傾印至目標 VM 者) 有時可能包含超過所選還原時間點的記錄。 Azure 備份的這項功能可確保所有 HANA 服務的記錄備份均可一致且成功地用於還原至所選的時間點。

注意

如果您不想要還原整個鏈結,而只是一部分的檔案,請遵循此處所述的步驟。

將這些還原的檔案移至您要在其中將檔案還原為資料庫的 SAP Hana 伺服器。 然後依照下列步驟來還原資料庫:

  1. 使用下列命令,在儲存備份檔案的資料夾/目錄上設定權限:

    chown -R <SID>adm:sapsys <directory>
    
  2. <SID>adm 執行下一個命令集

    su - <sid>adm
    
  3. 產生用於還原的類別目錄檔案。 從 JSON 中繼資料檔案中擷取用於完整備份的 BackupId,稍後在還原作業中會用到。 請確定完整和記錄備份都在不同的資料夾中,並刪除這些資料夾中的類別目錄檔案和 JSON 中繼資料檔案。

    hdbbackupdiag --generate --dataDir <DataFileDir> --logDirs <LogFilesDir> -d <PathToPlaceCatalogFile>
    

    在上述命令中:

    • <DataFileDir> - 包含完整備份的資料夾
    • <LogFilesDir> - 包含記錄備份、差異和增量備份 (若有的話) 的資料夾
    • <PathToPlaceCatalogFile> - 該資料夾必須放置產生的類別目錄檔案
  4. 透過 Hana Studio 使用新產生的類別目錄來還原,或以這個新產生的目錄執行 HDBSQL 還原查詢。 HDBSQL 查詢如下所列:

    • 還原到某個時間點:

      如果您要建立新的已還原資料庫,請執行 HDBSQL 命令來建立新的資料庫 <DatabaseName>,然後停止該資料庫來進行還原。 不過,如果您只是要還原現有的資料庫,請執行 HDBSQL 命令來停止資料庫。

      然後執行下列命令來還原資料庫:

      RECOVER DATABASE FOR <DatabaseName> UNTIL TIMESTAMP '<TimeStamp>' CLEAR LOG USING SOURCE '<DatabaseName@HostName>'  USING CATALOG PATH ('<PathToGeneratedCatalogInStep3>') USING LOG PATH (' <LogFileDir>') USING DATA PATH ('<DataFileDir>') USING BACKUP_ID <BackupIdFromJsonFile> CHECK ACCESS USING FILE
      
      • <DatabaseName> - 您想要還原的新資料庫名稱或現有資料庫名稱
      • <Timestamp> - 時間點還原的確切時間戳記
      • <DatabaseName@HostName> - 用其備份來進行還原的資料庫名稱,以及此資料庫所在的主機/SAP Hana 伺服器名稱。 USING SOURCE <DatabaseName@HostName> 選項會指定資料備份 (用於還原) 源自 SID 或名稱與目標 SAP Hana 機器不同的資料庫。 因此,您不需要針對相同 HANA 伺服器 (備份會從中建立) 上執行的還原加以指定。
      • <PathToGeneratedCatalogInStep3> - 步驟 3 中所產生類別目錄檔案的路徑
      • <DataFileDir> - 包含完整備份的資料夾
      • <LogFilesDir> - 包含記錄備份、差異和增量備份 (若有的話) 的資料夾
      • <BackupIdFromJsonFile> - 在步驟 3 中擷取的 BackupId
    • 若要還原至特定的完整或差異備份:

      如果您要建立新的已還原資料庫,請執行 HDBSQL 命令來建立新的資料庫 <DatabaseName>,然後停止該資料庫來進行還原。 不過,如果您只是要還原現有的資料庫,請執行 HDBSQL 命令來停止資料庫:

      RECOVER DATA FOR <DatabaseName> USING BACKUP_ID <BackupIdFromJsonFile> USING SOURCE '<DatabaseName@HostName>'  USING CATALOG PATH ('<PathToGeneratedCatalogInStep3>') USING DATA PATH ('<DataFileDir>')  CLEAR LOG
      
      • <DatabaseName> - 您想要還原的新資料庫或現有資料庫的名稱
      • <Timestamp> - 時間點還原的確切時間戳記
      • <DatabaseName@HostName> - 用其備份來進行還原的資料庫名稱,以及此資料庫所在的主機/SAP Hana 伺服器名稱。 USING SOURCE <DatabaseName@HostName> 選項會指定資料備份 (用於還原) 源自 SID 或名稱與目標 SAP Hana 機器不同的資料庫。 因此,您不需要針對相同 HANA 伺服器 (備份會從中建立) 上執行的還原加以指定。
      • <PathToGeneratedCatalogInStep3> - 步驟 3 中所產生類別目錄檔案的路徑
      • <DataFileDir> - 包含完整備份的資料夾
      • <LogFilesDir> - 包含記錄備份、差異和增量備份 (若有的話) 的資料夾
      • <BackupIdFromJsonFile> - 在步驟 3 中擷取的 BackupId

跨訂用帳戶還原

透過跨訂用帳戶還原 (CSR),如果還原權限可供使用,則您可以彈性地還原至租用戶下的任何訂用帳戶和任何保存庫。 根據預設,所有復原服務保存庫 (現有和新建立的保存庫) 都會啟用 CSR。

注意

  • 您可以從復原服務保存庫觸發跨訂用帳戶還原。
  • 只有對串流/Backint 型備份才支援 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}

下一步