回滾事務日誌檔案中的事務
問:怎樣使用transact-sql回滾某個位於事務日誌檔案中的事務(例如,id 0000:0010a183)?
答:出於預防資料錯誤的考慮,sql server並不支援個別事務的回滾。舉例來說,假設兩個事務t1和t2使用現金餘額域。t1新增了500美金,t2使用更新後的值進行了某個操作。如果回滾t1,則t2可能是錯誤的。但是,您可以使用時間戳或事務日誌標記將日誌恢復至預定義的標記或時間點。以下兩個例子說明了如何使用sql server 2000語法。
使用以前的完全備份恢復資料庫,並使其為日誌恢復做好準備。
restore database pubs from disk = n'c:/backups/fullbackup.bak' with norecovery現在您可以將日誌前滾到合適的時間點,並使資料庫可供使用。請注意,stopat在資料庫正在執行大容量日誌時禁止執行。
restore log pubs from disk=n'c:/backups/logbackup.bak' with recovery,stopat='02/11/2002 17:35:00'在事務日誌中置入乙個標記。請注意,被標記的事務至少須提交乙個更新,以標記該日誌。
begin tran mymark with mark按照您常用的方法備份事務日誌。update pubs.dbo.lastlogmark set marktime = getdate()
commit tran mymark
backup log pubs to disk='c:/backups/fullbackup.bak' with init現在您可以將資料庫恢復至日誌標記點。首先恢復資料庫,並使其為接受日誌恢復做好準備。
restore database pubs from disk=n'c:/backups/fullbackup.bak' with norecovery現在將日誌恢復至包含該標記的時間點,並使其可供使用。請注意,stopat在資料庫正在執行大容量日誌時禁止執行。
restore log pubs from disk=n'c:/backups/logbackup.bak' with recovery,stopat='02/11/2002 17:35:00'
事務日誌回滾機制研究
摘要 隔離級別的概念 企業級的資料庫每一秒鐘都可能應付成千上萬的併發訪問,因而帶來了併發控制的問題。由資料庫理論可知,由於併發訪問,在不可預料的時刻可能引發如下幾個可以預料的問題 髒讀 包含未提交資料的讀取。例如,事務1 更改了某行。事務2 在事務1 提交更改之前讀取已更改的行。如果事務1 回滾更改...
事務日誌回滾機制研究
摘要 隔離級別的概念 企業級的資料庫每一秒鐘都可能應付成千上萬的併發訪問,因而帶來了併發控制的問題。由資料庫理論可知,由於併發訪問,在不可預料的時刻可能引發如下幾個可以預料的問題 髒讀 包含未提交資料的讀取。例如,事務1 更改了某行。事務2 在事務1 提交更改之前讀取已更改的行。如果事務1 回滾更改...
事務日誌回滾機制研究
摘要 隔離級別的概念 企業級的資料庫每一秒鐘都可能應付成千上萬的併發訪問,因而帶來了併發控制的問題。由資料庫理論可知,由於併發訪問,在不可預料的時刻可能引發如下幾個可以預料的問題 髒讀 包含未提交資料的讀取。例如,事務1 更改了某行。事務2 在事務1 提交更改之前讀取已更改的行。如果事務1 回滾更改...