數據庫事務的原理


數據庫事務的原理:
        事務開始之後,事務所有的操作都陸續寫到事務日誌中。寫到日誌中的操作,一般有兩種:一種是針對數據的操作,一種是針對任務的操作。針對數據的操作,例如插入、刪除和修改,這是典型的事務操作,這些操作的對象是大量的數據。有些操作是針對任務的,例如創建索引,這些任務操作在事務日誌中記錄一個標誌,用於表示執行了這種操作。當取消這種事務時,系統自動執行這種操作的反操作,保證系統的一致性。系統自動生成一個檢查點機制,這個檢查點週期地發生。檢查點的週期是系統根據用戶定義的時間間隔和系統活動的頻度由系統自動計算出來的時間間隔。檢查點週期地檢查事務日誌,如果在事務日誌中,事務全部完成,那麼檢查點將事務日誌中的事務提交到數據庫中,並且在事務日誌中做一個檢查點提交標記。如果在事務日誌中,事務沒有完成,那麼檢查點將事務日誌中的事務不提交到數據庫中,並且在事務日誌中做一個檢查點未提交標記。

 

企業級的數據庫管理系統(DBMS)都有責任提供一種保證事務的物理完整性的機制。就常用的SQL Server2000系統而言,它具備鎖定設備隔離事務、記錄設備保證事務持久性等機制。因此,我們不必關心數據庫事務的物理完整性,而應該關注在什麼情況下使用數據庫事務、事務對性能的影響,如何使用事務等等。



SQL Server2000對事務提供了很好的支持。我們可以使用SQL語句來定義、提交以及回滾一個事務。示例如下:

DECLARE @TranName VARCHAR(20)

SELECT @TranName = 'MyTransaction' 
BEGIN TRANSACTION @TranNameGOUSE pubs
GO

UPDATE roysched
SET royalty = royalty * 1.10
WHERE title_id LIKE 'Pc%'
GO

COMMIT TRANSACTION MyTransaction
GO 

這裏用到了SQL Server2000自帶的示例數據庫pubs,提交事務後,將爲所有暢銷計算機書籍支付的版稅增加 10%。

如下的SQL語句不允許出現在事務中
ALTER DATABASE 修改數據庫 BACKUP LOG 備份日誌 CREATE DATABASE 創建數據庫 DISK INIT 創建數據庫或事務日誌設備 DROP DATABASE 刪除數據庫 DUMP TRANSACTION 轉儲事務日誌 LOAD DATABASE 裝載數據庫備份複本 LOAD TRANSACTION 裝載事務日誌備份複本 RECONFIGURE 更新使用 sp_configure 系統存儲過程更改的配置選項的當前配置(sp_configure 結果集中的 config_value 列)值。 RESTORE DATABASE 還原使用BACKUP命令所作的數據庫備份 RESTORE LOG 還原使用BACKUP命令所作的日誌備份 UPDATE STATISTICS 在指定的表或索引視圖中,對一個或多個統計組(集合)有關鍵值分發的信息進行更新

除了這些語句以外,你可以在你的數據庫事務中使用任何合法的SQL語句。

存儲點

事務只是一種最壞情況下的保障措施,事實上,平時系統的運行可靠性都是相當高的,錯誤很少發生,因此,在每次事務執行之前都檢查其有效性顯得代價太高——絕大多數的情況下這種耗時的檢查是不必要的。我們不得不想另外一種辦法來提高效率。
事務存儲點提供了一種機制,用於回滾部分事務。因此,我們可以不必在更新之前檢查更新的有效性,而是預設一個存儲點,在更新之後,如果沒有出現錯誤,就繼續執行,否則回滾到更新之前的存儲點。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章