本文將介紹資料庫交易記錄已滿的可能解決方式。
【問題描述】
當您嘗試存取SQL Server 時發生【資料庫'db name'的交易記錄已滿。如果要了解為何無法重複使用記錄中的空間,請參閱sys.databases中的log_reuse_wait_desc資料行】,從 SQL Server 的記錄檔檢視器,您會看到類似下圖的記錄。
實際檢查交易記錄檔所使用的磁碟機似乎還有足夠的空間可供使用,為什麼會發生這樣的問題呢?KB 317375 指出可能的原因如下:
【實作步驟】
若您想要了解是什麼原因造成交易記錄無法重複使用,必須強制截斷或清空,您可以依照錯誤訊息的提示來查詢 sys.databases 系統檢視的 log_reuse_wait_desc 資料行,該資料行會告訴您目前交易記錄檔的空間正等待進行什麼樣的作業。
NOTHING CHECKPOINT LOG_BACKUP ACTIVE_BACKUP_OR_RESTORE ACTIVE_TRANSACTION DATABASE_MIRRORING REPLICATION DATABASE_SNAPSHOT_CREATION LOG_SCAN AVAILABILITY_REPLICA OLDEST_PAGE OTHER_TRANSIENT
但是要解決這個問題,或許您可以直接以下列兩種方式之一來截斷或清空交易記錄。
方法一、使用 T-SQL:您可以利用設定資料庫復原模式為簡單復原模式,來截斷或清空交易記錄。
SET RECOVERY SIMPLE GO
方法二、使用 SSMS:您也可以在 SSMS 的物件總管中,在發生上述錯誤訊息的資料庫上按滑鼠右鍵選擇【屬性】。
於資料庫屬性視窗左側的選取頁面區塊中點選【選項】,接著設定復原模式為【簡單】,最後按確定,即可截斷或清空記錄檔。
建議除了開發或測試的資料庫使用簡單復原模式以外,正式環境還是在截斷交易記錄之後,還是把復原模式改回來完整,以確保可以使用更多樣的資料庫策略,進而降低資料遺失的機率。
【參考資料】