來源:巨靈鳥軟件 作者:進銷存軟件 發(fā)布:2014/5/20 瀏覽次數(shù):4532
1、事務(wù)日志文件
事務(wù)日志文件,擴展名為ldf,它是數(shù)據(jù)庫結(jié)構(gòu)中非常重要卻又常被忽視的部分。它是用來記錄數(shù)據(jù)庫更新情況的文件,它可以記錄針對數(shù)據(jù)庫的任何操作,并將記錄的結(jié)果保存到獨立的文件中。對于每一次數(shù)據(jù)庫更新的過程,事務(wù)日志文件都有非常全面的記錄。根據(jù)這些記錄可以恢復數(shù)據(jù)庫更新前的狀態(tài)。
2、作用
出于性能上的考慮,SQL Server將用戶的改動存入緩存中,這些改變會立即寫入事務(wù)日志,但不會立即寫入數(shù)據(jù)文件。事物日志會通過一個標記點來確定某個事物是否已將緩存中的數(shù)據(jù)寫入數(shù)據(jù)文件。當SQL Server重啟后,它會查看日志中最新的標記點,并將這個標記點后面的事物記錄抹去,因為這些事物記錄并沒有真正的將緩存中的數(shù)據(jù)寫入數(shù)據(jù)文件。這可以防止那些中斷的交易修改數(shù)據(jù)文件。
舉個例子,在一個銀行系統(tǒng)中,某個用戶需要轉(zhuǎn)帳。這個轉(zhuǎn)帳作業(yè)主要是通過兩個步驟來完成。第一個步驟就是扣減用戶帳戶中的金額; 第二個步驟是把錢轉(zhuǎn)入到另外一個用戶那里。現(xiàn)在如果在轉(zhuǎn)帳的過程中,第一步成功了,但是第二個步驟因為某種原因出錯了。如用戶提供的帳戶名字與實際轉(zhuǎn)帳的帳戶名字不符,則第二個操作就會失敗。此時整個轉(zhuǎn)帳操作就會以失敗而告終。但是現(xiàn)在的問題是,第一個扣減的動作在數(shù)據(jù)庫中已經(jīng)完成了。而實際卻是沒有轉(zhuǎn)帳成功,就造成了數(shù)據(jù)一致性的問題。實際過程中如果應用程序發(fā)出ROLLBACK 語句,或者數(shù)據(jù)庫引擎檢測到錯誤,就使用日志記錄回滾未完成的事務(wù)所做的修改。也就是說,當?shù)诙䝼操作失敗的話,應用程序要發(fā)出一個ROLLBACK 語句,利用事務(wù)日志回滾功能,恢復第一步的操作。也就是說,把扣減金額的操作進行恢復,從而實現(xiàn)數(shù)據(jù)的一致性。類似的應用,在數(shù)據(jù)庫開發(fā)過程中很頻繁。
3、事務(wù)日志的常見故障
一般情況下,在能夠容納兩次事務(wù)日志截斷之間發(fā)生的最大數(shù)量的事務(wù)時,事務(wù)日志的大小是穩(wěn)定的,事務(wù)日志截斷由檢查點或者事務(wù)日志備份觸發(fā)。
然而,在某些情況下,事務(wù)日志可能會變得非常大,以致用盡空間或變滿。通常,在事務(wù)日志文件占盡可用磁盤空間且不能再擴展時,您將收到如下錯誤消息:
Error:9002, Severity:17, State:2
The log file for database ’%.*ls’ is full.
除了出現(xiàn)此錯誤消息之外,SQL Server 還可能因為缺少事務(wù)日志擴展空間而將數(shù)據(jù)庫標記為 SUSPECT。有關(guān)如何從此情形中恢復的其他信息,請參見 SQL Server 聯(lián)機幫助中的“磁盤空間不足”主題。
來源:巨靈鳥 歡迎分享本文
上一個文章:了解SQL數(shù)據(jù)庫
下一個文章:備份和恢復數(shù)據(jù)庫