如何在 sql server 2005 中使用 dbcc shrinkfile 語句收縮事務日誌文件

 
簡介
在 microsoft sql server 2005 中,您可以收縮數據庫中的事務日誌文件以刪除未使用的頁面。數據庫引擎將有效地重新使用空間。但是,當事務日誌文件意外增長時,可能必須要手動收縮事務日誌文件。
本文介紹如何在 sql server 2005 數據庫中在完整恢復模式下使用 dbcc shrinkfile 語句手動收縮事務日誌文件。您在 sql server 2005 中用於收縮事務日誌文件的方法可能與在 sql server 2000 中用於收縮事務日誌文件的方法有所不同。 有關如何在 sql server 2000 中收縮事務日誌文件的更多信息,請單擊下面的文章編號,以查看 microsoft 知識庫中相應的文章:
272318 ([url]http://support.microsoft.com/kb/272318/[/url]) inf:使用 dbcc shrinkfile 收縮 sql server 2000 中的事務日誌
回到頂端
更多信息
在 sql server 2005 中,收縮操作 (dbcc shrinkfile) 會立即嘗試將指定的事務日誌文件收縮爲要求的大小。要在完整恢復模式下手動收縮事務日誌文件,請首先備份事務日誌文件。然後,使用 dbcc shrinkfile 語句收縮該事務日誌文件。
通常,在 sql server 2005 中收縮事務日誌文件比在 sql server 2000 中收縮事務日誌文件要快。原因是 sql server 2005 日誌管理器會根據物理磁盤存儲順序創建或重新使用非活動的虛擬日誌文件。因此,事務日誌文件的非活動部分通常位於文件的末尾。
例如,事務日誌文件可能包含 100 個虛擬日誌文件,但僅使用 2 個虛擬日誌文件。sql server 2000 會將使用的第一個虛擬日誌文件存儲在事務日誌文件的開頭,將使用的第二個虛擬日誌文件存儲在事務日誌文件的中間。爲了將事務日誌文件僅收縮爲 2 個虛擬日誌文件,sql server 將使用虛擬日誌項填充第二個虛擬日誌文件的剩餘部分。sql server 會將邏輯日誌的開頭移到日誌管理器指定的下一個可用的虛擬日誌文件中。日誌管理器可能會在事務日誌文件的中間、上一個活動的虛擬日誌文件之前創建一個虛擬日誌文件。在這種情況下,必須使用多個日誌備份操作和多個收縮操作才能成功地將事務日誌文件收縮爲 2 個虛擬日誌文件。最糟糕的情況是,您可能必須使用 50 個日誌備份操作和 50 個收縮操作才能成功地將事務日誌文件收縮爲 2 個虛擬日誌文件。
不過,在 sql server 2005 中,您執行一個 dbcc shrinkfile 語句就可以立即將事務日誌文件收縮爲 2 個虛擬日誌文件。這是因爲 sql server 2005 日誌管理器按照物理磁盤存儲順序創建了 2 個虛擬日誌文件。這兩個虛擬日誌文件都位於事務日誌文件的開頭。
當您嘗試在 sql server 2005 中收縮可用空間很小的事務日誌文件時,必須執行另一個日誌備份操作。這個附加的日誌備份操作會將事務日誌文件截斷爲較小的大小。在 sql server 2000 中收縮事務日誌文件時,除了要執行上述三個步驟外,還要執行此日誌備份操作。有關更多信息,請參閱“簡介”一節提到的 microsoft 知識庫文章。要在 sql server 2005 中收縮可用空間很小的事務日誌文件,請按照下列步驟操作:1. 備份事務日誌文件,以使大多數活動虛擬日誌文件處於非活動狀態。因此,可在以後的步驟中刪除非活動的虛擬日誌文件。爲此,請運行與以下 transact-sql 語句相似的 transact-sql 語句。backup log <databasename> to disk = '<backupfile>'
注意:在此語句中,<databasename> 是要備份的數據庫名稱的佔位符。在此語句中,<backupfile> 是備份文件完整路徑的佔位符。
例如,運行以下 transact-sql 語句。backup log testdb to disk='c:\testdb1.bak'

2. 收縮事務日誌文件。爲此,請運行與以下 transact-sql 語句相似的 transact-sql 語句。dbcc shrinkfile (<filename>, <targetsize>) with no_infomsgs
注意:在此語句中,<filename> 是事務日誌文件名稱的佔位符。在此語句中,<targetsize> 是事務日誌文件目標大小的佔位符。目標大小必須合理。例如,您不能將事務日誌文件收縮爲小於 2 個虛擬日誌文件的大小。
3. 如果 dbcc shrinkfile 語句未將事務日誌文件收縮爲目標大小,則運行步驟 1 中提到的 backup log 語句,以使更多的虛擬日誌文件處於非活動狀態。
4. 運行步驟 2 中提到的 dbcc shrinkfile 語句。執行此操作後,事務日誌文件就應接近目標大小了。
總而言之,在 sql server 2005 中更改了日誌管理器用於選取下一個虛擬日誌文件的算法。因此,在 sql server 2005 中收縮事務日誌文件與在 sql server 2000 中收縮事務日誌文件不同,具體表現在: • 如果日誌文件具有大量可用空間,在 sql server 2005 中收縮事務日誌文件比在 sql server 2000 中收縮事務日誌文件要快。
• 如果日誌文件沒有可用空間,在 sql server 2005 中收縮事務日誌文件與在 sql server 2000 中收縮事務日誌文件相同。
• 如果日誌文件的可用空間很小,在 sql server 2005 中收縮事務日誌文件要比在 sql server 2000 中執行此操作時多執行一個日誌備份操作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章