SQL Server 備份至 URL 的最佳做法和疑難排解
本主題包含 SQL Server 備份和還原至 Azure Blob 服務的最佳做法和疑難解答秘訣。
如需使用 Azure Blob 記憶體服務進行 SQL Server 備份或還原作業的詳細資訊,請參閱:
管理備份
下列清單包含管理備份的一般建議:
建議針對每個備份使用唯一的檔案名稱,避免不小心覆寫 Blob。
建立容器時,建議您將存取層級設定為 [私用] ,如此只有能夠提供必要驗證資訊的使用者或帳戶才能讀取或寫入容器中的 Blob。
如果 SQL Server 資料庫位於 Azure 虛擬機器中執行的 SQL Server 執行個體上,請使用與虛擬機器位於相同地區的儲存體帳戶,避免產生不同地區之間的資料傳輸成本。 使用相同的地區也可以確保備份與還原作業達到最佳效能。
失敗的備份活動可能會產生無效的備份檔案。 我們建議您定期識別失敗的備份並刪除 Blob 檔案。 如需詳細資訊,請參閱刪除擁有使用中租用的備份 Blob 檔案
在備份期間使用
WITH COMPRESSION
選項可以將您的儲存體成本和儲存體交易成本降到最低程度。 它也可以減少完成備份程序所需的時間。
處理大型檔案
SQL Server 備份作業會使用多個線程,將數據傳輸優化至 Azure Blob 記憶體服務。 不過,其效能取決於各種因素,例如 ISV 頻寬和資料庫的大小。 如果您打算從內部部署 SQL Server 資料庫備份大型資料庫或檔案群組,建議您先進行一些輸送量測試。 Azure 記憶體 SLA 對於 您可以考慮的 Blob 處理時間上限。
WITH COMPRESSION
使用 [管理備份] 區段中建議的選項,備份大型檔案時非常重要。
針對備份至 URL 或從 URL 還原進行疑難解答
以下是在備份至 Azure Blob 記憶體服務或從 Azure Blob 記憶體服務還原時,針對錯誤進行疑難解答的一些快速方法。
若要避免因不支援的選項或限制所造成的錯誤,請檢閱 SQL Server 備份與還原與 Azure Blob 儲存體 服務一文中 BACKUP 和 RESTORE 命令資訊的清單。
驗證錯誤:
WITH CREDENTIAL 是新的選項,需要備份或從 Azure Blob 記憶體服務還原。 與認證相關的失敗可能如下:
或
RESTORE
命令中指定的BACKUP
認證不存在。 若要避免此問題,您可以在 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 命令的登入帳戶沒有存取認證的權限。 使用db_backupoperator角色中的登入帳戶,並變更任何認證許可權。
確認儲存體帳戶名稱與金鑰值。 儲存在認證中的資訊必須符合您在備份和還原作業中使用之 Azure 儲存體帳戶的屬性值。
備份錯誤/失敗:
相同 Blob 的平行備份會導致其中一個備份失敗並出現 [初始化失敗] 錯誤。
使用下列錯誤記錄來協助針對備份錯誤進行疑難解答:
將追蹤旗標 3051 設定為以下欄格式開啟特定錯誤記錄檔的記錄:
BackupToUrl-instname-dbname-action-PID<>><<>.log 其中<動作>為下列其中一項:
DB
FILELISTONLY
LABELONLY
HEADERONLY
VERIFYONLY
您也可以檢閱名稱為 『SQLBackupToUrl』 的應用程式記錄檔底下的 Windows 事件記錄檔來尋找資訊。
從壓縮備份還原時,您可能會看見下列錯誤:
發生 SqlException 3284。 嚴重性:16 狀態:5
裝置 『https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak上的訊息檔案標記未對齊。 使用用來建立備份集的相同區塊大小重新發出 Restore 語句:『65536』 看起來像是可能的值。若要解決此錯誤,請重新發出指定
BACKUP
的BLOCKSIZE = 65536
陳述式。
備份期間發生錯誤,因為 Blob 上有作用中的租用:失敗的備份活動可能會導致具有作用中租用的 Blob。
如果重新嘗試執行 Backup 陳述式,備份作業可能會失敗並出現類似以下的錯誤:
備份至 URL 收到來自遠端端點的例外狀況。 例外狀況訊息:遠端伺服器傳回錯誤:(412) Blob 目前有租用,且要求中未指定租用標識符.
如果針對擁有使用中租用的備份 Blob 檔案執行 Restore 陳述式,還原作業會失敗並出現類似以下的錯誤:
例外狀況訊息:遠端伺服器傳回錯誤:(409) Conflict.。
發生這類錯誤時,您必須刪除 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:"無法從遠端端點收集錯誤。
訊息 3013,層級 16,狀態 1,第 2 行
BACKUP DATABASE is terminating abnormally.
BackupIoRequest::ReportIoError:備份裝置 'http://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak' 上的寫入失敗。 操作系統錯誤 備份至 URL 收到來自遠端端端點的例外狀況。 例外狀況訊息:無法從傳輸連線讀取數據:連線已關閉。
如果您使用追蹤旗標 3051 開啟詳細資訊記錄,您可能也會在記錄中看到下列訊息:
HTTP 狀態代碼 502、HTTP 狀態消息 Proxy 錯誤 (每分鐘 HTTP 要求數目超過設定的限制。請連絡您的 ISA 伺服器管理員。)
預設 Proxy 設定未收取:
有時候不會挑選預設設定,導致 Proxy 驗證錯誤,例如如下所示:檔案上發生無法復原的 I/O 錯誤:http://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:"備份至 URL 收到來自遠端端端點的例外狀況。例外狀況訊息:遠端伺服器傳回錯誤: (407) 需要 Proxy 驗證。
若要解決這個問題,使用下列步驟建立組態檔,讓備份至 URL 處理序可以使用預設 Proxy 設定:
使用下列 xml 建立名為 BackuptoURL.exe.config 的組態檔:
<?xml version ="1.0"?> <configuration> <system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="true" /> </defaultProxy> </system.net> </configuration>
將設定檔放在 SQL Server 執行個體的 Binn 資料夾中。 例如,如果我的 SQL Server 安裝在電腦的 C 磁碟驅動器上,請將組態檔放在此處: C:\Program Files\Microsoft SQL Server\MSSQL12。<InstanceName>\MSSQL\Binn。
針對 SQL Server 受控備份至 Azure 進行疑難解答
由於 SQL Server 受控備份建置在備份至 URL 之上,因此先前章節所述的疑難解答秘訣會套用至使用 SQL Server 受控備份的資料庫或實例。 針對 SQL Server 受控備份至 Azure 進行疑難解答的詳細資訊,請參閱 針對 SQL Server 受控備份進行疑難解答。