2010/07/01

清除 SQL replication DB 的 log 檔案

MS SQL 的 log 檔很煩,一般情況下,可以用以下指令騰出空間:

backup log [dbname] with truncate_only

use [db]
dbcc shrinkfile ([dbname_log], size)

可是,如果這個 db 是從另一台 SQL server 複寫而來的,執行 backup log 指令時,會出現以下錯誤訊息:
"The log was not truncated because records at the beginning of the log are pending replication. Ensure the Log Reader Agent is running or use sp_repldone to mark transactions as distributed."
即使刪掉 replication 設定也沒用。

後來找了一下,發現以下方法:
(1) sp_replicationdboption 'database name','publish',true
(2) EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0,    @time = 0, @reset = 1
(3) sp_replicationdboption 'database name','publish',false
確認沒有 replicated transactions :
(4) dbcc traceon(3604)
(5) dbcc opentran

就可以縮小 log 檔案了。

之後再重新設定 replication 就大功告成。

後記:似乎不是 replication 而來的 db 會有這個問題。因為今天可以直接執行 backup log 指令,另外一台 db 也可以。所以我也不知道原來為何不行。總之,之後如果再遇到一樣的問題,就這樣解決就對了,人生還有很多有趣的事情,不用在這裡浪費時間啊!

沒有留言:

張貼留言