交易記錄檔Transaction Log File是用來記錄資料庫更新情況的檔案,副檔名為ldf。
在 SQL Server 7.0 和 SQL Server 2000 中,如果設定了自動成長功能,交易記錄檔將會自動擴充。
一般情況下,在能夠容納兩次交易記錄截斷之間發生的最大數量的事務時,交易記錄的大小是穩定的,交易記錄截斷由檢查點或者交易記錄備份觸發。
然而,在某些情況下,交易記錄可能會變得非常大,以致用盡空間或變滿。通常,在交易記錄檔佔盡可用磁碟空間且不能再擴充時,您將收到如下錯誤訊息:
Error:9002, Severity:17, State:2
The log file for database ’%.*ls’ is full.
除了出現此錯誤訊息之外,SQL Server 還可能因為缺少交易記錄擴充空間而將資料庫標記為 SUSPECT。有關如何從此情形中恢複的其他資訊,請參見 SQL Server 線上說明中的“磁碟空間不足”主題。
另外,交易記錄擴充可能導致下列情形:
· 非常大的交易記錄檔。
· 事務可能會失敗並可能開始復原。
· 事務可能會用很長時間才能完成。
· 可能發生效能問題。
· 可能發生阻塞現象。
原因
交易記錄擴充可能由於以下原因或情形而發生:
· 未提交的事務
· 非常大的事務
· 操作:DBCC DBREINDEX 和 CREATE INDEX
· 在從交易記錄備份還原時
· 用戶端應用程式不處理所有結果
· 查詢在交易記錄完成擴充之前逾時,您收到假的“Log Full”錯誤訊息
· 未複製的事務
解決方案
記錄檔滿而造成SQL資料庫無法寫入檔案時,可用兩種方法:
一種方法:清空日誌。
1.開啟查詢分析器,輸入命令
DUMP TRANSACTION 資料庫名 WITH NO_LOG
2.再開啟企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮檔案--選擇記錄檔--在收縮方式裡選擇收縮至XXM,這裡會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。
另一種方法有一定的風險性,因為SQL SERVER的記錄檔不是即時寫入資料庫主檔案的,如處理不當,會造成資料的損失。
1: 刪除LOG
分離資料庫 企業管理器->伺服器->資料庫->右鍵->分離資料庫
2:刪除LOG檔案
附加資料庫 企業管理器->伺服器->資料庫->右鍵->附加資料庫
此法產生新的LOG,大小隻有500多K。
注意:建議使用第一種方法。
如果以後,不想要它變大。
SQL2000下使用:
在資料庫上點右鍵->屬性->選項->故障恢複-模型-選擇-簡單模型。
或用SQL語句:
alter database 資料庫名 set recovery simple
另外,如中資料庫屬性有兩個選項,與交易記錄的增長有關:
Truncate log on checkpoint
(此選項用於SQL7.0,SQL 2000中即故障恢複模型選擇為簡單模型)
當執行CHECKPOINT 命令時如果交易記錄檔超過其大小的70% 則將其內容清除在開發資料庫時時常將此選項設定為True
Auto shrink
定 期對資料庫進行檢查當資料庫檔案或記錄檔的未用空間超過其大小的25%時,系統將會自動縮減檔案使其未用空間等於25% 當檔案大小沒有超過其建立時的初始大小時不會縮減檔案縮減後的檔案也必須大於或等於其初始大小對交易記錄檔的縮減只有在對其作備份時或將 Truncate log on checkpoint 選項設為True 時才能進行。
注意:一般建立立的資料庫預設屬性已設好,但碰到意外情況使資料庫屬性被更改,請使用者清空日誌後,檢查資料庫的以上屬性,以防交易記錄再次充滿。
/***************************************/
今天早上一看伺服器硬碟沒有空間了,細查資料庫日誌達18G 運行上次在網上找的文章修改資料庫日誌大小,,提示”資料庫city日誌已滿。請備份該資料庫的交易記錄以釋放一些日誌空間。” 網上查了下相關資料,找到下面這個最好用的,把原來的18g資料庫記錄檔壓縮到了100M 效果非常明顯.(本人只試過了前三步就OK了,後面的方法未驗證)–壓縮日誌及資料庫檔案大小/*–特別注意請按步驟進行,未進行前面的步驟,請不要做後面的步驟否則可能損壞你的資料庫.–*/1.清空日誌DUMP TRANSACTION
庫名 WITH NO_LOG2.截斷交易記錄:BACKUP LOG 資料庫名
WITH NO_LOG3.收縮資料庫檔案(如果不壓縮,資料庫的檔案不會減小企業管理器–右鍵你要壓縮的資料庫–所有任務–收縮資料庫–收縮檔案–選擇記錄檔–在收縮方式裡選擇收縮至XXM,這裡會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了–選擇資料檔案–在收縮方式裡選擇收縮至XXM,這裡會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了 也可以用SQL語句來完成–收縮資料庫DBCC SHRINKDATABASE(客戶資料)–收縮指定資料檔案,1是檔案號,可以通過這個語句查詢到:select * from sysfilesDBCC SHRINKFILE(1)4.為了最大化的縮小記錄檔(如果是sql 7.0,這步只能在查詢分析器中進行)a.分離資料庫:企業管理器–伺服器–資料庫–右鍵–分離資料庫b.在我的電腦中刪除LOG檔案c.附加資料庫:企業管理器–伺服器–資料庫–右鍵–附加資料庫此法將產生新的LOG,大小隻有500多K或用代碼:下面的樣本分離 pubs,然後將 pubs 中的一個檔案附加到當前伺服器。a.分離EXEC sp_detach_db @dbname = ‘pubs’b.刪除記錄檔c.再附加EXEC sp_attach_single_file_db @dbname = ‘pubs’,@physname = ‘c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf’5.為了以後能自動收縮,做如下設定:企業管理器–伺服器–右鍵資料庫–屬性–選項–選擇”自動收縮”–SQL語句設定方式:EXEC sp_dboption ‘資料庫名’, ‘autoshrink’, ‘TRUE’6.如果想以後不讓它日誌增長得太大企業管理器–伺服器–右鍵資料庫–屬性–交易記錄–將檔案增長限制為xM(x是你允許的最大資料檔案大小)–SQL語句的設定方式:alter database 資料庫名 modify file(name=邏輯檔案名稱,maxsize=20)