本主題討論對已滿事務日志可以采取的幾種應對措施,並就以后如何避免出現已滿事務日志給出建議。如果事務日志已滿,則 SQL Server 數據庫引擎會發出 9002 錯誤。當數據庫聯機或恢復時,日志可能會滿。如果數據庫聯機時日志已滿,則數據庫保持聯機狀態,但是只能進行讀取而不能更新。如果恢復過程中日志已滿,則數據庫引擎將數據庫標記為 RESOURCE PENDING。不管哪種情況,都需要用戶執行操作才能使日志空間可用。
![]() |
---|
一般來說,事務日志用盡磁盤空間后,仍可以在只讀模式下訪問數據庫。但是,啟用快照隔離級別時,如果您正在刪除堆(沒有聚集索引的表)中的行且事務日志在虛影行的日志記錄持久化前填充,則數據庫將脫機。如果出現這種情況,數據庫將自動重新啟動,進行完全恢復后再聯機。 |
正確應對已滿事務日志在某種程度上取決於導致日志已滿的情況。若要在給定情況下查找阻止日志截斷的原因,請使用 sys.database 目錄視圖的log_reuse_wait 列和 log_reuse_wait_desc 列。有關詳細信息,請參閱 sys.databases (Transact-SQL)。有關延遲日志截斷的因素的說明,請參閱可能延遲日志截斷的因素。
![]() |
---|
如果數據庫在恢復過程中出現 9002 錯誤,則在解決此問題后,可使用 ALTER DATABASE database_name SET ONLINE 恢復數據庫。 |
應對已滿事務日志的備選方法包括:
-
備份日志。
-
釋放磁盤空間以便日志可以自動增長。
-
將日志文件移到具有足夠空間的磁盤驅動器。
-
增加日志文件的大小。
-
在其他磁盤上添加日志文件。
-
完成或取消長時間運行的事務。
下列部分介紹了這些備選方法。請選擇最適用於您情況的響應。
備份日志
在完整恢復模式或大容量日志恢復模式下,如果最近尚未備份事務日志,則請立即進行備份以免發生日志截斷。如果從未備份日志,則必須創建兩個日志備份,以允許數據庫引擎將日志截斷到上次的備份點。截斷日志可釋放空間以供新的日志記錄使用。若要防止日志再次填滿,請經常執行日志備份。
創建事務日志備份
![]() |
---|
如果數據庫被損壞,請參閱結尾日志備份。 |
釋放磁盤空間
您可以通過刪除或移動其他文件的方法來釋放包含數據庫事務日志文件的磁盤驅動器上的磁盤空間。釋放磁盤空間后,恢復系統將自動擴大日志文件。
將日志文件移至其他磁盤
增加日志文件的大小
如果日志磁盤上具有可用空間,則可以增加日志文件的大小。日志文件的最大大小是每個日志文件 2 TB。
增加文件大小
如果禁用自動增長,數據庫處於聯機狀態,並且磁盤上有足夠的可用空間,則可采用以下方法之一:
-
手動增加文件大小以生成單個增量。
-
使用 ALTER DATABASE 語句啟用自動增長以針對 FILEGROWTH 選項設置非零增量。
![]() |
---|
不管哪種情況,如果已達到當前大小限制,則應增加 MAXSIZE 值。 |
在其他磁盤上添加日志文件
使用 ALTER DATABASE <database_name> ADD LOG FILE,向具有足夠空間的其他磁盤上的數據庫中添加新日志文件。
添加日志文件
-
添加和刪除數據文件和事務日志文件 (Transact-SQL)
標識和管理長時間運行的事務
有關詳細信息,請參閱管理長時間運行的事務。