教學課程:使用 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 來加以產生。 復原設定物件包含用來執行還原的所有詳細資料。 其中一個詳細資料是還原模式 – OriginalWorkloadRestore 或 AlternateWorkloadRestore。
注意
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-yyyy 或 dd-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 伺服器。 然後依照下列步驟來還原資料庫:
使用下列命令,在儲存備份檔案的資料夾/目錄上設定權限:
chown -R <SID>adm:sapsys <directory>
以
<SID>adm
執行下一個命令集su - <sid>adm
產生用於還原的類別目錄檔案。 從 JSON 中繼資料檔案中擷取用於完整備份的 BackupId,稍後在還原作業中會用到。 請確定完整和記錄備份都在不同的資料夾中,並刪除這些資料夾中的類別目錄檔案和 JSON 中繼資料檔案。
hdbbackupdiag --generate --dataDir <DataFileDir> --logDirs <LogFilesDir> -d <PathToPlaceCatalogFile>
在上述命令中:
<DataFileDir>
- 包含完整備份的資料夾<LogFilesDir>
- 包含記錄備份、差異和增量備份 (若有的話) 的資料夾<PathToPlaceCatalogFile>
- 該資料夾必須放置產生的類別目錄檔案
透過 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}
下一步
若要了解如何使用 Azure CLI 來管理所備份的 SAP HANA 資料庫,請繼續進行教學課程使用 CLI 管理 Azure VM 中的 SAP HANA 資料庫
若要了解如何使用 Azure 入口網站來還原在 Azure VM 中執行的 SAP HANA 資料庫,請參閱在 Azure VM 上還原 SAP Hana 資料庫