您目前已離線,請等候您的網際網路重新連線

如何在 SQL Server 2005 中使用 DBCC SHRINKFILE 陳述式壓縮交易記錄檔

簡介
在 Microsoft SQL Server 2005 中,您可以壓縮資料庫中的交易記錄檔,以移除未使用的頁面。資料庫引擎會有效地重複使用空間。但是,當交易記錄檔意外地變大時,您可能必須手動壓縮交易記錄檔。

本文將告訴您,如何在 SQL Server 2005 資料庫的完整復原模式下,使用 DBCC SHRINKFILE 陳述式來手動壓縮交易記錄檔。您在 SQL Server 2005 中壓縮交易記錄檔的方法可能和在 SQL Server 2000 中不一樣。 如需有關如何在 SQL Server 2000 中壓縮交易記錄檔的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
272318INF:Shrinking the transaction log in SQL Server 2000 with DBCC SHRINKFILE
其他相關資訊
在 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 陳述式。
    BACKUP LOG <DatabaseName> TO DISK = '<BackupFile>'
    注意 在這個陳述式中,<DatabaseName> 是您正在備份的資料庫名稱的預留位置。在這個陳述式中,<BackupFile> 是備份檔案的完整路徑的預留位置。

    例如,請執行下列 Transact-SQL 陳述式。
    BACKUP LOG TestDB TO DISK='C:\TestDB1.bak'
  2. 壓縮交易記錄檔。如果要執行這項操作,請執行類似於下列的 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 中沒有的。
参考
如需詳細資訊,請參閱《SQL Server 2005 線上叢書》的下列主題:
  • <壓縮交易記錄檔>(Shrinking the transaction log)
  • <DBCC SHRINKFILE (Transact-SQL)>
  • <截斷交易記錄檔>(Truncating the transaction log)
T-LOG
內容

文章識別碼:907511 - 最後檢閱時間:07/16/2013 08:13:00 - 修訂: 2.2

  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • kbsqldeveloper kbsql2005engine kbinfo KB907511
意見反應