SQLServer 數據庫日誌無法收縮

1.  查看日誌信息

DACC LOGINFO(‘數據庫名稱’)

Status=0:該狀態的日誌代表已經備份到磁盤的日誌文件。

Status=2: 該狀態是日誌還沒有備份。這樣的狀態下日誌時無法減小的。

2.  查看日誌截斷延遲的原因

活躍(active)的日誌無法通過收縮來截斷,有各種原因會使日誌截斷延遲,具體表現就是事務日誌的物理文件無法通過截斷、收縮來減小,通過下面的代碼可以看到實力上每個數據庫的日誌截斷延遲原因:

use  master

go

select  name,database_id,log_reuse_wait,log_reuse_wait_desc

from  sys.databases

原因解釋:

NOTHING:當前有一個或多個可重複使用的虛擬日誌文件。

CHECKPOINT:自上次日誌截斷後,尚未出現檢查點,或者日誌頭部尚未跨一個虛擬文件移動。

LOG_BACKUP: 需要日誌備份,以將日誌頭部前移(適合完全模式或大容量日誌模式)

ACTIVE_BACKUP_OR_RESTORE: 數據備份或還原正在進行。

ACTIVE_TRANSACTION: 事務處於活動狀態(所有的恢復模式)。

DATABASE_MIRRORING: 數據庫鏡像暫停,或者在高性能模式下,鏡像數據庫明顯滯後於主體數據庫

REPLICATION:在事務複製過程中,與發佈相關的事務仍未傳遞到分發數據庫。

DATABASE_SNAPSHOT_CREATION:正在創建數據庫快照。

LOG_SCAN: 正在進行日誌掃描。

3.  針對延遲日誌截斷原因的部分解決方案:

LOG_BACKUP: 備份日誌後在執行即可

Backup  log  database  with  nolog

REPLICATION:

解決方法:給標有replication 的數據庫任意一個表創建事務複製,然後刪除,再執行收縮就OK啦。(注:這是數據庫的一個BUG)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章