SQL SERVER 日志已滿的處理方法 (轉)


事務日志文件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_LOG

2.截斷事務日志:

BACKUP   LOG   數據庫名   WITH   NO_LOG

3.收縮數據庫文件(如果不壓縮,數據庫的文件不會減小

企業管理器–右鍵你要壓縮的數據庫–所有任務–收縮數據庫–收縮文件
–選擇日志文件–在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了
–選擇數據文件–在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了
 
也可以用SQL語句來完成
–收縮數據庫
DBCC   SHRINKDATABASE(客戶資料)
–收縮指定數據文件,1是文件號,可以通過這個語句查詢到:select   *   from   sysfiles
DBCC   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)
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM