使用 Azure 備份針對 SQL Server 資料庫備份進行疑難排解

本文提供在 Azure 虛擬機器上執行之 SQL Server 資料庫的疑難排解資訊。

如需有關備份程序和限制的詳細資訊,請參閱關於 Azure VM 中的 SQL Server 備份

SQL Server 權限

若要針對虛擬機器上的 SQL Server 資料庫設定保護功能,該虛擬機器上就必須安裝 AzureBackupWindowsWorkload 延伸模組。 如果您收到 UserErrorSQLNoSysadminMembership 錯誤,表示 SQL Server 執行個體沒有所需的備份權限。 若要修正此錯誤,請依照設定 VM 權限中的步驟執行。

探索和設定問題的疑難排解

完成建立並設定復原服務保存庫時,探索資料庫和設定備份是雙步驟流程。

Backup Goal - SQL Server in Azure VM

在備份設定期間,如果 VM 中的探索資料庫設定備份中看不到 SQL VM 及其執行個體 (請參閱上圖),請確保:

步驟 1:VM 中的探索資料庫

  • 如果 VM 未列在探索到的 VM 清單中,而且也未在另一個保存庫中註冊 SQL 備份,請遵循探索 SQL Server 備份步驟。

步驟 2:設定備份

  • 如果註冊 SQL VM 的保存庫與保護資料庫所使用的保存庫相同,請遵循設定備份步驟。

如果 SQL VM 需要在新的保存庫中註冊,則必須先從舊的保存庫取消註冊。 從保存庫取消註冊 SQL VM 需要停止保護所有受保護的資料來源,然後您才可以刪除備份的資料。 刪除已備份資料是一種破壞性的作業。 在您檢閱並採用所有預防措施,以取消註冊 SQL VM 之後,請向新的保存庫註冊此相同 VM,然後重試備份作業。

對備份和復原問題進行疑難排解

有時候,在備份和還原作業中可能會發生隨機失敗,或是這些作業可能會停滯。 這可能是因為您的 VM 上有防毒程式。 建議的最佳做法是執行下列步驟:

  1. 從防毒掃描排除下列資料夾:

    C:\Program Files\Azure Workload Backup C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.RecoveryServices.WorkloadBackup.AzureBackupWindowsWorkload

    C:\ 取代為 SystemDrive 的字母。

  2. 從防毒掃描排除下列三個在 VM 內執行的程序:

    • IaasWLPluginSvc.exe
    • IaaSWorkloadCoordinatorService.exe
    • TriggerExtensionJob.exe
  3. SQL 也有提供一些有關使用防毒程式的指導方針。 如需詳細資料,請參閱這篇文章。

VM 中有多個 SQL Server 執行個體的故障執行個體

只有在 VM 內執行的所有 SQL 執行個體都回報狀況良好時,您才能還原至 SQL VM。 如果有一或多個執行個體「故障」,VM 將不會顯示為還原目標。 這可能是因為在還原作業期間,多重執行個體 VM 可能不會出現在 [伺服器] 下拉式清單中。

您可以在 [設定備份] 下,驗證 VM 中所有 SQL 執行個體的「備份整備」:

Validate backup readiness

如果您想要在狀況良好的 SQL 執行個體上觸發還原,請執行下列步驟:

  1. 登入 SQL VM,然後移至 C:\Program Files\Azure Workload Backup\bin

  2. 建立名為 ExtensionSettingsOverrides.json 的 JSON 檔案 (如果還不存在)。 如果此檔案已存在於 VM 上,請繼續使用。

  3. 在 JSON 檔案中新增下列內容,並儲存檔案:

    {
                  "<ExistingKey1>":"<ExistingValue1>",
                    …………………………………………………… ,
              "whitelistedInstancesForInquiry": "FaultyInstance_1,FaultyInstance_2"
            }
    
            Sample content:        
            { 
              "whitelistedInstancesForInquiry": "CRPPA,CRPPB "
            }
    
    
  4. 從 Azure 入口網站在受影響的伺服器上觸發 [重新探索資料庫] 作業 (在查看備份整備的相同位置)。 VM 將會開始顯示為還原作業的目標。

    Rediscover DBs

  5. 當還原作業完成時,請從 ExtensionSettingsOverrides.json 檔案中移除 whitelistedInstancesForInquiry 項目。

錯誤訊息

不支援的備份類型

嚴重性 描述 可能的原因 建議的動作
警告 此資料庫的目前設定不支援相關聯原則中出現的特定種類備份類型。
  • 只有完整資料庫備份作業可在 master 資料庫上執行。 無法進行差異備份和交易記錄備份。
  • 簡單復原模式中的任何資料庫都不允許備份交易記錄。
  • 修改資料庫設定,使其支援原則中的所有備份類型。 或者,將目前原則變更為僅包含支援的備份類型。 否則,在排定備份期間,將略過不支援的備份類型,或隨需備份的備份作業將會失敗。

    UserErrorSQLPODoesNotSupportBackupType

    錯誤訊息 可能的原因 建議的動作
    此 SQL 資料庫不支援所要求的備份類型。 當資料庫復原模式不允許所要求的備份類型時便會發生。 此錯誤會於下列情況時發生:
    • 使用簡單復原模式的資料庫不允許記錄備份。
    • master 資料庫不允許差異備份和記錄備份。
    如需詳細資訊,請參閱 SQL Server 復原模式文件。
    如果簡單復原模式下的資料庫記錄備份失敗,請嘗試下列其中一個選項:
    • 如果資料庫處於簡單復原模式,請停用記錄備份。
    • 使用 SQL Server 文件,將資料庫復原模式變更為「完整」或「大量記錄」。
    • 如果您不想變更復原模式,而且所用來備份多個資料庫的標準原則無法變更,則請忽略此錯誤。 完整和差異備份會依排程運作。 記錄備份則會略過,這符合此案例的預期。
    如果是 master 資料庫,而且您已設定差異或記錄備份,請使用下列任何步驟:
    • 使用入口網站將 master 資料庫的備份原則排程變更為「完整」。
    • 如果所用來備份多個資料庫的標準原則無法變更,則請忽略此錯誤。 完整備份會依排程運作。 差異或記錄備份則不會進行,這符合此案例的預期。

    OperationCancelledBecauseConflictingOperationRunningUserError

    錯誤訊息 可能的原因 建議的動作
    作業遭到取消,原因是同一個資料庫上已在執行衝突的作業。 當觸發的隨選或排程備份作業與相同資料庫上 Azure 備份延伸模組觸發的已執行備份作業發生衝突時,您可能會收到此錯誤。
    以下是可能會顯示此錯誤碼的案例:
    • 在資料庫上執行完整備份,且觸發另一個完整備份。
    • 在資料庫上執行差異備份,且觸發另一個差異備份。
    • 在資料庫上執行記錄備份,且觸發另一個記錄備份。
    衝突的作業失敗後,請重新啟動作業。

    UserErrorFileManipulationIsNotAllowedDuringBackup

    錯誤訊息 可能的原因 建議動作
    資料庫上的備份、檔案操作作業 (例如 ALTER DATABASE ADD FILE) 和加密變更必須進行序列化。 以下是此錯誤碼可能出現的情況:
    • 在進行備份時,將檔案新增至資料庫或從中卸除。
    • 在進行資料庫備份時,同時壓縮檔案。
    • 為資料庫設定的另一個備份產品正在進行資料庫備份,而且 Azure 備份延伸模組觸發備份作業。
    停用其他備份產品以解決此問題。

    UserErrorSQLPODoesNotExist

    錯誤訊息 可能的原因 建議動作
    SQL 資料庫不存在。 資料庫已遭到刪除或重新命名。 檢查資料庫是否已意外遭到刪除或重新命名。

    如果資料庫意外遭到刪除,卻要繼續備份,請將資料庫還原到原始位置。

    如果您已刪除資料庫,且不需要未來的備份,請在復原服務保存庫中選取 [停止備份並保留備份資料] 或 [刪除備份資料]。 如需詳細資訊,請參閱管理和監視備份的 SQL Server 資料庫

    UserErrorSQLLSNValidationFailure

    錯誤訊息 可能的原因 建議動作
    記錄鏈結中斷。 資料庫或 VM 透過其他備份解決方案來備份,並截斷了記錄鏈結。
    • 檢查是否有其他備份解決方案或指令碼正在使用中。 如果有,請停止其他備份解決方案。
    • 如果該備份屬於隨選記錄備份,請觸發完整備份來啟動新的記錄鏈結。 若為已排程的記錄備份,因為 Azure 備份服務會自動觸發完整備份進而修正此問題,所以不需要採取任何動作。

    UserErrorOpeningSQLConnection

    錯誤訊息 可能的原因 建議動作
    Azure 備份無法連線至 SQL 執行個體。 Azure 備份無法連線至 SQL Server 執行個體。 使用 Azure 入口網站錯誤功能表中的其他詳細資料來縮小根本原因的範圍。 請參閱 SQL 備份疑難排解以修正錯誤。

    UserErrorParentFullBackupMissing

    錯誤訊息 可能的原因 建議動作
    此資料來源的第一個完整備份遺失。 資料庫的完整備份遺失。 完整備份是記錄和差異備份的上層,因此必須先製作完整備份,才能觸發差異或記錄備份。 觸發隨選完整備份。

    UserErrorBackupFailedAsTransactionLogIsFull

    錯誤訊息 可能的原因 建議動作
    資料來源的交易記錄已滿,所以無法擷取備份。 資料庫的交易記錄空間已滿。 若要修正這個問題,請參閱 SQL Server 文件

    UserErrorCannotRestoreExistingDBWithoutForceOverwrite

    錯誤訊息 可能的原因 建議動作
    目標位置上已經有同名的資料庫存在。 目標還原目的地已經有同名資料庫。
    • 請變更目標資料庫名稱。
    • 或者,使用還原頁面中的強制覆寫選項。

    UserErrorRestoreFailedDatabaseCannotBeOfflined

    錯誤訊息 可能的原因 建議動作
    還原失敗,原因是無法讓資料庫離線。 執行還原時,必須讓目標資料庫離線。 Azure 備份無法將這項資料離線。 使用 Azure 入口網站錯誤功能表中的其他詳細資料來縮小根本原因的範圍。 如需詳細資訊,請參閱 SQL Server 文件

    WlExtGenericIOFaultUserError

    錯誤訊息 可能的原因 建議動作
    作業期間發生輸入/輸出錯誤。 請檢查虛擬機器上的常見 IO 錯誤。 存取目標的權限或空間限制。 請檢查虛擬機器上的常見 IO 錯誤。 確定機器上的目標磁碟機/網路共用:
  • 在機器上具有帳戶 NT AUTHORITY\SYSTEM 的讀取/寫入權限。
  • 有足夠的空間可讓作業順利完成。
    如需詳細資訊,請參閱還原為檔案
  • UserErrorCannotFindServerCertificateWithThumbprint

    錯誤訊息 可能的原因 建議動作
    在目標上找不到具有指紋的伺服器憑證。 目的地執行個體上的 master 資料庫沒有有效的加密指紋。 將來源執行個體上所使用的有效憑證指紋,匯入到目標執行個體。

    UserErrorRestoreNotPossibleBecauseLogBackupContainsBulkLoggedChanges

    錯誤訊息 可能的原因 建議動作
    用於復原的記錄備份包含大量記錄的變更。 根據 SQL 指導方針,其無法用來在任意時間點停止。 當資料庫處於大量記錄復原模式時,大量記錄交易與下一個記錄交易之間的資料將無法復原。 請選擇不同的復原時間點。 深入了解

    FabricSvcBackupPreferenceCheckFailedUserError

    錯誤訊息 可能的原因 建議動作
    無法符合 SQL Always On 可用性群組的備份喜好設定,原因是可用性群組有某些節點並未註冊。 執行備份所需的節點未註冊或無法連線。
    • 確定對此資料庫執行備份所需的所有節點均已註冊且狀況良好,然後重試該作業。
    • 變更 SQL Server Always On 可用性群組的備份喜好設定。

    VMNotInRunningStateUserError

    錯誤訊息 可能的原因 建議動作
    SQL 伺服器 VM 已關閉,無法供 Azure 備份服務存取。 VM 已關閉。 確定 SQL Server 執行個體正在執行中。

    GuestAgentStatusUnavailableUserError

    錯誤訊息 可能的原因 建議動作
    Azure 備份服務使用 Azure VM 客體代理程式來執行備份,但目標伺服器上無法使用客體代理程式。 客體代理程式未啟用,或其狀況不良。 手動安裝 VM 客體代理程式

    AutoProtectionCancelledOrNotValid

    錯誤訊息 可能的原因 建議動作
    自動保護用途可能已移除或不再有效。 您對於 SQL Server 執行個體啟用自動保護時,「設定備份」作業便會針對該執行個體中的所有資料庫執行。 如果您停用自動保護,而工作正在執行,則進行中工作會取消,並出現此錯誤碼。 再次啟用自動保護可幫助保護其他所有的資料庫。

    CloudDosAbsoluteLimitReached

    錯誤訊息 可能的原因 建議動作
    作業遭封鎖,因為已達 24 小時內允許的作業數目上限。 當您已達 24 小時範圍內的最大允許作業數上限時,會出現此錯誤。
    例如:如果您已達到每日可觸發的設定備份作業數目限制,而您嘗試在新的項目上設定備份,就會看到此錯誤。
    一般來說,在 24 小時後重試作業會解決此問題。 但是,如果問題持續發生,您可以連絡 Microsoft 支援服務以尋求協助。

    CloudDosAbsoluteLimitReachedWithRetry

    錯誤訊息 可能的原因 建議動作
    由於保存庫已達到 24 小時內允許的此類作業上限,所以已封鎖作業。 當您已達 24 小時範圍內的最大允許作業數上限時,會出現此錯誤。 當有大規模作業 (例如修改原則或自動保護) 時,通常會出現此錯誤。 與 CloudDosAbsoluteLimitReached 的案例不同,您沒有什麼辦法可解決此狀態。 事實上,Azure 備份服務會在內部針對有問題的所有項目重試作業。
    例如:如果您有大量受到原則保護的資料來源,而且您嘗試修改該原則,則會針對每個受保護項目觸發設定保護作業,有時可能會達到每日此類作業允許的上限。
    Azure 備份服務會在 24 小時後自動重試此作業。

    WorkloadExtensionNotReachable

    錯誤訊息 可能的原因 建議動作
    AzureBackup 工作負載擴充作業失敗。 VM 已關閉,或 VM 因為網際網路連線問題而無法連線至 Azure 備份服務。
  • 確定 VM 已啟動並執行,且具有網際網路連線。
  • 在 SQL Server VM 上重新註冊延伸模組
  • UserErrorVMInternetConnectivityIssue

    錯誤訊息 可能的原因 建議動作
    VM 無法連線 Azure 備份服務,因為網際網路連線有問題。 VM 需要 Azure 備份服務、Azure 儲存體或 Microsoft Entra 服務的輸出連線。
  • 如果您使用 NSG 來限制連線,則應該使用 AzureBackup 服務標籤以允許對外存取 Azure 備份服務,也同樣適用於 Microsoft Entra ID (AzureActiveDirectory) 和 Azure 儲存體 (Storage) 服務。 請遵循下列步驟以授與存取權。
  • 確定 DNS 正在解析 Azure 端點。
  • 檢查 VM 是否位於封鎖網際網路存取權的負載平衡器後方。 藉由將公用 IP 指派給 VM,探索將發揮作用。
  • 確認沒有防火牆/防毒軟體/Proxy 封鎖對上述三個目標服務的呼叫。
  • UserErrorOperationNotAllowedDatabaseMirroringEnabled

    錯誤訊息 可能的原因 建議的動作
    AzureWorkloadBackup 不支援參與資料庫鏡像工作階段的資料庫備份。 當您在 SQL 資料庫上啟用鏡像作業時,會出現此錯誤。 目前,Azure 備份不支援已啟用此功能的資料庫。 您可以移除資料庫的資料庫鏡像工作階段,讓作業順利完成。 或是,如果資料庫已經受到保護,請停止資料庫上的備份作業。

    UserErrorWindowsWLExtFailedToStartPluginService

    錯誤訊息 可能的原因 建議
    作業失敗,發生 UserErrorWindowsWLExtFailedToStartPluginService 錯誤。 Azure 備份工作負載擴充功能無法啟動 Azure 虛擬機上的工作負載備份外掛程式服務,因為服務帳戶設定錯誤。 步驟 1:

    確認 NT Service\AzureWLBackupPluginSvc 使用者是否具有讀取權限:
    - C:\windows\Microsoft.NET \assembly\GAC_32
    - C:\windows\Microsoft.NET \assembly\GAC_64
    - C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config.

    如果權限遺失,請指派這些目錄讀取權限。

    步驟 2:

    請確認 NT Service\AzureWLBackupPluginSvc 具有略過周遊檢查權限,方法是移至 [本機安全策略]>[使用者權限指派]>[略過周遊檢查]。 依預設應選取所有人

    如果所有人NT Service\AzureWLBackupPluginSvc 遺失,請新增 NT Service\AzureWLBackupPluginSvc 使用者,然後嘗試重新啟動服務,或觸發資料來源的備份或還原作業。

    重新註冊失敗

    在觸發重新註冊作業之前,請先檢查下列一個或多個徵兆:

    • 所有作業 (例如備份、還原和設定備份) 都在 VM 上失敗,並出現下列其中一個錯誤代碼:WorkloadExtensionNotReachableUserErrorWorkloadExtensionNotInstalledWorkloadExtensionNotPresentWorkloadExtensionDidntDequeueMsg

    • 如果備份項目的 [備份狀態] 區域顯示 [無法連線],請排除可能會導致相同狀態的所有其他原因:

      • 缺少在 VM 上執行備份相關作業的權限。
      • VM 處於關閉狀態,因此無法進行備份。
      • 網路問題

      re-registering VM

    • 在 Always On 可用性群組的案例中,您變更備份喜好設定或容錯移轉之後,備份就會開始失敗。

    這些徵兆可能是因下列一個或多個原因而發生:

    • 已從入口網站刪除或卸載擴充。
    • 在 [解除安裝或變更程式] 下,從 VM 上的 [控制台] 解除安裝延伸模組。
    • VM 已透過就地磁碟還原來還原到原本狀態。
    • VM 已關閉一段較長的時間,因此其中的擴充設定已過期。
    • VM 已刪除,已建立另一個相同名稱的 VM,並且與已刪除的 VM 位於相同資源群組中。
    • 其中一個可用性群組節點並未接收到完整的備份設定。 當可用性群組已註冊至保存庫或新增新節點時,就會發生此情況。

    針對上述情況,我們建議您在 VM 上觸發重新註冊作業。 如需如何在 PowerShell 中執行此工作的指示,請參閱這裡

    檔案的大小限制

    檔案的字串大小總計不僅取決於檔案數目,也取決於其名稱和路徑。 針對每個資料庫檔案,取得邏輯檔案名稱和實體路徑。 您可以使用此 SQL 查詢:

    SELECT mf.name AS LogicalName, Physical_Name AS Location FROM sys.master_files mf
                   INNER JOIN sys.databases db ON db.database_id = mf.database_id
                   WHERE db.name = N'<Database Name>'"
    

    現在依照下列格式排列:

    [{"path":"<Location>","logicalName":"<LogicalName>","isDir":false},{"path":"<Location>","logicalName":"<LogicalName>","isDir":false}]}
    

    以下是範例:

    [{"path":"F:\\Data\\TestDB12.mdf","logicalName":"TestDB12","isDir":false},{"path":"F:\\Log\\TestDB12_log.ldf","logicalName":"TestDB12_log","isDir":false}]}
    

    如果內容的字串大小超過 20,000 個位元組,則會以不同的方式儲存資料庫檔案。 在復原期間,您將無法設定目標檔案路徑以進行還原。 檔案將會還原為 SQL Server 提供的預設 SQL 路徑。

    覆寫預設目標還原檔案路徑

    您可以在還原作業期間,將包含資料庫檔案對應的 JSON 檔案放置到目標還原路徑,以覆寫目標還原檔案路徑。 建立 database_name.json 檔案,並將其放置在位置 C:\Program Files\Azure Workload Backup\bin\plugins\SQL*

    檔案的內容應該採用下列格式:

    [
      {
        "Path": "<Restore_Path>",
        "LogicalName": "<LogicalName>",
        "IsDir": "false"
      },
      {
        "Path": "<Restore_Path>",
        "LogicalName": "LogicalName",
        "IsDir": "false"
      },  
    ]
    

    以下是範例:

    [
      {
       "Path": "F:\\Data\\testdb2_1546408741449456.mdf",
       "LogicalName": "testdb7",
       "IsDir": "false"
      },
      {
        "Path": "F:\\Log\\testdb2_log_1546408741449456.ldf",
        "LogicalName": "testdb7_log",
        "IsDir": "false"
      },  
    ]
    

    在上述內容中,您可以使用下列 SQL 查詢,來取得資料庫檔案的邏輯名稱:

    SELECT mf.name AS LogicalName FROM sys.master_files mf
                    INNER JOIN sys.databases db ON db.database_id = mf.database_id
                    WHERE db.name = N'<Database Name>'"
    

    在您觸發還原作業之前,應該先放置這個檔案。

    下一步

    如需更多資訊,請參閱適用於 SQL VM 的 Azure 備份 的詳細資訊