搜尋本站文章

2009-06-12

縮小 壓縮 交易記錄檔 (Shrink Transaction Log);以使用 SQL Server 2008/2005 SSMS 管理工具 為例

若您的資料庫因故造成交易記錄檔(Transaction Log,*.ldf)遠大於,資料檔案(例如:*.mdf)時,請參考下圖所示:






資料檔案才 10 MB,但是交易記錄檔卻已經成長為 1 GB。
那要如何 縮小 壓縮 交易記錄檔呢?




本文以使用 SQL Server 2008/2005 SSMS 管理工具為例做討論,請參考以下的方式:

工作1. 截斷交易記錄檔
1. 執行 SSMS 管理工具。在「物件總管」,展開「資料庫」,點選目標資料庫。
2. 滑鼠右鍵,選擇「屬性」。

3. 在「資料庫屬性」視窗,執行以下的參數:
在左邊的「選取頁面」窗格,點選「選項」。
在右邊的「復原模式」方塊,選擇「簡單」。



點選「確定」,關閉「資料庫屬性」視窗。
切換到「簡單」復原模式,系統就會對此資料庫執行截斷交易記錄檔之作業。




在上圖中,可以觀察到交易記錄檔雖然仍佔用 1 GB 的磁碟空間,但實際的空間使用率卻是很低,幾乎都沒有包含資料。



造成無法截斷的原因可能很多,例如:仍有交易在執行中等。所以若您發覺無法及時截斷交易記錄檔,請稍待一下,或許等交易完成後,就可以截斷交易記錄檔。
若等待許久或執行數次後都無法截斷交易記錄,建議您可以查詢系統檢視 sys.databases 中的 log_reuse_wait_desc 資料行的描述說明,找出為何無法截斷的可能因素。



工作2. 壓縮交易記錄檔(Shrink )

1. 執行 SSMS 管理工具。在「物件總管」,展開「資料庫」,點選目標資料庫。
2. 滑鼠右鍵,選擇「屬性」。

3. 在「資料庫屬性」頁面,執行以下選項:
在左邊的「選取頁面」,點選「檔案」。
在右邊的「資料庫檔案」區域,在「檔案類型」區域,點選「記錄檔」的交易記錄檔案。
在「初始大小(MB)」區域下,直接輸入預期縮小下來後的大小,例如:25。這表示將交易記錄檔縮小為 25 MB。




點選「確定」,關閉「資料庫屬性」視窗。



提醒您:
在某些情境,您可以無法縮小為預期的大小。
原因如下:
交易記錄檔的壓縮限制是固定的。記錄中的虛擬記錄檔大小決定了可縮減的大小。
因此,記錄檔絕不能壓縮成比虛擬記錄檔還小。此外,記錄檔縮減的累加單位即等於虛擬記錄檔的大小。

例如,1 GB 的交易記錄檔可由五個 200 MB 的虛擬記錄檔所組成。壓縮交易記錄檔會刪除未使用的虛擬記錄檔,但至少會留下二個虛擬記錄檔。
因為在這個範例中,每個虛擬記錄檔的大小為 200 MB,所以交易記錄最多只能縮小成 400 MB,且一次只能增量 200 MB。

若想要能夠將交易記錄檔的大小縮減,請建立一個小型的交易記錄檔,然後讓它自動擴充,而不要一次就建立一個大型的交易記錄檔。

壓縮交易記錄檔
http://technet.microsoft.com/zh-tw/library/ms178037.aspx

可能會延遲記錄截斷的因素
http://technet.microsoft.com/zh-tw/library/ms345414.aspx



若真無法縮小交易記錄檔,還有以下的變通作法,但資料庫需要離線作業,方法如下:

1. 使用 SSMS 管理工具,「卸離」此資料庫。
2. 利用檔案總管,修改此交易記錄檔案的名稱。

3. 再度使用 SSMS 管理工具,「附加」此資料庫。
在「附加資料庫」視窗,在右下方的窗格內,選取指定的「記錄檔」之資料列,在「訊息」區域,也會被標示為「找不到」。
點選下方的「移除」,刪除此「記錄檔」。






再點選「確定」,進行附加資料庫作業。




觀察檔案大小:





若是為 SQL Server 2005 的 SSMS 管理工具,則採用以下的方式來壓縮交易記錄檔(Shrink )


1. 執行 SSMS 管理工具。在「物件總管」,展開「資料庫」,點選目標資料庫。
2. 滑鼠右鍵,選擇「工作」\「壓縮」\「檔案」。

3. 在「壓縮檔案」視窗,執行以下參數:
在「檔案類型」方塊,下拉選取「記錄檔」。
在「檔案名稱」方塊,確認這是要縮小的交易記錄檔。
在「壓縮動作」區域,點選「釋放未使用的空間之前,先重新組織頁面」選項,在「將檔案壓縮為」方塊,輸入預期縮小下來後的大小。



再點選「確定」,進行壓縮作業。



參考資料:
交易記錄檔已滿、爆掉;截斷交易記錄檔。(The transaction log for database 'DB1' is full. ;Transaction Log Truncation)
http://sharedderrick.blogspot.com/2009/03/transaction-log-for-database-is-full.html

壓縮交易記錄檔
http://technet.microsoft.com/zh-tw/library/ms178037.aspx

可能會延遲記錄截斷的因素
http://technet.microsoft.com/zh-tw/library/ms345414.aspx