解決DB交易記錄檔過大的狀況

故事是這樣的,我發有公司內有一台SQL DB的備份壓縮資料檔異常的肥大,在回頭去確認線上的資料才發現該資料庫的交易記錄檔(.ldf)已經高達快80G,但該資料庫每天都有做full backup理論上會清掉交易記錄檔才對,當下為了解決問題於是先手動處理該狀況,作法如下

先把資料庫狀態從「完整」改成「簡單」

Snipaste_2020-03-02_09-37-27.png

然後先下指令看資料庫名稱

select * from sys.database_files
Snipaste_2020-03-02_11-12-02.png

接著下指令去壓縮,檔名部分就是改成上面看到的部分

DBCC SHRINKFILE (檔名 , 2)

通常做到這邊,.ldf這個檔案就會有效的被壓縮,不過我碰到的狀況剛好就不是如此

(此時突然想起,人生最重要的就是這個BUT…)

再繼續往下查,竟然發現該資料庫是在replication的狀態,因此這樣所以上面的指令才會失效

select name, recovery_model_desc, log_reuse_wait_desc from sys.databases
Snipaste_2020-03-02_11-16-36.png

所以可以透過下列指令來移除

EXEC sp_removedbreplication @dbname = '資料庫名稱'

完成後,再回頭去做DBCC SHRINKFILE,最後再把資料庫狀態改回「完整」即可

[1] [SQL Server] 解決log檔(ldf file)過度膨脹的實戰經驗
December 02, 2014

[2] [SQL][Troubleshooting]一值長大沒有辦法縮小的記錄檔

[3] [SQL] 交易記錄檔 LDF 太大 (趴兔) - 使用 DBCC Shrinkfile -