隨筆-159  評(píng)論-114  文章-7  trackbacks-0
          Atomic Consistent? Isolated? Durable

          An atomic database transaction is one which is guaranteed to complete successfully or not at all. If an error prevents a partially-performed transaction from proceeding to completion, it must be "backed out" to prevent the database being left in an inconsistent state.

          ACID?is?an?acronym?used?to?describe?the?properties?that?a?transaction?should?have?in?an?enterprise?environment.?A?transaction?should?be?Atomic,?and?its?results?should?be?Consistent,?Isolated,?and?Durable.?A?transaction?is?Atomic?if?it?either?completes?itself?or?is?completely?undone.?The?results?of?a?transaction?should?consistently?change?the?system?from?one?state?to?another,?be?isolated?or?independent?of?one?another,?and,?once?completed,?be?durable?or?permanent.

          什么是事務(wù)

          ???事務(wù)是應(yīng)用程序中一系列嚴(yán)密的操作,所有操作必須成功完成,否則在每個(gè)操作中所作的所有更改都會(huì)被撤消。也就是事務(wù)具有原子性,一個(gè)事務(wù)中的一系列的操作要么全部成功,要么一個(gè)都不做。

          ???
          ???事務(wù)的結(jié)束有兩種,當(dāng)事務(wù)中的所以步驟全部成功執(zhí)行時(shí),事務(wù)提交。如果其中一個(gè)步驟失敗,將發(fā)生回滾操作,撤消撤消之前到事務(wù)開始時(shí)的所以操作。



          事務(wù)的ACID

          事務(wù)具有四個(gè)特征:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持續(xù)性(Durability)。這四個(gè)特性簡(jiǎn)稱為ACID特性。


          ????

          1、原子性

          ??? 事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包含的各操作要么都做,要么都不做

          2、一致性

          ?????事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。因此當(dāng)數(shù)據(jù)庫只包含成功事務(wù)提交的結(jié)果時(shí),就說數(shù)據(jù)庫處于一致性狀態(tài)。如果數(shù)據(jù)庫系統(tǒng)運(yùn)行中發(fā)生故障,有些事務(wù)尚未完成就被迫中斷,這些未完成事務(wù)對(duì)數(shù)據(jù)庫所做的修改有一部分已寫入物理數(shù)據(jù)庫,這時(shí)數(shù)據(jù)庫就處于一種不正確的狀態(tài),或者說是不一致的狀態(tài)。?

          3、隔離性

          ??? 一個(gè)事務(wù)的執(zhí)行不能其它事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其它并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。

          4、持續(xù)性

          ?? 也稱永久性,指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫中的數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其它操作或故障不應(yīng)該對(duì)其執(zhí)行結(jié)果有任何影響。

          事務(wù)的屬性

          ???

          一個(gè)事務(wù)的屬性控制了事務(wù)的使用范圍。EJBSpring以及.net下的事務(wù)屬性都很類似的,事務(wù)屬性有如下幾種:


          ???Required:
          ??????如果在一個(gè)事務(wù)中調(diào)用,就把該方法加到此事務(wù)中來,如果還沒有啟動(dòng)事務(wù),就啟動(dòng)一個(gè)新事務(wù)。

          ?? RequiredNew:
          不管當(dāng)前有沒有事務(wù),都會(huì)啟動(dòng)一個(gè)新事務(wù),如果當(dāng)前有事務(wù),會(huì)被掛起直到方法結(jié)束。

          NotSupported:
          不能在事務(wù)中執(zhí)行此方法。如果有事務(wù),將會(huì)被掛起直到方法結(jié)束。

          Supports:
          如果當(dāng)前有事務(wù),此方法會(huì)加到當(dāng)前事務(wù),如果沒有,容器也不會(huì)啟動(dòng)新事務(wù)。

          Mandatory:
          必須在事務(wù)中調(diào)用此方法,否則拋出異常。

          Never:
          必須不在事務(wù)中調(diào)用此方法,否則拋出異常。


          三.事務(wù)的回滾

          CMT在以下兩中情況下,事務(wù)將回滾。第一,如果產(chǎn)生一個(gè)系統(tǒng)異常,容器將自動(dòng)回滾該事務(wù)。第二,通過調(diào)用EJBContext接口SetRollbackOnly方法,Bean方法通知容器回滾該事務(wù)。如果Bean拋出一個(gè)應(yīng)用異常,事務(wù)將不會(huì)自動(dòng)回滾,但可以調(diào)用SetRollbackOnly回滾。

          五.隔離級(jí)別

          事務(wù)不僅保證事務(wù)界限內(nèi)的數(shù)據(jù)庫操作全部完成(或回滾)同時(shí)還隔離數(shù)據(jù)庫更新語句。隔離級(jí)別描述被修改的數(shù)據(jù)對(duì)其他事物的可見度。隔離級(jí)別的控制會(huì)跟具體的DBMS廠商不同而不同。

          ??? ?隔離級(jí)別與并發(fā)性是互為矛盾的:隔離程度越高,數(shù)據(jù)庫的并發(fā)性越差;隔離程度越低,數(shù)據(jù)庫的并發(fā)性越好。

          通過一些現(xiàn)象,可以反映出隔離級(jí)別的效果。這些現(xiàn)象有:

          l???????? 更新丟失(lost update):當(dāng)系統(tǒng)允許兩個(gè)事務(wù)同時(shí)更新同一數(shù)據(jù)是,發(fā)生更新丟失。

          l???????? 臟讀(dirty read):當(dāng)一個(gè)事務(wù)讀取另一個(gè)事務(wù)尚未提交的修改時(shí),產(chǎn)生臟讀。

          l???????? 非重復(fù)讀(nonrepeatable read):同一查詢?cè)谕皇聞?wù)中多次進(jìn)行,由于其他提交事務(wù)所做的修改或刪除,每次返回不同的結(jié)果集,此時(shí)發(fā)生非重復(fù)讀。

          l???????? 幻像讀(phantom read):同一查詢?cè)谕皇聞?wù)中多次進(jìn)行,由于其他提交事務(wù)所做的插入操作,每次返回不同的結(jié)果集,此時(shí)發(fā)生幻像讀。

          ?

          SQL-99 標(biāo)準(zhǔn)定義了下列隔離級(jí)別:

          l???????? 未提交讀(read uncommitted)(隔離事務(wù)的最低級(jí)別,只能保證不讀取物理上損壞的數(shù)據(jù))

          l???????? 已提交讀(read committed)(數(shù)據(jù)庫引擎?的默認(rèn)級(jí)別)當(dāng)一個(gè)事務(wù)運(yùn)行在這個(gè)隔離級(jí)別時(shí),一個(gè) SELECT 查詢只能看到查詢開始之前提交的數(shù)據(jù),而永遠(yuǎn)無法看到未提交的數(shù)據(jù),或者是在查詢執(zhí)行時(shí)其他并行的事務(wù)提交做的改變。

          l???????? 可重復(fù)讀(repeatable read),不會(huì)臟讀和非重復(fù)讀,可能發(fā)生幻像讀

          l???????? 可序列化(serializable)(隔離事務(wù)的最高級(jí)別,事務(wù)之間完全隔離)



          posted on 2006-03-28 23:30 北國狼人的BloG 閱讀(329) 評(píng)論(0)  編輯  收藏 所屬分類: 達(dá)內(nèi)學(xué)習(xí)總結(jié)
          <2006年3月>
          2627281234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(33)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Java學(xué)習(xí)論壇

          Java最牛網(wǎng)站

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 颍上县| 滨海县| 上林县| 南平市| 茂名市| 浏阳市| 平罗县| 儋州市| 贺州市| 连山| 荆州市| 金沙县| 武乡县| 兴宁市| 八宿县| 白沙| 达日县| 山东| 洪洞县| 潜江市| 南华县| 宜兰县| 左权县| 探索| 商洛市| 长阳| 凤庆县| 临沧市| 垦利县| 武邑县| 藁城市| 河池市| 乌拉特后旗| 南投县| 北海市| 布尔津县| 天峨县| 策勒县| 拜泉县| 仙桃市| 读书|