簡介
在 Microsoft SQL Server 2005 中,您可以收縮數據庫中的事務日志文件以刪除未使用的頁面。數據庫引擎將有效地重新使用空間。但是,當事務日志文件意外增長時,可能必須要手動收縮事務日志文件。
本文介紹如何在 SQL Server 2005 數據庫中在完整恢復模式下使用 DBCC SHRINKFILE 語句手動收縮事務日志文件。您在 SQL Server 2005 中用于收縮事務日志文件的方法可能與在 SQL Server 2000 中用于收縮事務日志文件的方法有所不同。 有關如何在 SQL Server 2000 中收縮事務日志文件的更多信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
272318 (http://support.microsoft.com/kb/272318/) 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 中執行此操作時多執行一個日志備份操作。
新聞熱點
疑難解答