標籤:des blog http io ar os 使用 sp 檔案
有一個SQL2012庫的日誌達到了100G左右,平時開發人員根本沒有做過交易記錄備份,而磁碟空間已經快滿了。所以,只能截斷它。但是,由於從2K8以後,SQL SERVER好像不再提供 truncate_only和no_log功能了,而這個伺服器的磁碟空間也不夠。所以,只能採用切換到簡單復原模式方式,來先將已經完成的事務truncate了。然後shrik記錄檔來回收空間了。
--查詢交易記錄的狀態,可以看到是LOG_BACKUP狀態,說明需要備份日誌。
--http://msdn.microsoft.com/zh-cn/library/ms190925.aspx#Truncation
select name,log_reuse_wait_desc from sys.databases
--查看LOG使用方式
dbcc sqlperf(LOGSPACE)--已經使用的百分比
dbcc loginfo --查看status列基本上都是2表示不可以重用,只有0時候才可以重新使用。
--切換到簡單復原模式
alter database test set recovery simple with no_wait--再次使用dbcc loginfo 查看,可以看到很多status原來是2的已經變為0.
--切回到FULL
alter database test set FULL simple with no_wait
--這個時候你可以試著插入資料,觀看status的值。你會發現它雖然恢複模型已經切回FULL,但是,它的交易記錄使用方式還是SIMPLE模式,也就是還可以重新使用已經提交日誌空間。這個時候,我們只有做一個全庫備份才可以真正切回FULL模式。(記得好像如果建立一個資料庫也有這個情況。只有建完以後,馬上做一個全庫備份以後,才是真正的FULL模式。)
--這個時候,如果你想通過shrink記錄檔來縮小檔案會發現不起做用。只有你做完以後記錄備份後,再去shrik才可以功能。
backup log test to disk=‘d:\test.log‘
DBCC SHRINKFILE (N‘Test_log‘ , 0, TRUNCATEONLY)
參考資料:
簡介資料庫記錄檔的增長
SQL Server 何時將“髒頁”回寫到硬碟
SQL SERVER 2012斷日誌