在 SQL Server 管理中,備份策略是確保資料安全的核心。然而,圍繞備份操作存在許多流傳已久的迷思,可能導致 DBA 採取錯誤的維護方式,甚至在災難發生時無法順利還原。本文整理了 30 個常見的備份迷思,並逐一釐清事實,幫助您建立正確的備份觀念。
事實: 備份不會對使用者物件加鎖。雖然備份過程會對 I/O 系統造成負擔,可能看起來像阻塞,但實際上 DML 操作永遠不會受到備份操作阻塞。唯一例外是當備份包含最小記錄操作涉及的資料區需要加鎖時,會阻塞 Checkpoint,但不影響一般 DML。
事實: 這兩種模式互相切換不會導致記錄鏈斷裂。
事實: 差異備份也可以重新開始記錄鏈。只要記錄斷裂的部分被差異備份所包含,即可重新啟動記錄鏈。
事實: 自 SQL Server 2005 起,完整或差異備份期間可以同時進行記錄備份。
事實: 只有備份交易記錄才會清除記錄(在完整或大量記錄復原模式下)。完整/差異備份雖然包含部分記錄,但不會截斷記錄。
事實: 記錄備份必須包含使最小記錄操作可回滾的所有記錄及相關資料區,因此備份大小與完整復原模式下基本一致。
事實: 完整/差異備份需要足夠的記錄,以將資料庫還原到備份結束時的交易一致性狀態,包含的記錄範圍比想像中大。
事實: 預設不會檢查。必須指定 WITH CHECKSUM 選項才會驗證校驗和,這也是建議在備份時加上的選項。
事實: 備份子系統會對資料檔案單獨開啟通道,避免將所有資料讀入記憶體再寫入儲存裝置,以免導致效能嚴重下降。僅在指定 WITH CHECKSUM 時會涉及少量記憶體使用。
事實: 備份不會執行任何一致性檢查,兩者功能完全不同。
事實: 備份檔案本身可能損壞。必須定期驗證備份(如 RESTORE VERIFYONLY 或實際還原測試),確保災難發生時能正確還原。
事實: 若鏡像中的任一路徑失效,整個鏡像備份都會失敗。
事實: 若資料檔案受損且記錄包含最小記錄操作,而相關資料區已損壞,則無法進行尾端記錄備份。因此 7x24 生產環境不建議使用大量記錄復原模式。
事實: 完全錯誤。備份無法偵測記憶體中的頁損壞,也無法發現未啟用頁校驗和的頁面損壞。必須定期執行 DBCC CHECKDB。
事實: 不可以備份資料庫快照集。
事實: 鏡像依賴主資料庫可用,若主資料庫損壞,鏡像通常也會受影響。且多個鏡像會嚴重影響效能,無法替代記錄備份。
事實: 記錄備份只包含自上次記錄備份以來的記錄,且不包含作用中交易的回滾記錄。DBCC SQLPERF(LOGSPACE) 顯示的空間使用量不能反映實際備份大小。
事實: 可使用 WITH CONTINUE_AFTER_ERROR 選項備份損壞資料庫(除非啟動頁或檔案標頭頁損壞),這是 SQL Server 層面備份損壞資料庫的唯一辦法。
事實: SQL Server 2008 可透過追蹤旗標 3231 禁止這些操作。
事實: 若記錄備份期間有資料庫備份並行執行,或存在長時間作用中交易、複寫等情況,SQL Server 可能認為記錄仍為必要而不清除。
事實: 差異備份是累積性的(自上次完整備份以來所有修改的資料區),而非增量式。只有記錄備份是增量式的。
事實: 絕對不可。必須依保留策略保留多組備份,以防最新備份損壞時無法還原。
事實: SQL Server 2005 及之前版本直接從行鎖升級為表鎖。SQL Server 2008 引入分區鎖升級,可透過 ALTER TABLE ... SET (LOCK_ESCALATION = AUTO/TABLE/DISABLE) 控制。
事實: 重啟或分離附加無法修復資料損壞。若資料庫處於可疑狀態,分離附加會導致附加失敗。正確做法是從備份還原或執行修復。
事實: 填充因子僅在索引建立或重建時生效,不會持續保持頁面空閒空間。填充因子 0 與 100 完全相同。填充因子 0 不會 在非葉節點保留空間。
事實: 巢狀交易不是真正的巢狀。SQL Server 僅識別最外層交易。ROLLBACK 內層交易實際會回滾整個外層交易。開發人員應避免使用巢狀交易,改用儲存點(SAVE TRAN)實現部分回滾。
事實: 無法替代。原因:1) 升級舊版資料庫可能有頁未啟用校驗和;2) 完整備份間隔較長,無法滿足每週檢查的最佳實務;3) 無法偵測記憶體中頁損壞寫入磁碟後產生的「正確校驗和的損壞頁」。
BULK INSERT、SELECT INTO、建立索引等)可最小記錄。事實: 這是極差的做法。建立叢集索引會重建所有非叢集索引(RID 變為叢集鍵),刪除叢集索引又會再次重建所有非叢集索引(叢集鍵變回 RID)。正確做法:直接保留叢集索引(選擇窄、唯一、遞增鍵),或 SQL Server 2008+ 使用 ALTER TABLE ... REBUILD(同樣會重建非叢集索引)。
