在 Azure VM 上還原 SAP Hana 資料庫

本文描述如何還原在 Azure 虛擬機器 (VM) 上執行且 Azure 備份服務已備份至復原服務保存庫的 SAP HANA 資料庫。 您可使用還原的資料來建立開發和測試案例的複本,或回到先前的狀態。

Azure 備份現在支援 SAP HANA 系統複寫 (HSR) 執行個體的備份和還原。

注意

  • 具有 HSR 的 HANA 資料庫的還原程序與沒有 HSR 的 HANA 資料庫的還原程序相同。 根據 SAP 建議,您可以將具有 HSR 模式的資料庫還原為獨立資料庫。 如果目標系統已啟用 HSR 模式,請先停用模式,然後還原資料庫。 不過,如果您要還原為檔案,則不需要停用 HSR 模式 (中斷 HSR)。
  • 目前不支援對 HSR 進行原始位置復原 (OLR)。 或者,選取 [替代位置] 還原,然後從清單中選取來源 VM 作為您的 [主機]
  • 不支援還原至 HSR 執行個體。 不過,僅支援還原至 HANA 執行個體。

如需支援的設定和案例相關資訊,請參閱 SAP HANA 備份支援矩陣圖

還原至某個時間點或復原點

Azure 備份會還原在 Azure VM 上執行的 SAP HANA 資料庫。 它可以:

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

  • 還原至特定的完整或差異備份以還原至特定復原點。

必要條件

開始還原資料庫之前,請注意下列事項:

  • 您只能將資料庫還原到相同區域中的 SAP HANA 執行個體。

  • 目標執行個體必須使用相同的來源保存庫進行註冊。 深入了解如何備份 SAP HANA 資料庫

  • Azure 備份無法在相同的 VM 上識別出兩個不同的 SAP HANA 執行個體。 因此,您無法在相同 VM 上將資料從某個執行個體還原到另一個執行個體。

  • 若要確定目標 SAP HANA 執行個體已可開始進行還原,可查看其備份準備就緒狀態:

    1. 在 Azure 入口網站中,前往 [備份中心],然後選取 [備份]

      Screenshot that shows where to check to see whether the target SAP HANA instance is ready to restore.

    2. 在 [開始: 設定備份] 窗格上,針對 [資料來源類型],選取 [Azure VM 中的 SAP HANA],選取 SAP HANA 執行個體註冊所在的保存庫,然後選取 [繼續]

      Screenshot that shows where to select SAP HANA in Azure VM as the datasource type.

    3. 在 [探索 VM 中的 DB] 底下,選取 [檢視詳細資料]

      Screenshot that shows where to view database details.

    4. 檢查目標 VM 的備份整備程度

      Screenshot that shows where to review the backup readiness of the target VM.

  • 若要深入了解 SAP HANA 支援的還原類型,請參閱 SAP HANA Note 1642148

還原資料庫

若要還原資料庫,您需要下列權限:

  • 備份操作員:提供您執行還原所在保存庫的權限。
  • 參與者 (寫入):提供備份的來源 VM 的存取權。
  • 參與者 (寫入):提供目標 VM 的存取權。
    • 若要還原至相同的 VM,便是來源 VM。
    • 若要還原至其他位置,便為新的目標 VM。
  1. 在 Azure 入口網站中,前往 [備份中心],並選取 [還原]

    Screenshot that shows where to start restoring an SAP HANA database.

  2. 選取 [Azure VM 中的 SAP HANA] 作為資料來源類型,選取您要還原的資料庫,然後選取 [繼續]

    Screenshot that shows where to restore the backup items.

  3. 在 [還原設定] 下,指定還原資料的位置或方式:

    • 其他位置:將資料庫還原至其他位置,並保留原始的來源資料庫。
    • 覆寫 DB:將資料還原至原始來源所在的同一 SAP HANA 執行個體。 此選項會覆寫原始資料庫。

    Screenshot that shows where to restore the configuration.

注意

在還原期間 (僅適用虛擬 IP/負載平衡器前端 IP 案例),如果您依照 SAP 的建議,在將 HSR 模式變更為獨立或中斷 HSR 之後,嘗試將備份還原至目標節點,然後再進行還原,請確保 Load Balancer 會指向目標節點。

範例案例

  • 如果您在預先註冊的指令碼中使用 hdbuserstore set SYSTEMKEY localhost,則還原期間不會有任何問題。
  • 如果您的 *hdbuserstore 在預先註冊指令碼中設定 SYSTEMKEY <load balancer host/ip>,而且您嘗試將備份還原至目標節點,請確保負載平衡器指向需要還原的目標節點。

還原至替代位置

  1. 在 [還原] 窗格上,於 [要在何處及如何還原?] 底下,選取 [替代位置]

    Screenshot that shows how to restore the database to an alternate location.

  2. 選取您要在其中還原資料庫的 SAP HANA 主機名稱和執行個體名稱。

  3. 透過確保其備份整備情況,確認目標 SAP HANA 執行個體是否已準備好還原。 如需詳細資訊,請參閱必要條件

  4. 在 [還原的 DB 名稱] 方塊中,輸入目標資料庫的名稱。

    注意

    單一資料庫容器 (SDC) 還原必須執行這些檢查

  5. 如果適用的話,請選取 [若選取的 HANA 執行個體上已有同名的 DB 則覆寫] 核取方塊。

  6. 在 [選取還原點] 中,選取 [記錄 (時間點)]還原至特定時間點。 或選取 [完整與差異]還原至特定復原點

還原為檔案

注意

[還原為檔案] 在 Common Internet File System (CIFS) 共用上無法運作,但它可對網路檔案系統 (NFS) 運作。

若要將備份資料還原為檔案 (而非資料庫),請選取 [還原為檔案]。 一旦檔案傾印到指定的路徑,您就可以將檔案放到要還原為資料庫的任何 SAP HANA 機器上。 因為您可以將檔案移至任何機器,所以您現在可以在訂用帳戶和區域之間還原資料。

  1. 在 [還原] 窗格上,於 [要在何處及如何還原?] 底下,選取 [還原為檔案]

  2. 選取備份檔案要還原到的主機或 HANA 伺服器名稱。

  3. 在 [伺服器上的目的地路徑] 方塊中,輸入您在上一個步驟中選取的伺服器上的資料夾路徑。 這是該服務將用來備份到所有必要備份檔案的位置。

    傾印的檔案包括:

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

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

    注意

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

    Screenshot that shows how to choose the destination path.

  4. 選取將還原所有備份檔案和資料夾的目標 [還原點]

    Screenshot that shows where to select the restore point.

  5. 與所選還原點相關聯的所有備份檔案都會備份到目的地路徑。

  6. 視您選擇的還原點類型 (時間點完整與差異),您會看到目的地路徑中建立一個或多個資料夾。 其中一個資料夾 Data_<還原日期和時間> 包含完整備份,另一個資料夾 Log 則包含記錄備份和其他備份 (例如差異和增量)。

    注意

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

  7. 將還原的檔案移至您要將其還原為資料庫的 SAP HANA 伺服器,然後執行下列動作:

    a. 執行下列命令,在儲存備份檔案的資料夾或目錄上設定權限:

    chown -R <SID>adm:sapsys <directory>
    

    b. 以 <SID>adm 身分執行下一組命令:

    su: <sid>adm
    

    c. 產生用於還原的類別目錄檔案。 從 JSON 中繼資料檔案中擷取用於完整備份的 BackupId,稍後在還原作業中會用到。 確定完整和記錄備份 (非完整備份復原用途) 位於不同的資料夾中,並刪除這些資料夾中的 JSON 中繼資料檔案。 請執行:

    hdbbackupdiag --generate --dataDir <DataFileDir> --logDirs <LogFilesDir> -d <PathToPlaceCatalogFile>
    
    • <DataFileDir>:包含完整備份的資料夾。
    • <LogFilesDir>:包含記錄備份、差異備份和增量備份的資料夾。 針對完整備份還原,因為未建立記錄檔資料夾,請新增空白目錄。
    • <PathToPlaceCatalogFile>:必須放置產生的類別目錄檔案的資料夾。

    d. 您可以透過 HANA Studio 使用新產生的類別目錄檔案來還原,或使用這個新產生的目錄執行 SAP HANA HDBSQL 工具還原查詢。 HDBSQL 查詢如下所示:

    • 若要開啟 HDBSQL 提示,請執行下列命令:

      hdbsql -U AZUREWLBACKUPHANAUSER -d systemDB
      
    • 還原到某個時間點:

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

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

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

      如果您要建立新的已還原資料庫,請執行 HDBSQL 命令來建立新的資料庫 <DatabaseName>,然後使用命令 ALTER SYSTEM STOP DATABASE <db> IMMEDIATE 停止該資料庫進行還原。 不過,如果您只是要還原現有的資料庫,請執行 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>:在「步驟 C」中產生的類別目錄檔案的路徑。
      • <DataFileDir>:包含完整備份的資料夾。
      • <LogFilesDir>:包含記錄備份、差異備份和增量備份的資料夾 (如果有)。
      • <BackupIdFromJsonFile>:在「步驟 C」中擷取的 BackupId。
    • 若要使用備份識別碼還原:

      RECOVER DATA FOR <db> USING BACKUP_ID <bkId> USING CATALOG PATH <path> USING LOG PATH <path> USING DATA PATH <path>  CHECK ACCESS USING FILE
      

      範例:

      在相同伺服器上的 SAP HANA 系統還原:

      RECOVER DATABASE FOR SYSTEM UNTIL TIMESTAMP '2022-01-12T08:51:54.023' USING CATALOG PATH ('/restore/catalo_gen') USING LOG PATH ('/restore/Log/') USING DATA PATH ('/restore/Data_2022-01-12_08-51-54/') USING BACKUP_ID 1641977514020 CHECK ACCESS USING FILE
      

      在相同伺服器上的 SAP HANA 租用戶還原:

      RECOVER DATABASE FOR DHI UNTIL TIMESTAMP '2022-01-12T08:51:54.023' USING CATALOG PATH ('/restore/catalo_gen') USING LOG PATH ('/restore/Log/') USING DATA PATH ('/restore/Data_2022-01-12_08-51-54/') USING BACKUP_ID 1641977514020 CHECK ACCESS USING FILE
      

      在不同伺服器上的 SAP HANA 系統還原:

      RECOVER DATABASE FOR SYSTEM UNTIL TIMESTAMP '2022-01-12T08:51:54.023' USING SOURCE <sourceSID> USING CATALOG PATH ('/restore/catalo_gen') USING LOG PATH ('/restore/Log/') USING DATA PATH ('/restore/Data_2022-01-12_08-51-54/') USING BACKUP_ID 1641977514020 CHECK ACCESS USING FILE
      

      在不同伺服器上的 SAP HANA 租用戶還原:

      RECOVER DATABASE FOR DHI UNTIL TIMESTAMP '2022-01-12T08:51:54.023' USING SOURCE <sourceSID> USING CATALOG PATH ('/restore/catalo_gen') USING LOG PATH ('/restore/Log/') USING DATA PATH ('/restore/Data_2022-01-12_08-51-54/') USING BACKUP_ID 1641977514020 CHECK ACCESS USING FILE
      

部分還原為檔案

Azure 備份服務決定在還原為檔案期間要下載的一連串檔案。 但在某些情況下,您可能不想再次下載整個內容。

例如,您可能會有每週完整、每日差異和記錄的備份原則,而且已下載特定差異的檔案。 您發現這不是正確的復原點,並決定下載隔天的差異。 現在,您只需要差異檔案,因為您已有起始的完整備份。 透過 Azure 備份提供的部分還原為檔案功能,您現在可以從下載鏈結中排除完整備份,而只下載差異備份。

排除備份檔案類型

ExtensionSettingOverrides.json 是 JSON (JavaScript 物件標記法) 檔案,其中包含可覆寫適用於 SQL 的 Azure 備份服務的多個設定。 針對部分還原為檔案作業,您必須新增 JSON 欄位 RecoveryPointsToBeExcludedForRestoreAsFiles。 此欄位保存字串值,表示下一個還原為檔案作業中應該排除的復原點類型。

  1. 在要下載檔案的目標電腦上,前往 opt/msawb/bin 資料夾。

  2. 建立名為 ExtensionSettingOverrides.JSON 的新 JSON 檔案 (如果尚未存在)。

  3. 新增下列 JSON 索引鍵值組:

    {
    "RecoveryPointsToBeExcludedForRestoreAsFiles": "ExcludeFull"
    }
    
  4. 變更檔案的存取權限和擁有權:

    chmod 750 ExtensionSettingsOverrides.json
    chown root:msawb ExtensionSettingsOverrides.json
    
  5. 不需要重新啟動任何服務。 Azure 備份服務會嘗試在還原鏈結中排除此檔案所述的備份類型。

RecoveryPointsToBeExcludedForRestoreAsFiles 只會接受特定值,表示還原期間要排除的復原點。 針對 SAP Hana,這些值為:

  • ExcludeFull. 將會下載出現在還原點鏈結中的其他備份類型,例如差異、增量和記錄。
  • ExcludeFullAndDifferential. 將會下載出現在還原點鏈結中的其他備份類型,例如增量和記錄。
  • ExcludeFullAndIncremental. 將會下載出現在還原點鏈結中的其他備份類型,例如差異和記錄。
  • ExcludeFullAndDifferentialAndIncremental. 將會下載出現在還原點鏈結中的其他備份類型,例如記錄。

還原至特定時間點

如果您已選取 [記錄 (時間點)] 作為還原類型,請執行下列動作:

  1. 從記錄圖形中選取復原點,然後選取 [確定] 以選擇還原點。

    Screenshot that shows a log graph from which to select a restore point.

  2. 在 [還原] 功能表上,選取 [還原] 以啟動還原作業。

    Screenshot that shows the 'Restore' menu and 'Restore' button.

  3. 在 [通知] 區域中追蹤還原進度,或選取資料庫功能表上的 [還原作業] 加以追蹤。

    Screenshot that shows a message that the restored was triggered successfully.

還原至特定復原點

如果您已選取 [完整和差異] 作為還原類型,請執行下列動作:

  1. 從清單中選取復原點,然後選取 [確定] 以選擇還原點。

    Screenshot that shows where to select a specific recovery point.

  2. 在 [還原] 功能表上,選取 [還原] 以啟動還原作業。

    Screenshot that shows the 'Restore' menu for selecting a specific restore point.

  3. 在 [通知] 區域中追蹤還原進度,或選取資料庫功能表上的 [還原作業] 加以追蹤。

    Screenshot that displays a message that the restored was triggered successfully.

    注意

    執行多重資料庫容器 (MDC) 還原時,在系統資料庫還原到目標執行個體之後,必須再次執行預先註冊指令碼。 然後後續的租用戶資料庫才能還原成功。 若要深入了解,請參閱針對多個容器資料庫還原進行疑難排解

跨區域還原

作為其中一個還原選項,跨區域還原 (CRR) 可讓您在次要區域 (也就是 Azure 配對的區域) 中還原在 Azure VM 上裝載的 SAP HANA 資料庫。

若要開始使用此功能,請參閱設定跨區域還原

檢視次要區域中的備份項目

如果已啟用 CRR,您可以在次要區域中檢視備份項目。

  1. 在 Azure 入口網站中,移至 [復原服務保存庫],然後選取 [備份項目]
  2. 選取 [次要區域] 以檢視次要區域中的項目。

注意

清單中只會顯示支援 CRR 功能的備份管理類型。 目前,僅支援將次要區域資料還原至次要區域。

Screenshot that shows backup items in the secondary region

Screenshot that shows databases in the secondary region

在次要區域中還原

次要區域還原使用者體驗類似於主要區域還原使用者體驗。 當您在 [還原設定] 窗格上設定詳細資料時,系統會提示您只提供次要區域參數。 次要區域中應該有保存庫,而 SAP HANA 伺服器應註冊至次要區域中的保存庫。

Screenshot that shows the 'Where and how to Restore?' pane.

Screenshot that shows a 'Trigger restore in progress' notification.

注意

  • 在觸發還原後的資料傳輸階段中,無法取消還原工作。
  • 跨區域執行還原作業所需的角色和存取層級為訂用帳戶的備份操作員角色,以及來源和目標虛擬機器的參與者 (寫入) 存取權。 若要檢視工作,至少需要訂用帳戶的備份讀取者權限。
  • 在次要區域中提供備份資料的復原點目標 (RPO) 為 12 小時。 因此,當您開啟 CRR 時,次要區域的 RPO 是 12 小時 + 記錄頻率持續時間 (可設定為至少 15 分鐘)。

了解跨區域還原的最低角色需求

監視次要區域還原工作

  1. 在 Azure 入口網站中,前往 [備份中心],然後選取 [+ 備份工作]

  2. 若要檢視次要區域中的工作,請篩選 CrossRegionRestore作業

    Screenshot that shows filtered backup jobs.

跨訂用帳戶還原

Azure 備份現在可讓您從還原點將 SAP HANA 資料庫還原至任何訂用帳戶 (根據下列 Azure RBAC 需求)。 根據預設,Azure 備份會還原至可用的還原點所在的相同訂用帳戶。

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

注意

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

Azure RBAC 需求

作業類型 備份操作員 復原服務保存庫 替代運算子
還原資料庫或還原為檔案 Virtual Machine Contributor 備份的來源 VM 您可以考量具有下列權限的自訂角色,而不是內建角色:

- Microsoft.Compute/virtualMachines/write
- Microsoft.Compute/virtualMachines/read
Virtual Machine Contributor 將在其中還原資料庫或建立檔案的目標 VM。 您可以考量具有下列權限的自訂角色,而不是內建角色:

- Microsoft.Compute/virtualMachines/write
- Microsoft.Compute/virtualMachines/read
Backup Operator 目標復原服務保存庫

復原服務保存庫上預設會啟用 CSR。 若要更新復原服務保存庫還原設定,請移至 [內容]> [跨訂用帳戶還原],並進行必要的變更。

Screenshot shows how to modify the Cross Subscription Restore settings on a Recovery Services vault for HANA database.

使用 Azure CLI 進行跨訂用帳戶還原

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}

下一步