oracle中的事務

來源:互聯網
上載者:User

標籤:

資料庫事務有嚴格的定義,它必須滿足4個特性:
原子性(Atomic):表示組成一個事務的多個資料庫操作是一個不可分割的原子單元只有所有的操作執行成功,整個事務才能提交,事務中任何一個資料庫操作失敗,己經執行的任何操作都必須撤銷,讓資料主加返回到初狀態。
一致性(Consistency):事務操作成功後,資料所處的狀態和它的商務規則是一致的,即資料不會被被破壞。如從A賬戶轉賬100元到B賬戶,不管操作成功與否,A和B的存款總額不變的。
隔離性(Isolation):在並發資料操作時,不同的事務擁有各自的資料空間,它們的操作不會對對方產生幹擾。準確地說,並非要求做到完全無幹擾,資料庫規定了多種交易隔離等級,不同隔離等級,對應不同的幹擾程度,隔離等級越高,資料一致性越好,但並發性越弱。
持久性(Durabiliy):一旦事務提交成功後,事務中所有的資料操作都必須被持久化到資料庫中,取出使提交事務後,資料庫馬上崩潰,在資料庫重啟時,也必須保證能夠通過某種機制恢複資料。
在這些事務特性中,資料“一致性”是最終目標,其他特性都是為達到這個目標的措施、要求或手段。
資料並發的問題:
髒讀:A事務讀取B事務尚未認可的變更資料,並在這個資料的基礎上操作。如果恰巧B交易回復,那麼A事務讀到的資料根本是不被承認的。
不可重複讀取:A事務讀取到了B事務已經提交的更改的資料。假設A在取款事務的過程中,B往該賬戶轉賬100元,A兩次讀取的賬戶的餘額發生不一致。
幻象讀:A事務讀取了B事務提交的新增資料,這時A事將出現幻象讀。幻象讀一般發生在計算資料的事務中,舉一個例子,假設銀行系統在同一個事務中,兩次統計存款賬戶的總金額,在兩次統計過程中剛好新增了一個存款戶,並存入100元,這時兩次統計的總金額不一致。
幻讀和不可重複讀取是兩個容易混淆的概念,前者是指讀到了其他己經提交的事務的新資料,而後者是指讀到了己經提交事務的更改資料(更改或刪除),為了避免這種情況,採取的對策是不同的,防止讀取到更改資料,只需要對操作的資料添加行級鎖,阻止操作中的資料發生
變化,而防止讀取到新增資料,則往往需要對操作的靈氣添加表級鎖--將對整個表鎖定,防止新增資料。
第一類丟失更新:A事務撤銷時,把己提交的B事務的更新資料覆蓋了。
第二類丟失更新:A事務覆蓋B事務己經提交的資料,造成B事務所做的操作丟失。
行共用鎖定定:一般通過select for update 語句隱式獲得共用鎖定定,在Oracle中使用者也可以通過LOCK TABLE IN ROW SHARE MODE語句顯式獲得行共用鎖定定。行共用鎖定定並不防止對資料行變更的操作,但是可以防止其他會話擷取獨佔性資料表鎖定,允許進行多個並發的行共
享和行獨佔性鎖定,還允許進行資料表的共用或者採用共用行獨佔鎖定。
行獨佔鎖定:通過一條INSERT、UPDATE 或DELETE 語句隱式擷取,或者通過一條LOCK TABLE IN ROW EXCLUSIVE MODE 語句顯式擷取。這個鎖定可以防止其他會話擷取一個共用鎖定定、共用行獨佔鎖定或獨佔鎖定。
表共用鎖定定:通過LOCK TABLE IN SHARE MODE語句顯式獲得。這種鎖定可以防止其他會話獲得行獨佔鎖定(INSERT、UPDATE 或DELETE),或者防止其他表共用行獨佔鎖定或表獨佔鎖定,它允許在表中擁多個共用和表共用鎖定定。該鎖定可以讓會話具有對錶事務級一致訪問,因為
其他會話在使用者提交或者復原該 事務並釋放對該表鎖定之前不能更改這個被鎖定的表。
表共用行獨佔:通過LOCK TABLE IN SHARE ROW EXCLUSIVE MODE 語句顯式獲得。這種鎖定可防止其他會獲得一個表共用、行獨佔或者表獨佔鎖頗定,它允許其他行共用鎖定定。這種鎖定類似於表共用鎖定定,只是一次只能對一個表放置一個表共用行獨佔鎖定。如果A會話擁有該鎖定
,則B會話可執行SELECT ROR UPDATE操作,但是如果B會話試圖更新選擇行,則需要等待。
表獨佔:通過LOCK TABLE IN EXCLUSIVE MODE 顯式獲得。這個鎖定防止其他會話對該表的任何其他鎖定。
隔離等級 髒讀 不可重複讀取 幻讀 第一類丟失更新 第二類丟失更新
-----------------------------------------------------------------------------------------
read uncommited yes yes yes no yes
read committed no yes yes no yes
repeatable read no no yes no no
serializable no no no no no 
-----------------------------------------------------------------------------------------
Spring 的交易管理員實作類別
事務 說明
org.springframework.orm.jpa.JpaTransactionManager 使用JPA進行持久化時,使用該交易管理員
org.springframework.orm.hibernate3.HibernateTransactionManager 使用Hibernate3.0
org.springframework.jdbc.datasource.DataSourceTransactionManager 使用JDBC 或iBatis
org.springframework.orm.jdo.JdoTransactionManager 使用JDO
org.springframework.transaction.jta.JtaTransactionManager 具有多個資料來源的全域事務使用交易管理員
----------------------------------------------------------------------------------------
事務的傳播行為類型 說明
--------------------------------------------------------------------------------------
propagation_required 如果當前沒有事務,就建立一個事務,如果己經存在一個事務中,加入到這個事務中。這是最常見的選擇。
propagation_supports 支援當前事務,如果當前沒有事務,就以非事務方式執行。
propagation_mandatory 使用當前事務,如果當前沒有事務,就拋出異常。
propagation_requires_new 建立事務,如果當前存在事務,把當前事務掛起。
propagation_not_suppoprted 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
propagation_never 以非事務方式執行,如查當前存在事務,則拋出異常。
propatation_nested 如果當前存在事務,則在嵌套事務內執行,如果當前沒有事務,則執行與propagation_required
-----------------------------------------------------------------------------------------
編程式的交易管理
Spring為編程式事務客理提供了模板類org.springframework.transaction.support.TransactionTemplate
使用xml配置聲明式事務
Spring的聲明交易管理是通過SpringAOP實現的。
Spring預設的交易回復規則為:運行期異常復原,檢查型異常不復原。
----------------------------------------------------------------------------------------------
我們可以得出這樣的結論:
在相同的線程中進行相互嵌套調用的事務方法工作於相同的事務中。如果這些相互嵌套調用的方法工用在不同的線程中,則不同線程下的事務方法工作在獨立的事務中。
--------------------------------------------------------------------------
交易隔離等級對並發問題解決情況
序號 混合資料庫訪問技術架構 交易管理員
1 Hibernate+Spring JDBC或iBatis org.springframework.orm.hibernate3.HibernateTransactionManager
2 JPA+Spring JDBC或iBatis org.springframework.orm.jpa.JpaTransactionManger
3 JDO+Spring JDBC或iBatis org.springframework.orm.jdo.JdoTransactionManger
------------------------------------------------------------------------------------------------------
不能被Spring AOP事務增強方法
序號 動態Proxy 原則 不能被事務增強方法
1 基於介面的動態代理 除public 外的其他所有的方法,此外public static也不能被增強
2 基於CGLib動態代理 private、static、final的方法
---------------------------------------------------------
spring整合其他ORM架構
1.在spring中配置Hibernate檔案:
<bean id="sessionFactory" class="org.springframework.orm.hibernatge3.LocalSessionFactoryBean"
p:configLocation="classpath:hibernate.cfg.xml"/>

oracle中的事務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.