解讀SQL和Oracle對數(shù)據(jù)庫事務(wù)處理的差異_Mssql數(shù)據(jù)庫教程
推薦:分析SQL Server性能的改進(jìn)與邏輯數(shù)據(jù)庫設(shè)計的關(guān)聯(lián)SQL語句優(yōu)化的原則: ◆1、使用索引來更快地遍歷表 缺省情況下建立的索引是非群集索引,但有時它并不是最佳的。在非群集索引下,數(shù)據(jù)在物理上隨機存放在數(shù)據(jù)頁上。合理的索引設(shè)計要建立在對各種查詢的分析和預(yù)測上。一般來說:①。有大量重復(fù)值、且經(jīng)常有范
背景:在吉日嘎拉的軟件編程走火入魔之:數(shù)據(jù)庫事務(wù)處理入門(適合初學(xué)者閱讀)文章中關(guān)于MS SQL Server和Oracle對數(shù)據(jù)庫事務(wù)處理的差異性引起一些爭論,因此記錄我對數(shù)據(jù)庫事務(wù)處理的想法。
簡介:本文講述MS SQL Server和Oracle對數(shù)據(jù)庫事務(wù)處理的差異性,以及Oracle如何對事務(wù)處理的實現(xiàn)。
什么是事務(wù):數(shù)據(jù)庫事務(wù)(Database Transaction)是一組數(shù)據(jù)庫操作的處理單元。事務(wù)符合ACID的特性:
Atomic:原子性,要么全部要么一無所有。All or None.
Consistent:一致性,所有依賴關(guān)系以及約束一致。
Isolated:分離性,不同事務(wù)不互相影響。
Durable:持久性,提交事務(wù)的數(shù)據(jù)需要持久化。
為什么要使用事務(wù):
實現(xiàn)事務(wù)主要有兩大功能:
1.保證數(shù)據(jù)庫的consistent(一致性狀態(tài)),保持所有依賴關(guān)系以及約束一致)。哪怕數(shù)據(jù)庫管理系統(tǒng)出現(xiàn)故障時(例如斷電),也能恢復(fù)到一致性狀態(tài)。例如一個銀行轉(zhuǎn)帳系統(tǒng),張三給李四轉(zhuǎn)3000圓RMB,張三帳號上減3000和李四帳號上加3000需要同時完成,否則系統(tǒng)的帳就不平了。也例如有些銷售系統(tǒng)的匯總表和明細(xì)表,是一個主表和一個從表,需要同步更新。
2.并發(fā)時分離不同事務(wù)操作。例如編輯過程中的數(shù)據(jù)不給其他事務(wù)查詢到。這也是相對的,在特效需求下可能要支持dirty read(臟讀),但不是這里討論的范圍了。
SQL Server 2008 的事務(wù)類型
1.自動提交事務(wù) Autocommit Transactions
這是SQL Server默認(rèn)的事務(wù)類型,每一條單獨的SQL語句(SQL statement)都是單獨的一個事務(wù),語句執(zhí)行完畢后自動提交。調(diào)用方不需要手工控制事務(wù)流程。
2.顯示事務(wù) Explicit Transactions
調(diào)用方需要調(diào)用API或者使用T-SQL的BEGIN TRANSACTION 語句來打開事務(wù)。需要調(diào)用COMMIT 或者 ROLLBACK TRANSACTION 來提交或者回滾。
3.隱式事務(wù) Implicit Transactions
使用SET IMPLICIT_TRANSACTIONS ON把事務(wù)模式變成隱式模式。調(diào)用方不需要執(zhí)行BEGIN TRANSACTION 語句來打開事務(wù)。數(shù)據(jù)庫引擎執(zhí)行到SQL語句的時候自動打開事務(wù)。調(diào)用方需要調(diào)用COMMIT 或者 ROLLBACK TRANSACTION 來提交或者回滾。當(dāng)數(shù)據(jù)庫引擎執(zhí)行下一個SQL語句時又自動打開一個新事務(wù)。
Oracle的事務(wù)類型
Oracle的事務(wù)處理類型有點像SQL Server的隱式事務(wù)。當(dāng)執(zhí)行到第一個可執(zhí)行的SQL語句時自動打開事務(wù),然后需要調(diào)用方執(zhí)行commit或者rollback來提交或者回滾事務(wù),如果有DDL語句,Oracle也會自動提交事務(wù)的。
參考:Transaction Management
Oracle的事務(wù)的實現(xiàn)
Oracle的結(jié)構(gòu)分邏輯上和物理上的區(qū)別。邏輯上的結(jié)構(gòu)是表空間,而物理上的結(jié)構(gòu)是數(shù)據(jù)文件。
邏輯實現(xiàn)
Oracle下實現(xiàn)事務(wù)在邏輯上是由Undo Tablespace來實現(xiàn)的。Undo Tablespace包含Undo Segements(段),而Undo Segements包含Undo Data。Undo Data是支持事務(wù)的邏輯單元。

圖源自于《Oracle Database 10g: Administration Workshop I》
Undo Data用于保存修改前后的數(shù)據(jù),以支持回滾,長時間查詢,和flashback查詢,以及失敗事務(wù)恢復(fù)的功能。
由于有了Undo Data,回滾事務(wù)變得容易了,因為Undo Data保存了修改前后的數(shù)據(jù),保證了事務(wù)的原子性。失敗事務(wù)恢復(fù)和事務(wù)回滾類似,當(dāng)網(wǎng)絡(luò)中斷或者其他原因?qū)е率聞?wù)異常停止,數(shù)據(jù)庫引擎可以恢復(fù)到一致性狀態(tài)。
同時Undo Data也支持長時間查詢(Read-consistent),例如有表格T,主鍵為key,有字段為f1,數(shù)據(jù)如下,盡管只有4條數(shù)據(jù),假設(shè)需要很長時間進(jìn)行查詢。
分享:怎樣利用SQL Server復(fù)制技術(shù)實現(xiàn)數(shù)據(jù)同步更新Microsoft SQL Server 2000復(fù)制的概念:在數(shù)據(jù)庫之間對數(shù)據(jù)和數(shù)據(jù)庫對象進(jìn)行復(fù)制和分發(fā)并進(jìn)行同步以確保其一致性的一組技術(shù)。 使用復(fù)制可以將數(shù)據(jù)分發(fā)到不同位置,通過局域網(wǎng)、使用撥號連接、通過 Internet 分發(fā)給遠(yuǎn)程或移動用戶。復(fù)制還能夠使用戶提高應(yīng)用
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 講解數(shù)據(jù)庫調(diào)優(yōu)與程序員相關(guān)的幾個方面
- SQL SQL Server 2008中的新日期數(shù)據(jù)類型
- 從各種位置截取字符串的SQL語法
- 怎樣利用SQL Server復(fù)制技術(shù)實現(xiàn)數(shù)據(jù)同步更新
- 解析微軟SQL Server 2008如何令商業(yè)智能平民化
- 深入淺出SQL之左連接、右連接和全連接
- 解決SQL Server數(shù)據(jù)庫占用過多內(nèi)存的方法
- 一列保存多個ID(將多個用逗號隔開的ID轉(zhuǎn)換成用逗號隔開的名稱)
- 詳解SQL Server2000安全管理機制
- SQL Server 2008中的新日期數(shù)據(jù)類型
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-解讀SQL和Oracle對數(shù)據(jù)庫事務(wù)處理的差異
。