Sql-Server-2005

縮小鏡像生產數據庫上事務日誌文件的最簡單方法

  • May 1, 2015

在鏡像生產數據庫上縮小事務日誌文件的最簡單方法是什麼?

我必須這樣做,因為我的磁碟空間快用完了。

在執行此操作之前,我將進行完整的數據庫備份,因此我不需要從事務日誌中保留任何內容(對嗎?我每天都有完整的數據庫備份,可能永遠不需要時間點恢復,儘管我會保留如果可以的話,打開選項 - 這就是 .ldf 的全部用途,對嗎?)。

已解決:

好的,在通過 SSMS(不是 TSQL)僅對日誌進行 2 次備份後,創建了一個全新的備份集,SSMS 中的 Shrink-Files-Log 對話框終於真正起作用了,釋放了一些磁碟空間。

不知道為什麼需要 2 次備份,或者為什麼 TSQL 不起作用,並且在收縮對話框中報告的“可回收空間”沒有差異(第一次備份後所有收縮嘗試的比例為 99%也是,但仍然沒有釋放任何空間),但問題現在解決了。謝謝大家。

使用您覺得最舒服的任何方法進行事務日誌備份。

這將導致已經送出到數據庫的事務日誌從磁碟中刪除。理想情況下,您實際上應該創建一個數據庫維護任務來定期為您執行此操作 - 消除舊的事務日誌,這樣您就不會填滿磁碟。

根據你的問題的另一點……不,不是真的。是的,他們執行那個功能,但不僅僅是那個功能。

數據庫不會像其他文件那樣以傳統方式備份(或寫入),因為數據庫文件本身一直在使用並不斷變化。因此,單個“時間點”備份要麼需要使數據庫離線以將其“凍結”在一致狀態,要麼導致備份的不同部分包含與備份開始時不同的數據。

事務日誌是數據庫執行的每個“事務”的記錄。不是每次更改、更新、添加、刪除等記錄時都寫入數據庫文件,而是將這些操作寫入單獨的文件,事務日誌,然後在 SQL 伺服器確定它是安全的時送出到數據庫文件中在不停止任何活動的情況下這樣做。因此,事務日誌實際上是對數據庫的更改在它們實際成為對數據庫的更改之前所在的位置

$$ file $$. 因此,如果您需要返回給定的數據庫狀態或時間點,事務日誌將被“重放”。本質上,不是複製文件數據,而是轉到為數據庫找到的最新時間點狀態,然後執行使數據庫達到指定狀態的所有相同操作

$$ later $$狀態。但是,重要的是要注意,在任何給定時間,您的事務日誌都將包含尚未送出到數據庫的事務。因此,它們不僅僅是執行時間點恢復的能力。他們包含$$ some $$正在或即將對數據庫進行的更改。 這就是為什麼您必須在清除事務日誌之前進行備份的原因——一旦備份完成,系統就有一個數據庫的時間點副本以供將來任何恢復時參考,並且能夠確定哪些事務有已送出到數據庫,而哪些還沒有。有了這些資訊,系統就知道要為您刪除哪些過時的事務日誌,哪些不應該刪除。

但是,這可能需要一些時間,具體取決於事務日誌的大小。如果您以前從未做過,請做好準備,這將需要一段時間。

引用自:https://serverfault.com/questions/422737