在 Azure VM 上還原 SQL Server 資料庫

本文說明如何還原在 Azure 虛擬機器 (VM) 上執行,且已使用 Azure 備份服務備份到 Azure 備份復原服務保存庫的 SQL Server 資料庫。

本文將說明如何還原 SQL Server 資料庫。 如需詳細資訊,請參閱將 SQL Server 資料庫備份到 Azure VM

注意

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

還原至某個時間或復原點

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

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

還原必要條件

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

  • 您可以將資料庫還原至相同 Azure 區域中的 SQL Server 執行個體。
  • 目的地伺服器必須註冊到和來源相同的保存庫。 如果您想要將備份還原至不同的保存庫,請啟用跨訂用帳戶還原
  • 如果您的伺服器上有多個正在執行的執行個體,則所有執行個體都應該啟動並執行。 否則,伺服器將不會出現在要將資料庫還原到其中的目的地伺服器清單中。 如需詳細資訊,請參閱疑難排解步驟
  • 若要將 TDE 加密資料庫還原至另一部 SQL Server,您必須先將憑證還原至目的地伺服器
  • 啟用 CDC 的資料庫應該使用 [還原為檔案] 選項來還原。
  • 我們強烈建議使用 [還原為檔案] 選項還原 「master」 資料庫,然後使用 T-SQL 命令還原。
  • 針對所有系統資料庫 (model、msdb),請在觸發還原之前停止 SQL Server Agent 服務。
  • 關閉可能會嘗試連線到這些資料庫的任何應用程式。

還原資料庫

若要進行還原,您需要下列權限:

  • 您執行還原所在之保存庫的備份操作員權限。
  • 針對已備份來源 VM 的參與者 (寫入) 存取權。
  • 目標 VM 的參與者 (寫入) 存取權:
    • 若要還原至相同的 VM,便是來源 VM。
    • 若要還原至其他位置,便為新的目標 VM。

以下列方式進行還原:

  1. 在 Azure 入口網站中,移至 [備份中心],然後按一下 [還原]

    Screenshot showing the start the restore process.

  2. 選取 [Azure VM 中的 SQL] 作為資料來源類型,選取要還原的資料庫,然後按一下 [繼續]

    Screenshot showing to select the datasource type.

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

    • 其他位置:將資料庫還原至其他位置,並保留原始的來源資料庫。

    • 覆寫 DB:將資料還原至與原始來源相同的 SQL Server 執行個體。 此選項會覆寫原始資料庫。

      重要

      如果選取的資料庫屬於 AlwaysOn 可用性群組,SQL Server 不允許覆寫資料庫。 只有 [替代位置] 可用。

    • 還原為檔案:您可以稍後在使用 SQL Server Management Studio 的檔案所在的任何電腦上還原可作為資料庫復原的備份檔案,而不是還原為資料庫。

還原至替代位置

  1. 在 [還原設定] 功能表中的 [還原目的地] 底下,選取 [替代位置]

  2. 選取您要在其中還原資料庫的目的地 SQL Server 名稱和執行個體。

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

  4. 如果適用的話,請選取 [Overwrite if the DB with the same name already exists on selected SQL instance] \(若選取的 SQL 執行個體上已存在相同名稱的 DB 則覆寫\)

  5. 選取 [還原點],並選取是否要還原至特定時間點,或還原到特定復原點

    Screenshot showing to select Restore Point.

    Screenshot showing restore to point in time.

  6. 在 [進階設定] 功能表上:

    • 若想讓資料庫在還原後保持不運作,請啟用 [使用 NORECOVERY 還原]

    • 如果您要變更目的地伺服器上的還原位置,請輸入新的目標路徑。

      Enter target paths

  7. 選取 [確定] 以觸發還原。 在 [通知] 區域中追蹤還原進度,或在保存庫的 [備份工作] 檢視下追蹤。

    注意

    時間點還原僅適用於採用完整復原模式和大量記錄復原模式的資料庫記錄備份。

還原並覆寫資料庫

  1. 在 [還原設定] 功能表中的 [還原目的地] 底下,選取 [覆寫 DB]>[確定]

    Select Overwrite DB

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

    注意

    時間點還原僅適用於採用完整復原模式和大量記錄復原模式的資料庫記錄備份。

還原為檔案

若要將備份資料還原為 .bak 檔案而非資料庫,請選擇 [還原為檔案]。 一旦檔案備份到指定的路徑,您就可以將這些檔案放到任何機器上,並在其中將檔案還原為資料庫。 由於您可以將這些檔案移動到任何機器,所以現在可以在訂閱項目和區域之間還原資料。

  1. 在 [要在何處及如何還原] 下,選取 [還原為檔案]

  2. 選取您要還原備份檔案的目的地 SQL Server 名稱。

  3. 在 [伺服器上的目的地路徑] 中,輸入在步驟 2 中選取的伺服器資料夾路徑。 這是該服務將用來備份到所有必要備份檔案的位置。 一般而言,網路共用路徑 (或是指定為目的地路徑的掛接 Azure 檔案路徑) 可讓相同網路中或掛接相同 Azure 檔案共用的其他機器,更輕鬆地存取這些檔案。

    注意

    若要在裝載於目標已註冊 VM 上的 Azure 檔案共用上還原資料庫備份檔案,請確定 NT AUTHORITY\SYSTEM 具有檔案共用的存取權。 您可以執行下列步驟,將讀取/寫入權限授與 VM 上裝載的 AFS:

    • 執行 PsExec -s cmd 以進入 NT AUTHORITY\SYSTEM 殼層
      • 執行 cmdkey /add:<storageacct>.file.core.windows.net /user:AZURE\<storageacct> /pass:<storagekey>
      • 透過 dir \\<storageacct>.file.core.windows.net\<filesharename> 驗證存取權
    • 從備份保存庫以檔案形式啟動還原至 \\<storageacct>.file.core.windows.net\<filesharename> 作為路徑
      您可以從 Sysinternals 頁面下載 PsExec。
  4. 選取 [確定]。

    Select Restore As Files

  5. 選取 [還原點],並選取是否要還原至特定時間點,或還原到特定復原點

  6. 使用 [還原為檔案] 執行 SQL 資料庫時間點還原時,會將所有復原點從「完整備份」儲存到「選取的時間點」。 然後,您可以使用 SQL Server Management Studio,將這些檔案還原為其所在機器上的資料庫。

    Restored Backup Files in Destination Path

還原至特定時間點

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

  1. 在 [還原日期/時間] 下,開啟行事曆。 在行事曆上,具有復原點的日期會以粗體顯示,而目前的日期會醒目顯示。

  2. 選取具有復原點的日期。 您無法選取沒有復原點的日期。

    Open the calendar

  3. 選取日期之後,時間軸圖表會顯示連續範圍中可用的復原點。

  4. 請使用時間軸圖表指定復原時間,或選取時間。 然後選取確定

部分還原為檔案

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

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

排除備份檔案類型

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

  1. 在要下載檔案的目標機器中,移至 "C:\Program Files\Azure Workload Backup\bin" 資料夾

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

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

    {
    "RecoveryPointTypesToBeExcludedForRestoreAsFiles": "ExcludeFull"
    }
    
  4. 不需要重新啟動任何服務。 Azure 備份服務會嘗試在還原鏈結中排除此檔案所述的備份類型。

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

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

還原至特定還原點

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

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

    Choose a full recovery point

    注意

    依預設,將會顯示過去 30 天的復原點。 您可以選取 [篩選] 並選取自訂範圍,以顯示 30 天之前的復原點。

還原具有大量檔案的資料庫

如果資料庫中檔案的總字串大小超過特定限制,Azure 備份便會將資料庫檔案的清單儲存在不同的 Pit 元件中,因此您無法在還原作業期間設定目標還原路徑。 這些檔案會改為還原至 SQL 預設路徑。

Restore Database with large file

使用 SSMS 從 .bak 檔案復原資料庫

當從 Azure 入口網站還原時,您可以使用 [還原為檔案] 作業,以 .bak 格式還原資料庫檔案。 深入了解

.bak 檔案還原至 Azure 虛擬機器完成後,您可以透過 SSMS 使用 TSQL 命令來觸發還原。   若要將資料庫檔案還原至「來源伺服器上的原始路徑」,請從 TSQL 還原查詢中移除 MOVE 子句。   範例

  USE [master] 
  RESTORE DATABASE [<DBName>] FROM  DISK = N'<.bak file path>'

注意

您不應該在目標伺服器上有相同的資料庫檔案 (使用取代還原)。  此外,您也可以在目標伺服器上啟用立即檔案初始化,以減少檔案初始化時間的額外負荷

若要從目標還原伺服器重新放置資料庫檔案,您可以使用 MOVE 子句來架構 TSQL 命令。

  USE [master] 
  RESTORE DATABASE [<DBName>] FROM  DISK = N'<.bak file path>'  MOVE N'<LogicalName1>' TO N'<TargetFilePath1OnDisk>',  MOVE N'<LogicalName2>' TO N'<TargetFilePath2OnDisk>' GO

範例

  USE [master] 
  RESTORE DATABASE [test] FROM  DISK = N'J:\dbBackupFiles\test.bak' WITH  FILE = 1,  MOVE N'test' TO N'F:\data\test.mdf',  MOVE N'test_log' TO N'G:\log\test_log.ldf',  NOUNLOAD,  STATS = 5 
  GO

如果資料庫有超過兩個檔案,您可以將其他 MOVE 子句新增至還原查詢。 您也可以使用 SSMS 以使用 .bak 檔案進行資料庫復原。 深入了解

注意

針對大型資料庫復原,建議您使用 TSQL 陳述式。 如果您想要重新放置特定的資料庫檔案,請參閱 [還原為檔案] 作業期間所建立 JSON 格式的資料庫檔案清單。

跨區域還原

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

若要加入此功能,請閱讀開始前的該節。

若要查看是否已啟用 CRR,請依照設定跨區域還原中的指示進行

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

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

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

注意

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

Backup items in secondary region

Databases in secondary region

在次要區域中還原

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

Where and how to restore

Trigger restore in progress notification

注意

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

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

監視次要區域還原工作

  1. 在 Azure 入口網站中,移至 [備份中心]>[備份作業]

  2. 篩選 CrossRegionRestore 的作業,以查看次要區域中的工作。

    Screenshot showing the filtered Backup jobs.

跨訂用帳戶還原

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

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

注意

  • 您可以從復原服務保存庫觸發 [跨訂用帳戶還原]。
  • 只有串流型備份才支援 CSR,快照型備份不支援 CSR。
  • 不支援搭配使用 [跨區域還原 (CRR)] 與 CSR。

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 SQL database.

下一步

管理和監視由 Azure 備份進行備份的 SQL Server 資料庫。