共用方式為


使用 PowerShell 在 Azure VM 中備份和還原 SQL Database

此文章描述如何使用 Azure PowerShell,在 Azure VM 中,使用 Azure 備份復原服務保存庫來備份和復原 SQL DB。

本篇文章說明如何︰

  • 設定 PowerShell 並註冊 Azure 復原服務提供者。
  • 建立復原服務保存庫。
  • 在 Azure VM 中設定 SQL DB 的備份。
  • 執行備份作業。
  • 還原備份的 SQL DB。
  • 監視備份和還原作業。

在您開始使用 Intune 之前

復原服務物件階層

下圖摘要說明物件階層。

Recovery Services object hierarchy

檢閱 Azure 程式庫中的 Az.RecoveryServices Cmdlet 參考

設定和安裝

設定 PowerShell,如下所示:

  1. 下載最新版的 Az PowerShell。 最低版本需求為 1.5.0。

  2. 使用下列命令來尋找 Azure 備份 PowerShell Cmdlet:

    Get-Command *azrecoveryservices*
    
  3. 檢閱適用於 Azure 備份和復原服務保存庫的別名和 Cmdlet。 以下是您可能會看到的範例。 其不是 Cmdlet 的完整清單。

    List of Recovery Services cmdlets

  4. 使用 Connect-AzAccount 登入您的 Azure 帳戶。

  5. 在顯示的網頁中,系統會提示您輸入帳戶認證。

    • 或者,您可以使用 -Credential,在 Connect-AzAccount Cmdlet 中以參數形式包括您的帳戶認證。
    • 如果您是為租用戶工作的 CSP 合作夥伴,請使用客戶的租用戶識別碼或租用戶主要網域名稱,將其指定為租用戶。 例如 Connect-AzAccount -Tenant fabrikam.com。
  6. 由於一個帳戶可以有多個訂用帳戶,因此您必須將要使用的訂用帳戶與帳戶建立關聯。

    Select-AzSubscription -SubscriptionName $SubscriptionName
    
  7. 如果您是第一次使用 Azure 備份,請使用 Register-AzResourceProvider Cmdlet 利用您的訂用帳戶來註冊 Azure 復原服務提供者。

    Register-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  8. 確認提供者已成功註冊:

    Get-AzResourceProvider -ProviderNamespace "Microsoft.RecoveryServices"
    
  9. 在命令輸出中,確認 RegistrationState 會變更為 Registered。 如果沒有,請再次執行 Register-AzResourceProvider Cmdlet。

建立復原服務保存庫

依照下列步驟建立復原服務保存庫。

復原服務保存庫是一項 Resource Manager 資源,因此您必須將它放在資源群組內。 您可以使用現有的資源群組,或使用 New-AzResourceGroup Cmdlet 建立資源群組。 建立資源群組時,請指定資源群組的名稱與位置。

  1. 保存庫會放置於資源群組中。 如果您目前沒有資源群組,請使用 New-AzResourceGroup 來建立新的資源群組。 在此範例中,我們會在美國西部區域建立新的資源群組。

    New-AzResourceGroup -Name "test-rg" -Location "West US"
    
  2. 使用 New-AzRecoveryServicesVault Cmdlet 來建立保存庫。 為保存庫指定與用於資源群組相同的位置。

    New-AzRecoveryServicesVault -Name "testvault" -ResourceGroupName "test-rg" -Location "West US"
    
  3. 指定要用於保存庫儲存體的備援類型。

    $vault1 = Get-AzRecoveryServicesVault -Name "testvault"
    Set-AzRecoveryServicesBackupProperties  -Vault $vault1 -BackupStorageRedundancy GeoRedundant
    

在訂用帳戶中檢視保存庫

若要檢視訂用帳戶中的所有保存庫,請使用 Get-AzRecoveryServicesVault

Get-AzRecoveryServicesVault

輸出大致如下。 其中提供了相關聯的資源群組和位置。

Name              : Contoso-vault
ID                : /subscriptions/1234
Type              : Microsoft.RecoveryServices/vaults
Location          : WestUS
ResourceGroupName : Contoso-docs-rg
SubscriptionId    : 1234-567f-8910-abc
Properties        : Microsoft.Azure.Commands.RecoveryServices.ARSVaultProperties

設定保存庫內容

將保存庫物件儲存在變數中,並設定保存庫內容。

  • 許多 Azure 備份 Cmdlet 都需要復原服務保存庫物件作為輸入,因此,將保存庫物件儲存在變數中很方便。
  • 保存庫內容是保存庫中受保護的資料類型。 使用 Set-AzRecoveryServicesVaultContext 來加以設定。 設定內容之後,即可將其套用至所有後續的 Cmdlet。

下列範例會設定 testvault 的保存庫內容

Get-AzRecoveryServicesVault -Name "testvault" | Set-AzRecoveryServicesVaultContext

擷取保存庫識別碼

我們計畫根據 Azure PowerShell 指導方針來淘汰保存庫內容設定。 您可以改為儲存或擷取保存庫識別碼,並將其傳遞至相關命令,如下所示:

$testVault = Get-AzRecoveryServicesVault -ResourceGroupName "Contoso-docs-rg" -Name "testvault"
$testVault.ID

設定備份原則

備份原則會指定備份的排程,以及備份復原點應保留多久時間:

根據預設,開始時間會定義於排程原則物件中。 使用下列範例,將開始時間變更為所需的開始時間。 所需的開始時間也應採用 UTC 格式。 下列範例假設每日備份所需的開始時間為上午 01:00 UTC。

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "MSSQL"
$UtcTime = (Get-Date -Date "2019-03-20 01:30:00Z").ToUniversalTime()
$schPol.FullBackupSchedulePolicy.ScheduleRunTimes[0] = $UtcTime

重要

您只需以 30 分鐘的倍數提供開始時間。 在上述範例中,其只能是 "01:00:00" 或 "02:30:00"。 開始時間不能是 "01:15:00"。

下列範例會將排程原則和保留原則儲存在變數中。 然後,其會使用那些變數當作新原則 (NewSQLPolicy) 的參數。 NewSQLPolicy 會採用每日「完整」備份、保留 180 天,且每隔 2 小時進行一次記錄備份

$schPol = Get-AzRecoveryServicesBackupSchedulePolicyObject -WorkloadType "MSSQL"
$retPol = Get-AzRecoveryServicesBackupRetentionPolicyObject -WorkloadType "MSSQL"
$NewSQLPolicy = New-AzRecoveryServicesBackupProtectionPolicy -Name "NewSQLPolicy" -WorkloadType "MSSQL" -RetentionPolicy $retPol -SchedulePolicy $schPol

輸出大致如下。

Name                 WorkloadType       BackupManagementType BackupTime                Frequency                                IsDifferentialBackup IsLogBackupEnabled
                                                                                                                                Enabled
----                 ------------       -------------------- ----------                ---------                                -------------------- ------------------
NewSQLPolicy         MSSQL              AzureWorkload        3/15/2019 01:30:00 AM      Daily                                    False                True

啟用備份

註冊 SQL VM

針對 Azure VM 備份和 Azure 檔案共用,備份服務可以連線到這些 Azure Resource Manager 資源,並擷取相關的詳細資料。 由於 SQL 是 Azure VM 內的應用程式,因此備份服務需要權限以存取應用程式,並擷取必要的詳細資料。 若要這樣做,您必須向復原服務保存庫「註冊」包含 SQL 應用程式的 Azure VM。 當您向保存庫註冊 SQL VM 之後,就只能將 SQL DB 保護到該保存庫。 使用 Register-AzRecoveryServicesBackupContainer PowerShell Cmdlet 來註冊 VM。

 $myVM = Get-AzVM -ResourceGroupName <VMRG Name> -Name <VMName>
Register-AzRecoveryServicesBackupContainer -ResourceId $myVM.ID -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID -Force

此命令將傳回此資源的「備份容器」,而且狀態將是「已註冊」

注意

如果未指定 force 參數,即會顯示「您是否要停用此容器的保護」文字來要求您確認。 請忽略這段文字並表明「是」來確認。 這是已知問題,我們正致力於移除這段文字和 force 參數的需求。

擷取 SQL DB

註冊完成之後,備份服務將能夠列出 VM 內所有可用的 SQL 元件。 若要檢視尚未備份到此保存庫的所有 SQL 元件,請使用 Get-AzRecoveryServicesBackupProtectableItem PowerShell Cmdlet

Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -VaultId $testVault.ID

輸出將顯示已向此保存庫註冊之所有 SQL VM 上所有未受保護的 SQL 元件,包含其 ItemType 和 ServerName。 您可以透過傳遞 '-Container' 參數,或使用 'Name' 和 'ServerName' 的組合以及 ItemType 旗標,進一步篩選至特定的 SQL VM 以獲得唯一的 SQL 項目。

$SQLDB = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLDataBase -VaultId $testVault.ID -Name "<Item Name>" -ServerName "<Server Name>"

設定備份

既然我們已有必要的 SQL DB 和需要備份的原則,就可以使用 Enable-AzRecoveryServicesBackupProtection Cmdlet 來設定此 SQL DB 的備份。

Enable-AzRecoveryServicesBackupProtection -ProtectableItem $SQLDB -Policy $NewSQLPolicy

此命令會等到備份設定完成,並傳回下列輸出。

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
master           ConfigureBackup      Completed            3/18/2019 6:00:21 PM      3/18/2019 6:01:35 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

擷取新的 SQL DB

註冊機器之後,備份服務接著將擷取可用 DB 的詳細資料。 如果稍後要將 SQL DB 或 SQL 執行個體新增至已註冊的機器,您需要手動觸發備份服務來執行全新「查詢」,以再次取得所有未受保護的 DB (包括新加入的資料庫)。 在 SQL VM 上使用 Initialize-AzRecoveryServicesBackupItem PowerShell Cmdlet 來執行全新查詢。 此命令會等到作業完成。 稍後使用 Get-AzRecoveryServicesBackupProtectableItem PowerShell Cmdlet 來取得最新未受保護的 SQL 元件清單。

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
Initialize-AzRecoveryServicesBackupProtectableItem -Container $SQLContainer -WorkloadType MSSQL -VaultId $testVault.ID
Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLDataBase -VaultId $testVault.ID

當您擷取相關的可保護項目之後,請遵循上一節的指示來啟用備份。 如果您不想手動偵測新的 DB,可以選擇自動保護,如下所述。

啟用自動保護

您可以設定備份,如此一來,未來新增的所有 DB 都會自動使用特定原則來保護。 若要啟用自動保護,請使用 Enable-AzRecoveryServicesBackupAutoProtection PowerShell Cmdlet。

由於指示是要備份所有未來的 DB,因此,作業會在 SQLInstance 層級完成。

$SQLInstance = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLInstance -VaultId $testVault.ID -Name "<Protectable Item name>" -ServerName "<Server Name>"
Enable-AzRecoveryServicesBackupAutoProtection -InputItem $SQLInstance -BackupManagementType AzureWorkload -WorkloadType MSSQL -Policy $NewSQLPolicy -VaultId $testVault.ID

一旦指定了自動保護意圖,在機器上進行查詢以擷取新加入的 DB,會在每 8 小時的排程背景工作中進行。

還原 SQL DB

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

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

請先檢查此處所述的必要條件,然後再還原 SQL DB。

警告

因為與 RBAC 相關的安全性問題,我們必須透過 PowerShell,在 SQL DB 的還原命令中引進中斷性變更。 請升級到 Az 6.0.0 版或更新版本,以透過 PowerShell 提交適當的還原命令。 以下提供最新的 PS 命令。

首先,使用 Get-AzRecoveryServicesBackupItem PowerShell Cmdlet 來擷取相關的備份 SQL DB。

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID

擷取相關的還原時間

如上所述,您可以將備份的 SQL DB 還原至完整/差異複本記錄時間點。

擷取相異復原點

使用 Get-AzRecoveryServicesBackupRecoveryPoint,為備份的 SQL DB 擷取相異 (完整/差異) 復原點。

$startDate = (Get-Date).AddDays(-7).ToUniversalTime()
$endDate = (Get-Date).ToUniversalTime()
Get-AzRecoveryServicesBackupRecoveryPoint -Item $bkpItem -VaultId $testVault.ID -StartDate $startdate -EndDate $endDate

輸出類似下列範例

RecoveryPointId    RecoveryPointType  RecoveryPointTime      ItemName                             BackupManagemen
                                                                                                  tType
---------------    -----------------  -----------------      --------                             ---------------
6660368097802      Full               3/18/2019 8:09:35 PM   MSSQLSERVER;model             AzureWorkload

使用 'RecoveryPointId' 篩選或陣列篩選來擷取相關的復原點。

$FullRP = Get-AzRecoveryServicesBackupRecoveryPoint -Item $bkpItem -VaultId $testVault.ID -RecoveryPointId "6660368097802"

擷取時間點復原點

如果您想要將 DB 還原至特定時間點,請使用 Get-AzRecoveryServicesBackupRecoveryLogChain PowerShell Cmdlet。 此 Cmdlet 會傳回日期清單,代表該 SQL 備份項目之未中斷、連續記錄鏈結的開始和結束時間。 所需的時間點應位於此範圍內。

Get-AzRecoveryServicesBackupRecoveryLogChain -Item $bkpItem -VaultId $testVault.ID

輸出將類似下列範例。

ItemName                       StartTime                      EndTime
--------                       ---------                      -------
SQLDataBase;MSSQLSERVER;azu... 3/18/2019 8:09:35 PM           3/19/2019 12:08:32 PM

上述輸出表示您可以還原至所顯示開始時間和結束時間之間的任何時間點。 時間均採用 UTC 格式。 在 PowerShell 中,於上方顯示的範圍內建構任何時間點。

注意

選取要還原的記錄時間點時,您不需要指定起點,即要從中還原 DB 的完整備份。 Azure 備份服務將負責處理整個復原方案,也就是要選擇哪一個完整備份、要套用哪些記錄備份等等。

判斷復原設定

SQL DB 還原支援下列還原案例。

  • 使用來自另一個復原點的資料來覆寫備份的 SQL DB:OriginalWorkloadRestore
  • 將 SQL DB 還原為相同 SQL 執行個體中的新 DB:AlternateWorkloadRestore
  • 將 SQL DB 還原為另一部 SQL VM 內另一個 SQL 執行個體中的新 DB:AlternateWorkloadRestore
  • 將 SQL DB 還原為 .bak 檔案:RestoreAsFiles

擷取相關復原點 (相異或記錄時間點) 之後,使用 Get-AzRecoveryServicesBackupWorkloadRecoveryConfig PowerShell Cmdlet,根據所需的復原方案擷取復原 Config 物件。

原始工作負載還原

若要使用來自復原點的資料來覆寫備份的資料庫,只需指定正確的旗標和相關復原點,如下列範例中所示。

使用相異復原點進行的原始還原
$OverwriteWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -OriginalWorkloadRestore -VaultId $testVault.ID
使用記錄時間點進行的原始還原
$OverwriteWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem  -OriginalWorkloadRestore -VaultId $testVault.ID

替代工作負載還原

重要

備份的 SQL DB 只能在已對此保存庫「註冊」的 Azure VM 中,以新的 DB 形式還原至另一個 SQLInstance。

如上所述,如果目標 SQLInstance 位於另一部 Azure VM 中,請確定其已註冊到此保存庫,而相關的 SQLInstance 會顯示為可保護的項目。 在此文件中,我們假設目標 SQLInstance 名稱在另一部 VM "Contoso2" 內為 MSSQLSERVER。

$TargetContainer =  Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -Status Registered  -VaultId $testVault.ID -FriendlyName "Contoso2"
$TargetInstance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -ItemType SQLInstance -Name "MSSQLSERVER" -ServerName "Contoso2" -VaultId $testVault.ID

然後,只需傳遞相關復原點、具正確旗標的目標 SQL 執行個體 (如下所示),以及目標 SQL 執行個體所在的目標容器。

使用相異復原點進行的替代還原
$AnotherInstanceWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
使用記錄時間點進行的替代還原
$AnotherInstanceWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $bkpItem -TargetItem $TargetInstance -AlternateWorkloadRestore -VaultId $testVault.ID -TargetContainer $TargetContainer
還原為檔案

若要將備份資料還原為 .bak 檔案而非資料庫,請選擇 [還原為檔案] 選項。 備份的 SQL DB 可以還原至任何已向此保存庫註冊的目標 VM。

$TargetContainer= Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName "VM name" -VaultId $vaultID
使用相異復原點還原為檔案
$FileRestoreWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
使用記錄時間點,從最新的完整備份還原為檔案
$FileRestoreWithLogConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID
使用記錄時間點,從指定的完整備份還原為檔案

如果您想要提供應用來還原的特定完整備份,請使用下列命令:

$FileRestoreWithLogAndSpecificFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -FromFull $FullRP -TargetContainer $TargetContainer -RestoreAsFiles -FilePath "<>" -VaultId $testVault.ID

Get-AzRecoveryServicesBackupWorkloadRecoveryConfig PowerShell Cmdlet 取得的最終復原點設定物件具有還原的所有相關資訊,如下所示。

TargetServer         : <SQL server name>
TargetInstance       : <Target Instance name>
RestoredDBName       : <Target Instance name>/azurebackup1_restored_3_19_2019_1850
OverwriteWLIfpresent : No
NoRecoveryMode       : Disabled
targetPhysicalPath   : {azurebackup1, azurebackup1_log}
ContainerId          : /Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.RecoveryServices/vaults/testVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;computeRG;SQLVMName
SourceResourceId     : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/computeRG/VMAppContainer/SQLVMName
RestoreRequestType   : Alternate WL Restore
RecoveryPoint        : Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.AzureWorkloadRecoveryPoint
PointInTime          : 1/1/0001 12:00:00 AM

您可以編輯還原的 DB 名稱、OverwriteWLIfpresent、NoRecoveryMode 及 targetPhysicalPath 欄位。 取得目標檔案路徑的更多詳細資料,如下所示。

$AnotherInstanceWithFullConfig.targetPhysicalPath
MappingType SourceLogicalName SourcePath                  TargetPath
----------- ----------------- ----------                  ----------
Data        azurebackup1      F:\Data\azurebackup1.mdf    F:\Data\azurebackup1_1553001753.mdf
Log         azurebackup1_log  F:\Log\azurebackup1_log.ldf F:\Log\azurebackup1_log_1553001753.ldf

將相關的 PowerShell 屬性設定為字串值,如下所示。

$AnotherInstanceWithFullConfig.OverwriteWLIfpresent = "Yes"
$AnotherInstanceWithFullConfig | fl
TargetServer         : <SQL server name>
TargetInstance       : <Target Instance name>
RestoredDBName       : <Target Instance name>/azurebackup1_restored_3_19_2019_1850
OverwriteWLIfpresent : Yes
NoRecoveryMode       : Disabled
targetPhysicalPath   : {azurebackup1, azurebackup1_log}
ContainerId          : /Subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.RecoveryServices/vaults/testVault/backupFabrics/Azure/protectionContainers/vmappcontainer;compute;computeRG;SQLVMName
SourceResourceId     : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/computeRG/VMAppContainer/SQLVMName
RestoreRequestType   : Alternate WL Restore
RecoveryPoint        : Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.AzureWorkloadRecoveryPoint
PointInTime          : 1/1/0001 12:00:00 AM

重要

請確定最終復原 Config 物件具有所有必要和適當的值,因為還原作業將以 Config 物件為基礎。

注意

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

替代工作負載還原至次要區域中的保存庫

重要

自 Az 6.0.0 開始支援從 PowerShell 對 SQL 進行次要區域還原

如果您已啟用跨區域還原,則復原點也將複寫到次要的配對區域。 然後,您可以擷取那些復原點,並觸發對存在於該配對區域中機器的還原。 如同標準還原,目標機器應該向次要區域中的目標保存庫註冊。 下列一系列步驟應該會闡明這個端對端程序。

  • 擷取已複寫到次要區域的備份項目
  • 針對此類項目,擷取要複寫到次要區域的復原點 (相異和/或記錄)
  • 接著,選擇目標伺服器,並向次要配對區域內的保存庫註冊
  • 觸發還原至該伺服器,並使用 JobId 進行追蹤。

從次要區域擷取備份項目

使用一般命令以從次要區域擷取所有 SQL 備份項目,但使用額外參數來表示應該從次要區域擷取這些項目。

$secondaryBkpItems = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload  -WorkloadType MSSQL  -VaultId $testVault.ID -UseSecondaryRegion
從次要區域擷取相異復原點

使用 Get-AzRecoveryServicesBackupRecoveryPoint 來擷取已備份 SQL DB 的相異 (完整/差異) 復原點,並新增參數來表示這些是從次要區域擷取的復原點

$startDate = (Get-Date).AddDays(-7).ToUniversalTime()
$endDate = (Get-Date).ToUniversalTime()
Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -StartDate $startdate -EndDate $endDate -UseSecondaryRegion

輸出類似下列範例

RecoveryPointId    RecoveryPointType  RecoveryPointTime      ItemName                             BackupManagemen
                                                                                                  tType
---------------    -----------------  -----------------      --------                             ---------------
6660368097802      Full               3/18/2019 8:09:35 PM   MSSQLSERVER;model             AzureWorkload

使用 'RecoveryPointId' 篩選或陣列篩選來擷取相關的復原點。

$FullRPFromSec = Get-AzRecoveryServicesBackupRecoveryPoint -Item $secondaryBkpItems[0] -VaultId $testVault.ID -RecoveryPointId "6660368097802" -UseSecondaryRegion
從次要區域擷取記錄復原點

使用 Get-AzRecoveryServicesBackupRecoveryLogChain PowerShell Cmdlet 搭配 '-UseSecondaryRegion' 參數,其將針對來自次要區域的 SQL 備份項目,傳回未中斷、連續記錄鏈結的開始和結束時間。 所需的時間點應位於此範圍內。

Get-AzRecoveryServicesBackupRecoveryLogChain -Item $secondaryBkpItems[0] -VaultId $testVault.ID -UseSecondaryRegion

輸出將類似下列範例。

ItemName                       StartTime                      EndTime
--------                       ---------                      -------
SQLDataBase;MSSQLSERVER;azu... 3/18/2019 8:09:35 PM           3/19/2019 12:08:32 PM

上述輸出表示您可以還原至所顯示開始時間和結束時間之間的任何時間點。 時間均採用 UTC 格式。 在 PowerShell 中,於上方顯示的範圍內建構任何時間點。

從次要區域擷取目標伺服器

從次要區域,我們需要一個保存庫和一個已向該保存庫註冊的目標伺服器。 當我們具有次要區域目標容器和 SQL 執行個體之後,就可以重複使用現有的 Cmdlet 來產生還原工作負載設定。 在此文件中,我們假設 VM 名稱為 "secondaryVM",而該 VM 內的執行個體名稱為 "MSSQLInstance"

首先,擷取存在於次要區域中的相關保存庫,然後取得已在該保存庫中註冊的容器。

$PairedRegionVault = Get-AzRecoveryServicesVault -ResourceGroupName SecondaryRG -Name PairedVault
$secContainer =  Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -Status Registered  -VaultId $PairedRegionVault.ID -FriendlyName "secondaryVM"

選擇註冊的容器之後,接著在應將還原資料庫的容器內擷取 SQL 執行個體。 我們在此假設 "secondaryVM" 內有 1 個 SQL 執行個體,而我們會擷取該執行個體。

$secSQLInstance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -ItemType SQLInstance -VaultId $PairedRegionVault.ID -Container $secContainer

準備復原設定

上面針對標準 SQL 還原所述,您可以重複使用相同命令來產生相關的復原設定。

從次要區域進行完整還原
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -RecoveryPoint $FullRPFromSec[0] -TargetItem $secSQLInstance -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer
從次要區域進行記錄時間點還原
Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $PointInTime -Item $secondaryBkpItems[0] -TargetItem $secSQLInstance  -AlternateWorkloadRestore -VaultId $vault.ID -TargetContainer $secContainer

在針對主要區域還原或次要區域還原取得相關設定之後,就可以使用相同的還原命令來觸發還原,並在稍後使用 jobID 進行追蹤。

使用相關設定還原

取得並驗證相關復原 Config 物件之後,請使用 Restore-AzRecoveryServicesBackupItem PowerShell Cmdlet 來啟動還原程序。

Restore-AzRecoveryServicesBackupItem -WLRecoveryConfig $AnotherInstanceWithLogConfig -VaultId $testVault.ID -RestoreToSecondaryRegion

還原作業會傳回要追蹤的作業。

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
MSSQLSERVER/m... Restore              InProgress           3/17/2019 10:02:45 AM                                3274xg2b-e4fg-5952-89b4-8cb566gc1748

管理 SQL 備份

隨選備份

針對 DB 啟用備份之後,您也可以使用 Backup-AzRecoveryServicesBackupItem PowerShell Cmdlet 來觸發 DB 的隨選備份。 下列範例會在已啟用壓縮的 SQL DB 上觸發僅複製完整備份,而且僅複製完整備份應保留 60 天。

注意

僅複製完整備份適合長期保留,因為其與其他備份類型 (例如記錄) 沒有任何相依性。 「完整」備份會被視為後續記錄備份的父系,因而其保留會繫結至原則中的記錄保留。 因此,客戶提供的到期時間只適用僅複製完整備份,而不適用「完整」備份。 系統會將完整備份保留時間自動設定為自目前時間起算的 45 天。 其也會記錄於此處

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID
$endDate = (Get-Date).AddDays(45).ToUniversalTime()
Backup-AzRecoveryServicesBackupItem -Item $bkpItem -BackupType CopyOnlyFull -EnableCompression -VaultId $testVault.ID -ExpiryDateTimeUTC $endDate

隨選備份命令會傳回要追蹤的作業。

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
MSSQLSERVER/m... Backup               InProgress           3/18/2019 8:41:27 PM                                2516bb1a-d3ef-4841-97a3-9ba455fb0637

如果輸出遺失,或者您想要取得相關工作識別碼,請從 Azure 備份服務取得作業清單,然後加以追蹤,以及追蹤其詳細資料。

變更備份項目的原則

您可以將已備份項目的原則從 Policy1 變更為 Policy2。 若要針對備份的項目切換原則,請擷取相關原則和備份項目,並使用 Enable-AzRecoveryServices 命令搭配備份項目作為參數。

$TargetPol1 = Get-AzRecoveryServicesBackupProtectionPolicy -Name <PolicyName>
$anotherBkpItem = Get-AzRecoveryServicesBackupItem -WorkloadType MSSQL -BackupManagementType AzureWorkload -Name "<BackupItemName>"
Enable-AzRecoveryServicesBackupProtection -Item $anotherBkpItem -Policy $TargetPol1

此命令會等到備份設定完成,並傳回下列輸出。

WorkloadName     Operation            Status               StartTime                 EndTime                   JobID
------------     ---------            ------               ---------                 -------                   -----
master           ConfigureBackup      Completed            3/18/2019 8:00:21 PM      3/18/2019 8:02:16 PM      654e8aa2-4096-402b-b5a9-e5e71a496c4e

編輯現有的備份原則

若要編輯現有原則,請使用 Set-AzRecoveryServicesBackupProtectionPolicy 命令。

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -SchedulePolicy $SchPol -RetentionPolicy $RetPol

經過一段時間之後,檢查備份作業以追蹤任何失敗。 如果有,您就需要修正問題。 接著,使用 FixForInconsistentItems 參數重新執行編輯原則命令,以重試在先前操作失敗的所有備份項目上編輯原則。

Set-AzRecoveryServicesBackupProtectionPolicy -Policy $Pol -FixForInconsistentItems

重新註冊 SQL VM

警告

請務必閱讀這份文件,以了解失敗的徵兆和原因,然後再嘗試重新註冊

若要觸發 SQL VM 的重新註冊,請擷取相關備份容器,並將其傳遞至註冊 Cmdlet。

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
Register-AzRecoveryServicesBackupContainer -Container $SQLContainer -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID

停止保護

保留資料

如果想要停止保護,您可以使用 Disable-AzRecoveryServicesBackupProtection PowerShell Cmdlet。 這將停止排程的備份,但直到現在為止備份的資料會永久保留。

$bkpItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -Name "<backup item name>" -VaultId $testVault.ID
Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $testVault.ID

刪除備份資料

若要完全移除保存庫中儲存的備份資料,只需將 '-RemoveRecoveryPoints' 旗標/參數新增至「停用」保護命令

Disable-AzRecoveryServicesBackupProtection -Item $bkpItem -VaultId $testVault.ID -RemoveRecoveryPoints

停用自動保護

如果已在 SQLInstance 上設定自動保護,您就可以使用 Disable-AzRecoveryServicesBackupAutoProtection PowerShell Cmdlet 來加以停用。

使用下列 PowerShell 命令尋找啟用自動保護的執行個體。

Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -VaultId $testVault.ID | Where-Object {$_.IsAutoProtected -eq $true}

然後從輸出中挑選相關的可保護專案名稱和伺服器名稱,並停用這些執行個體的自動保護。

$SQLInstance = Get-AzRecoveryServicesBackupProtectableItem -workloadType MSSQL -ItemType SQLInstance -VaultId $testVault.ID -Name "<Protectable Item name>" -ServerName "<Server Name>"
Disable-AzRecoveryServicesBackupAutoProtection -InputItem $SQLInstance -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $testVault.ID

取消註冊 SQL VM

如果 SQL 伺服器的所有 DB 都不再受到保護,而且沒有備份資料存在,您就可以從這個保存庫中取消註冊 SQL VM。 只有這樣,才能將 DB 保護到另一個保存庫。 使用 Unregister-AzRecoveryServicesBackupContainer PowerShell Cmdlet 來取消註冊 SQL VM。

$SQLContainer = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -FriendlyName <VM name> -VaultId $testVault.ID
 Unregister-AzRecoveryServicesBackupContainer -Container $SQLContainer -VaultId $testVault.ID

追蹤 Azure 備份作業

請務必注意,Azure 備份只會在 SQL 備份中追蹤使用者觸發的作業。 排程的備份 (包括記錄備份) 不會顯示在入口網站或 PowerShell 中。 但是,如果有任何排程的作業失敗,則會產生備份警示並顯示於入口網站中。 使用 Azure 監視器來追蹤所有排程的作業和其他相關資訊。

使用者可以使用在非同步作業 (例如備份) 輸出中傳回的 JobID,來追蹤隨選/使用者觸發的作業。 使用 Get-AzRecoveryServicesBackupJobDetail PowerShell Cmdlet 來追蹤作業及其詳細資料。

 Get-AzRecoveryServicesBackupJobDetails -JobId 2516bb1a-d3ef-4841-97a3-9ba455fb0637 -VaultId $testVault.ID

若要從 Azure 備份服務取得隨選作業及其狀態的清單,請使用 Get-AzRecoveryServicesBackupJob PowerShell Cmdlet。 下列範例會傳回所有進行中的 SQL 作業。

Get-AzRecoveryServicesBackupJob -Status InProgress -BackupManagementType AzureWorkload

若要取消進行中的作業,請使用 Stop-AzRecoveryServicesBackupJob PowerShell Cmdlet。

管理 SQL Always On 可用性群組

針對 SQL Always On 可用性群組,請務必為可用性群組 (AG) 註冊所有節點。 完成所有節點的註冊之後,即能在可保護的項目底下以邏輯方式建立 SQL 可用性群組物件。 位於 SQL AG 底下的資料庫將列為 'SQLDatabase'。 節點將顯示為獨立執行個體,而且位於其底下的預設 SQL 資料庫也會列為 SQL 資料庫。

例如,假設 SQL AG 有兩個節點:sql-server-0sql-server-1,以及 1 個 SQL AG DB。 在註冊這兩個節點之後,如果您列出可保護的項目,其就會列出下列元件

  • 一個 SQL AG 物件:可保護的項目類型為 SQLAvailabilityGroup
  • 一個 SQL AG DB:可保護的項目類型為 SQLDatabase
  • sql-server-0:可保護的項目類型為 SQLInstance
  • sql-server-1:可保護的項目類型為 SQLInstance
  • 位於 sql-server-0 底下任何預設的 SQL DB (master、model、msdb):可保護的項目類型為 SQLDatabase
  • 位於 sql-server-1 底下任何預設的 SQL DB (master、model、msdb):可保護的項目類型為 SQLDatabase

列出備份容器時,也會將 sql-server-0、sql-server-1 列為 "AzureVMAppContainer"。

只需擷取相關資料庫,就能啟用備份,而且隨選備份還原 PowerShell Cmdlet 是一樣的。