2013-12-20 73 views
1

我有SQL Server上的ldf文件在4-5天內增長到超過30GB的場景。由於這提出了空間上的潛在問題(硬盤有點超過250GB),我搜索了一些解決方案,但感到困惑,因爲我發現任何關於ldf文件縮小的問題都說它會再次增長。一種解決方案是定期執行此操作,但我不確定它是否會對您有所幫助。是否有可能以某種方式固定ldf文件的最大大小,然後SQL Server中的老版本記錄會自動刪除?保持ldf文件的大小在一定的限制下

如果這聽起來不太好,請分享一些想法,我應該如何管理?什麼是最佳行動方案?

在此先感謝!

+0

您需要查看**事務日誌備份!** –

+0

數據庫中有哪些恢復模式? –

+0

一個是簡單的,另一個是完整的。 –

回答

3

這種情況有兩種情況。

場景1 - 數據庫處於簡單恢復狀態,並且存在增長事務日誌的大型進程。在這種情況下,可以做的事情不多,但可以保留最大尺寸的事務日誌,並儘可能升級驅動器空間。

場景2(很有可能) - 您的數據庫處於完全恢復模式,並且沒有配置事務日誌備份。一個好的備份做法是每日完整備份(如果您的數據庫不太大)以及每小時一次的事務日誌備份。在完成完整備份後,進行良好的事務日誌備份後,您可以縮小事務日誌。

下面是一些代碼,可以幫助:

收縮事務日誌 -MSDN

DBCC SHRINKFILE (LogicalLogName, SizeInMB) 

正在被多少事務日誌的使用 -

USE DatabaseName 
GO 

DBCC SQLPERF (logspace) 

如果您發現在收縮文件的事務日誌之後ize是相同的,請嘗試在事務日誌設置中手動調整文件大小。或者,您可以將數據庫設置爲簡單恢復,然後恢復爲完全恢復。雖然後者會打破您的事務日誌備份,直到下一次完整備份。

+0

感謝這個答案,我打算做類似的事情。我的想法是將日誌置於簡單恢復模式,然後縮小它們並限制文件在磁盤上的最大大小。 我的另一個問題是會構成一些長期問題?我必須在此討論中補充說,數據庫本身僅用作中間件,插入到數據庫中的數據由另一個應用程序處理並存儲在由專家維護的完全不同的系統上,以便數據在那裏安全。 –

+0

所以這聽起來像數據不需要經常備份。我認爲你的計劃很好。但是請記住,即使數據庫處於簡單模式,事務仍然正在寫入事務日誌。如果您有一個大進程發生,它將不會寫入檢查點,直到該進程完成。在寫入檢查點之前,tlog不會被截斷。例如,如果我編寫查詢以刪除100萬行,它將在檢查點出現之前將所有100萬行寫入事務日誌,即使在簡單模式下也是如此。 – tonyd

+0

感謝您提供這些附加信息。據我所知,在這些數據庫上沒有發生這麼大的事務,所以現在我沒有看到潛在的問題。然而,我試圖假設如果這樣的大事務得到執行並且爲日誌文件設置了相當高的限制,會造成多大的問題。 其他問題是,我可以以某種方式計算或至少得到模糊的近似值交易將需要多少空間?我認爲沒有簡單的公式。 –