SQL Server DB Log 異常處理
突然發生的一個問題,SQL Server裡的某一個DB Log異常增大,導致系統整個無法提供服務,整個Log檔居然有20多G這麼大
磁碟空間僅剩幾百K左右,先撇開為何Log會何會一夕間變大(有可能是程式問題而連帶造成的影響),首要必須先設法讓系統可以恢復
正常運作,解決方法如下
1.利用以下SQL Command進行處理
BACKUP LOG DBName WITH TRUNCATE_ONLY [進行手動強制截斷交易記錄的動作,根據MSDN的說明,此一動作是非不得下的下下策,註1]
DBCC SHRINKFILE(DBName_LOG,2) [進行壓縮資料庫中的交易記錄檔,移除未使用的頁面,並重新設定Log下限大小,註2]
2.馬上做一次完整備份 [由於第一個動作已經把交易記錄裡的記錄鍵給截斷了,因此重新做一次完整已確保資料庫萬一出問題時可以再復原]
3.重新設定Log檔案大小的上限 [這個我想當初應該沒有注意到,以致於Log無上限的長大,直到磁硬空間幾乎滿了]
註1:
MSDN的說明
參數TRUNCATE_ONLY,未來的 SQL Server 版本將移除這個選項。請避免在新的開發工作中使用這個選項,對於目前在使用這個選項的應用程式,請規劃修改它。
只能用於 BACKUP LOG 陳述式,可執行檢查點手動強制截斷交易記錄。NO_LOG 和 TRUNCATE_ONLY 是同義字。您並不需要指定備份裝置,因為記錄並不會加以備份。
在簡單復原模式下,執行檢查點會移除非使用中的記錄部分,而不需製作備份副本。如此,捨棄使用中記錄以外的所有記錄,便會截斷記錄。這個選項會釋放空間,但可能會有資料
遺失的風險。利用 NO_LOG 或 TRUNCATE_ONLY 來截斷記錄之後,記錄檔截斷部分中所記錄的變更必須等到下一次資料庫備份才可復原。因此,為了能夠復原,在使用上述任一選項
之後,請立即執行 BACKUP DATABASE 來取得完整備份或差異資料庫備份。
MSDN:
http://msdn.microsoft.com/zh-tw/library/ms186865(SQL.90).aspx
http://msdn.microsoft.com/zh-tw/library/ms189085(v=SQL.90).aspx
註2:
MSDN:
http://support.microsoft.com/kb/907511/zh-tw
http://msdn.microsoft.com/zh-tw/library/ms189493.aspx
By No.18