寫滿交易記錄疑難排解 (錯誤 9002)

本主題將討論對於寫滿交易記錄的可能回應,並建議將來可採用的避免方法。當交易記錄寫滿時,SQL Server Database Engine 就會發出 9002 錯誤。此記錄可能會在資料庫處於線上或復原狀態時填滿。如果此記錄是在資料庫處於線上狀態時填滿,資料庫會保持線上狀態,不過只能讀取而無法更新資料庫。如果此記錄是在復原期間填滿,則 Database Engine 會將資料庫標示為 RESOURCE PENDING。不論是哪一種情況,使用者都必須採取動作,以便提供足夠的記錄空間。

[!附註]

一般而言,當交易記錄用完磁碟空間時,您仍然可以用唯讀模式存取資料庫。不過,啟用快照隔離等級時,如果您要刪除堆積 (沒有叢集索引的資料表) 上的資料列,而且交易記錄在系統保存準刪除列的記錄檔記錄之前已滿,資料庫就會離線。如果發生這種情況,資料庫將自動重新啟動、進行完整復原,然後重新上線。

寫滿交易記錄的回應

寫滿交易記錄的適當回應會部分根據導致記錄填滿的條件而定。若要探索指定情況下無法進行記錄截斷的原因,請使用 sys.database 目錄檢視的 log_reuse_waitlog_reuse_wait_desc 資料行。如需詳細資訊,請參閱<sys.databases (Transact-SQL)>。如需可能延遲記錄截斷之其他因素的描述,請參閱<可能會延遲記錄截斷的因素>。

重要事項重要事項

如果發生 9002 錯誤時資料庫處於復原狀態,請在解決問題後,使用 ALTER DATABASE database_name SET ONLINE 來復原資料庫。

寫滿交易記錄的替代回應方式包括:

  • 備份記錄。

  • 釋出磁碟空間,使記錄可以自動成長。

  • 將記錄檔移動到空間足夠的磁碟機。

  • 增加記錄檔的大小。

  • 在不同的磁碟上加入記錄檔。

  • 完成或刪除長時間執行的交易。

這些替代方式將於下列各節中討論。請選擇最適合您情況的回應。

備份記錄

在完整復原模式或大量記錄復原模式下,如果最近尚未備份交易記錄,備份可能就是阻止記錄截斷的主因。如果記錄從未備份過,您就必須建立兩個記錄備份,以便讓 Database Engine 將記錄截斷至上次備份的時間點。截斷記錄可針對新記錄檔的記錄釋出空間。若要防止記錄檔再度被填滿,請經常備份記錄檔。  

建立交易記錄備份

重要事項重要事項

如果資料庫已損毀,請參閱<結尾記錄備份>。

釋出磁碟空間

您可以透過刪除或移動其他檔案,在包含資料庫交易記錄檔的磁碟機上釋出磁碟空間。釋出的磁碟空間會讓復原系統自動加大記錄檔。

將記錄檔移至不同的磁碟

如果無法在目前包含記錄檔的磁碟機上,釋出足夠的磁碟空間,請考慮將檔案移動到有足夠空間的其他磁碟機。

重要事項重要事項

記錄檔絕不可放在壓縮檔案系統上。

移動記錄檔

增加記錄檔的大小

如果記錄磁碟上還有可用空間,您就可以增加記錄檔的大小。記錄檔大小的最大值是每個記錄檔 2 TB。

若要增加檔案大小

如果已停用自動成長、資料庫在線上,而且磁碟上有足夠的可用空間,請執行下列其中一項動作:

  • 手動增加檔案大小以產生單一成長遞增。

  • 使用 ALTER DATABASE 陳述式,設定 FILEGROWTH 選項的非零成長遞增,藉以開啟自動成長。

[!附註]

無論是哪一種情況,如果已達到目前的大小限制,都需增加 MAXSIZE 值。

在不同的磁碟上加入記錄檔

使用 ALTER DATABASE <database_name> ADD LOG FILE,在含有足夠空間的不同磁碟上加入資料庫的新記錄檔。

加入記錄檔

識別並管理長時間執行的交易

如需詳細資訊,請參閱<管理長時間執行的交易>。