解讀SQL和Oracle對數據庫事務處理的差異_Mssql數據庫教程
推薦:分析SQL Server性能的改進與邏輯數據庫設計的關聯SQL語句優化的原則: ◆1、使用索引來更快地遍歷表 缺省情況下建立的索引是非群集索引,但有時它并不是最佳的。在非群集索引下,數據在物理上隨機存放在數據頁上。合理的索引設計要建立在對各種查詢的分析和預測上。一般來說:①。有大量重復值、且經常有范
背景:在吉日嘎拉的軟件編程走火入魔之:數據庫事務處理入門(適合初學者閱讀)文章中關于MS SQL Server和Oracle對數據庫事務處理的差異性引起一些爭論,因此記錄我對數據庫事務處理的想法。
簡介:本文講述MS SQL Server和Oracle對數據庫事務處理的差異性,以及Oracle如何對事務處理的實現。
什么是事務:數據庫事務(Database Transaction)是一組數據庫操作的處理單元。事務符合ACID的特性:
Atomic:原子性,要么全部要么一無所有。All or None.
Consistent:一致性,所有依賴關系以及約束一致。
Isolated:分離性,不同事務不互相影響。
Durable:持久性,提交事務的數據需要持久化。
為什么要使用事務:
實現事務主要有兩大功能:
1.保證數據庫的consistent(一致性狀態),保持所有依賴關系以及約束一致)。哪怕數據庫管理系統出現故障時(例如斷電),也能恢復到一致性狀態。例如一個銀行轉帳系統,張三給李四轉3000圓RMB,張三帳號上減3000和李四帳號上加3000需要同時完成,否則系統的帳就不平了。也例如有些銷售系統的匯總表和明細表,是一個主表和一個從表,需要同步更新。
2.并發時分離不同事務操作。例如編輯過程中的數據不給其他事務查詢到。這也是相對的,在特效需求下可能要支持dirty read(臟讀),但不是這里討論的范圍了。
SQL Server 2008 的事務類型
1.自動提交事務 Autocommit Transactions
這是SQL Server默認的事務類型,每一條單獨的SQL語句(SQL statement)都是單獨的一個事務,語句執行完畢后自動提交。調用方不需要手工控制事務流程。
2.顯示事務 Explicit Transactions
調用方需要調用API或者使用T-SQL的BEGIN TRANSACTION 語句來打開事務。需要調用COMMIT 或者 ROLLBACK TRANSACTION 來提交或者回滾。
3.隱式事務 Implicit Transactions
使用SET IMPLICIT_TRANSACTIONS ON把事務模式變成隱式模式。調用方不需要執行BEGIN TRANSACTION 語句來打開事務。數據庫引擎執行到SQL語句的時候自動打開事務。調用方需要調用COMMIT 或者 ROLLBACK TRANSACTION 來提交或者回滾。當數據庫引擎執行下一個SQL語句時又自動打開一個新事務。
Oracle的事務類型
Oracle的事務處理類型有點像SQL Server的隱式事務。當執行到第一個可執行的SQL語句時自動打開事務,然后需要調用方執行commit或者rollback來提交或者回滾事務,如果有DDL語句,Oracle也會自動提交事務的。
參考:Transaction Management
Oracle的事務的實現
Oracle的結構分邏輯上和物理上的區別。邏輯上的結構是表空間,而物理上的結構是數據文件。
邏輯實現
Oracle下實現事務在邏輯上是由Undo Tablespace來實現的。Undo Tablespace包含Undo Segements(段),而Undo Segements包含Undo Data。Undo Data是支持事務的邏輯單元。
圖源自于《Oracle Database 10g: Administration Workshop I》
Undo Data用于保存修改前后的數據,以支持回滾,長時間查詢,和flashback查詢,以及失敗事務恢復的功能。
由于有了Undo Data,回滾事務變得容易了,因為Undo Data保存了修改前后的數據,保證了事務的原子性。失敗事務恢復和事務回滾類似,當網絡中斷或者其他原因導致事務異常停止,數據庫引擎可以恢復到一致性狀態。
同時Undo Data也支持長時間查詢(Read-consistent),例如有表格T,主鍵為key,有字段為f1,數據如下,盡管只有4條數據,假設需要很長時間進行查詢。
分享:怎樣利用SQL Server復制技術實現數據同步更新Microsoft SQL Server 2000復制的概念:在數據庫之間對數據和數據庫對象進行復制和分發并進行同步以確保其一致性的一組技術。 使用復制可以將數據分發到不同位置,通過局域網、使用撥號連接、通過 Internet 分發給遠程或移動用戶。復制還能夠使用戶提高應用
- sql 語句練習與答案
- 深入C++ string.find()函數的用法總結
- SQL Server中刪除重復數據的幾個方法
- sql刪除重復數據的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數據庫,提示 無法為該請求檢索數據 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數的用法實例詳解
- 相關鏈接:
- 教程說明:
Mssql數據庫教程-解讀SQL和Oracle對數據庫事務處理的差異。