備份與還原最佳作法 (Windows Azure Blob 儲存體服務)

本主題包含從 SQL Server 備份及還原至 Windows Azure Blob 服務的最佳作法和疑難排解提示。

如需有關使用 Windows Azure Blob 儲存體服務進行 SQL Server 備份或還原作業的詳細資訊,請參閱:

管理備份

下列清單包含管理備份的一般建議:

  • 建議針對每個備份使用唯一的檔案名稱,避免不小心覆寫 Blob。

  • 建立 Windows Azure Blob 容器時,建議您將存取層級設定為 [私用],如此只有能夠提供必要驗證資訊的使用者或帳戶才能讀取或寫入容器中的 Blob。

  • 如果資料庫位於 Windows Azure 虛擬機器中執行的 SQL Server 執行個體上,請使用與虛擬機器位於相同地區的儲存體帳戶,避免產生不同地區之間的資料傳輸成本。 使用相同的地區也可以確保備份與還原作業達到最佳效能。

  • 失敗的備份活動可能會產生無效的備份檔案。 我們建議您定期識別失敗的備份並刪除 Blob 檔案。 如需詳細資訊,請參閱<刪除擁有使用中租用的備份 Blob 檔案

  • 在備份期間使用 WITH COMPRESSION 選項可以將您的儲存體成本和儲存體交易成本降到最低程度。 它也可以減少完成備份程序所需的時間。

處理大型檔案

  • SQL Server 備份作業會使用多個執行緒來最佳化 Windows Azure Blob 儲存體服務的資料傳輸。 不過,其效能取決於各種因素,例如 ISV 頻寬和資料庫的大小。 如果您計畫要備份內部部署 SQL Server 資料庫中的大型資料庫或檔案群組,建議您先進行一些輸送量測試。 Windows Azure 儲存體 SLA 具有 Blob 的處理時間上限,可供您列入考量。

  • 備份大型檔案時,務必依照<管理備份>一節中的建議使用 WITH COMPRESSION 選項。

最佳化還原

若要減少還原寫入時間,請將 [執行磁碟區維護工作] 使用者權限加入至 SQL Server 使用者帳戶。 如需詳細資訊,請參閱資料庫檔案初始化

效能考量

備份和還原效能會根據網路頻寬、資料庫的大小,以及相對於內部部署位置的 Windows Azure 儲存體服務位置而有所不同。 若要評估您環境的備份和還原效能,建議您測試備份和還原並測量輸送量和效能。 備份至 Windows Azure Blob 儲存體服務時,應考量下列項目:

  • 備份和還原時間與網路頻寬成正比。

  • 備份的最小網路頻寬為每秒 1 MB。 如果頻寬低於每秒 1 MB,則備份可能因逾時錯誤而失敗。

  • 還原時間也與網路延遲也成正比,尤其是如果您嘗試從地理位置與做為還原目標的 SQL Server 執行個體不同的 Windows Azure 區域還原檔案時。 在這種情況下務必進行測試,確保能符合您的 RTO 需求。

備份至 Windows Azure Blob 儲存體服務或從中還原疑難排解

下面是一些快速疑難排解備份至 Windows Azure Blob 儲存體服務或從中還原時發生之錯誤的方法。

若要避免由於不支援的選項或限制而發生的錯誤,請在<SQL Server 備份及還原與 Windows Azure Blob 儲存體服務>文章中檢閱限制的清單,以及支援 BACKUP 和 RESTORE 命令的資訊。

驗證錯誤:

  • WITH CREDENTIAL 是新的選項,而且必須在備份至 Windows Azure Blob 儲存體服務或從中還原時使用。 與認證有關的失敗可能包括:

    BACKUP 或 RESTORE 命令中指定的認證不存在。 若要避免此問題,您可以在 Backup 陳述式中加入 T-SQL 陳述式來建立認證 (如果認證不存在的話)。 下面是您可以使用的範例:

    IF NOT EXISTS
    (SELECT * FROM sys.credentials 
    WHERE credential_identity = 'mycredential')
    CREATE CREDENTIAL <credential name> WITH IDENTITY = 'mystorageaccount'
    ,SECRET = '<storage access key> ;
    
  • 認證存在,但是用來執行 Backup 命令的登入帳戶沒有存取認證的權限。 請使用擁有 Alter any credential 權限之 db_backupoperator 角色的登入帳戶。

  • 確認儲存體帳戶名稱與金鑰值。 儲存在認證中的資訊必須符合您在備份和還原作業中使用之 Windows Azure 儲存體帳戶的屬性值。

備份錯誤/失敗:

  • 相同 Blob 的平行備份會導致其中一個備份失敗並出現 [初始化失敗] 錯誤。

  • 使用下列錯誤記錄來協助疑難排解備份錯誤:

    • 您可以使用下列格式來設定追蹤旗標 3051,以便記錄至特定錯誤記錄:

      BackupToUrl-<instname>-<dbname>-action-<PID>.log,其中 <action> 是下列其中之一:

      • DB

      • FILELISTONLY

      • LABELONLY

      • HEADERONLY

      • VERIFYONLY

    • 您也可以透過檢閱 Windows 事件記錄檔 (在名為 ‘SQLBackupToUrl’ 的應用程式記錄底下),尋找相關資訊。

  • 備份期間發生錯誤,因為 Blob 擁有使用中租用:失敗的備份活動可能會產生擁有使用中租用的 Blob。

    如果重新嘗試執行 Backup 陳述式,備份作業可能會失敗並出現類似下面的錯誤:

    Backup to URL 收到遠端端點的例外狀況。例外狀況訊息: 遠端伺服器傳回錯誤: (412) Blob 目前存在租用,而且要求中並未指定任何租用識別碼

    如果針對擁有使用中租用的備份 Blob 檔案執行 Restore 陳述式,還原作業會失敗並出現類似下面的錯誤:

    例外狀況訊息: 遠端伺服器傳回錯誤: (409) 衝突。

    發生這類錯誤時,您必須刪除 Blob 檔案。 如需有關此案例以及如何更正這個問題的詳細資訊,請參閱<刪除擁有使用中租用的備份 Blob 檔案>。

Proxy 錯誤

如果您使用 Proxy 伺服器存取網際網路,可能會看見下列問題:

Proxy 伺服器連線節流:

Proxy 伺服器可能有限制每分鐘連接數目的設定。 備份至 URL 處理序是一個多執行緒處理序,因此可能會超出此限制。 如果發生這種情況,Proxy 伺服器會清除該連接。 若要解決這個問題,請變更 Proxy 設定,讓 SQL Server 不使用 Proxy。 以下是您可能在錯誤記錄檔中看到的類型或錯誤訊息的部分範例:

  • 寫入 "http://storageaccount.blob.core.windows. net/container/BackupAzurefile.bak" 失敗: 備份至 URL 時收到來自遠端端點的例外狀況。 例外狀況訊息: 無法讀取傳輸連線的資料: 此連接已經關閉。

  • 檔案 "http://storageaccount.blob.core.windows. net/container/BackupAzurefile.bak:" 上發生無法復原的 I/O 錯誤。無法從遠端端點收集錯誤。

    訊息 3013,層級 16,狀態 1,行 2

    備份資料庫正在異常結束。

  • BackupIoRequest::ReportIoError: 備份裝置 http://storageaccount.blob.core.windows. net/container/BackupAzurefile.bak' 寫入失敗。 作業系統錯誤。備份至 URL 時收到來自遠端端點的例外狀況。 例外狀況訊息: 無法讀取傳輸連線的資料: 此連接已經關閉。

如果您使用追蹤旗標 3051 開啟詳細資訊記錄,可能也會在記錄檔中看到下列資訊:

HTTP 狀態碼 502,HTTP 狀態訊息 Proxy 錯誤 (每分鐘 HTTP 要求數目超過設定的限制。 請連絡您的 ISA Server 系統管理員。 )

預設 Proxy 設定未收取:

有時未收取到預設值,導致 Proxy 驗證錯誤,如下所示:檔案 "http://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" 上發生無法復原的 I/O 錯誤。備份至 URL 時收到來自遠端端點的例外狀況。例外狀況訊息: 遠端伺服器傳回錯誤: (407) 要求 Proxy 驗證

若要解決這個問題,使用下列步驟建立組態檔,讓備份至 URL 處理序可以使用預設 Proxy 設定:

  1. 建立具有下列 xml 的組態檔,名稱為 BackuptoURL.exe.config:

    <?xml version ="1.0"?>
    <configuration> 
                    <system.net> 
                                    <defaultProxy enabled="true" useDefaultCredentials="true"> 
                                                    <proxy usesystemdefault="true" /> 
                                    </defaultProxy> 
                    </system.net>
    </configuration>
    
  2. 將組態檔放在 SQL Server 執行個體的 Binn 資料夾。 例如,如果 SQL Server 安裝在電腦的 C 磁碟機上,請將組態檔放在這裡:C:\Program Files\Microsoft SQL Server\MSSQL11.<InstanceName>\MSSQL\Binn