天天看點

活動事務日志以及事務的類型活動事務日志事務的送出與復原事務的分類

所謂活動事務日志,就是所有沒有送出的事務所産生的日志記錄,以及在它們之後的所有日志記錄。

如果一個事務還沒有送出,那它可以在任何時候復原。SQL Server必須做好這種準備,以便能夠從日志記錄中找回修改前的資料内容,完成復原。在SQL Server裡面,所有的日志記錄都有嚴格順序,中間不可以有任何跳躍。是以如果某個資料庫有沒有送出的事務,SQL Server會标記所有從這個事務開始的日志記錄(不管和這個事務有沒有關系)為活動事務日志 。這些日志記錄都有可能“需要”被用來做復原。

事務在送出前,所有的操作都是在虛拟的環境中進行的,事務送出時才将事務進行的所有修改更新到資料庫的存儲媒體上,如硬碟。在事務送出前,如果有操作失敗的情況,那麼需要進行復原操作,便可以取消事務所進行的修改,當事務被送出後,再執行復原是無效的。

實驗

<a></a>

一類是Explicit Transactions,另外一類是Implicit Transactions。

所謂的Explicit Transactions,就是我們需要在TSQL中顯式定義的事務,由BEGIN TRANSACTION開頭,由COMMIT TRANSACTION或者是ROLLBACK TRANSACTION結尾的事務。

Implicit Transactions是不需要聲明事務的開始與結束,每一條語句本身就是一個事務,這樣定義語句有:

ALTER TABLE

INSERT

CREATE

OPEN

DELETE

REVOKE

DROP

SELECT

FETCH

TRUNCATE TABLE

GRANT

UPDATE

這是SQL Server的預設事務送出模式,在這種模式下,所有的TSQL語句都會在其執行完的時候,執行成功的被送出,執行失敗的被復原。

常見的錯誤有三種,不同的錯誤有不同的送出復原方式:

編譯錯誤:編譯錯誤主要就是文法錯誤。例如,在一個事務中,你又有一條語句中某一個關鍵字寫錯了,比如你将values達成了valuse,那麼整個事務中的所有語句都不會被執行,相當于全部被復原。

主鍵沖突:如果存在主鍵沖突的話,那麼那些沖突的語句會被復原,也就是插入失敗,但是之前或者之後不沖突的語句插入成功,不會被復原。

表不存在錯誤:假如一條插入語句的表名寫錯了,那麼隻復原錯誤的那條語句,以及在錯誤語句之後的所有語句,這個跟前面的主鍵沖突有差別,前面主鍵沖突隻復原沖突語句,不影響後面的語句,而表不存在錯誤會影響錯誤語句後面的語句。

舉例執行個體如下面三個例子所示:

 本文轉自xwdreamer部落格園部落格,原文連結:http://www.cnblogs.com/xwdreamer/archive/2012/07/12/2588629.html,如需轉載請自行聯系原作者