簡介在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 中執行此操作時多執行一個日誌備份作業。