<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    oracle事務管理相關問題總結

    Posted on 2008-06-13 11:36 英雄 閱讀(3598) 評論(8)  編輯  收藏

    1.oracle對一條sql語句的執行是怎么管理并發和恢復控制的?
    一條符合語法的sql語句,定義了對數據庫的操作。此操作執行的時刻,對應了數據庫的一個數據狀態。可以這樣理解這個狀態:到此執行時刻為止,沒有任何數據庫語句級操作正在并發執行;就是說實際上正在并發執行的多個語句級操作可以假定在此語句操作之后執行。這里強調語句級操作,是指如果一個事務包含多個操作語句,在此時刻實際已經執行了其中幾個,此時刻也正在執行某一個語句,那么不能簡單地認為前面幾個執行的操作語句也還沒發生,這是要看事務的隔離級別的,但是不管事務隔離級別是幾級,語句級別上可以認為是序列執行的。
    該sql語句的操作過程中認為此數據狀態是保持不變的。當此操作執行結束時刻,才產生語句級數據狀態影響。就是說,可能該語句同時更新了兩行,但都用了同一個主鍵,則此時會導致違反唯一性約定而消除整個語句的影響,如果成功執行,但未必就在事務級別上影響數據狀態,就是說如果所在事務回滾,此影響仍然被消除,不過正如前面所說,一個語句成功執行后,就可能影響其他語句所面對的數據狀態。 
    2.PL/SQL的執行是怎么管理并發和恢復控制的?
    PL/SQL是在一個PL/SQL引擎中執行的。該引擎可以認為是oracle之外的單位。該引擎會解析PL/SQL,并不斷發送SQL語句給ORACLE。所以和用JAVA程序通過JDBC在一個會話連接中發送多個SQL語句沒有本質差別。也因此并發和恢復管理沒有不同。
    3.oracle死鎖是怎么樣產生的?
    由于oracle控制并發是使用的鎖機制,也因此即會產生死鎖問題。oracle在執行一個語句時,會根據語句的含義,同時根據所處的事務隔離級別,解析出需要加什么樣的鎖,什么時候釋放。而隔離級別越高,對鎖資源占用越大。現在考慮這樣的情形,oracle同時處理兩個事務A,B。A發過來幾條語句,導致ORACLE加了幾把鎖沒有釋放,B發過來幾條語句,導致ORACLE加了另外幾把鎖沒有釋放,現在,A又發過來一個語句,此語句要求ORACLE加的一些鎖中,有幾個鎖已經被B事務占用,那么A等待,而B又發過來一條語句,此語句要求ORACLE加的鎖,在A手中。于是死鎖出現。而隔離級別越高,死鎖的可能性越大。可以分析出來,死鎖的根本原因在于,事務包含的語句是分條發給oracle的,oracle不能夠在事務開始時刻就解析出全部執行過程需要什么鎖,什么時候釋放,無法統一安排。

    死鎖問題歸咎由誰呢?我這么理解:如果沒有事務概念,oracle在語句級上控制并發,完全不會出現死鎖問題。因為在解析語句時,oracle已經知道要加多少把鎖,它會看目前這些鎖如果能全部獲得就執行,否則就等待。可是實際應用怎么能沒有事務的概念呢?我同意完全可以出現新的sql語法,可以把原來的多條sql語句的含義在一個語句中定義完畢,長短不是問題,犧牲一定的語法簡潔度也不是問題;然而最關鍵的是往往我們是在一個業務處理邏輯中,多個數據庫操作之間摻雜了其他非數據庫操作,而又想獲取這些數據庫操作作為一個整體的ACID。因此事務概念必須存在。既然如此,或許我們真得可以把一個事務可能包含的語句在事務開始時就交給oracle,盡管這樣一來,有可能就包含了實際通過業務邏輯判斷不會執行的語句,導致oracle浪費鎖,降低并發處理能力。
    我之前的文章曾經介紹過用JAVA實現同步控制,降低ORACLE隔離級別,只利用ORACLE的原子性支持。這樣做的原因就在上文中基本提到了。我們在編寫JAVA業務邏輯時,是知道我們需要在一串業務邏輯中操作多少次數據庫的,也因此,能夠在業務邏輯開始時就控制得到所有的鎖再執行。這樣做確實能夠降低oracle壓力,并消除死鎖問題,然而這樣做會導致同步壓力集中到JAVA應用端,而且對研發人員要求也會提高。盡管如此,在JAVA應用端使用同步要靈活很多,而不必限制在表鎖行鎖,你甚至可以建一個森林結構的信號量數據來控制同步。
    呵呵,反過來也可以理解隔離級別的問題,為什么要存在允許幻像讀的隔離級別呢?隔離級別的存在是一種權衡,如果應用既不想自己控制并發,又想提高并發能力,則需要好好權衡一下吧!

    Feedback

    # re: oracle事務管理相關問題總結  回復  更多評論   

    2008-06-13 12:43 by 小武
    學習了

    http://www.laoge.info 

    # re: oracle事務管理相關問題總結  回復  更多評論   

    2008-06-13 12:56 by ~上善若水~
    傳智播客 &amp; ajax全套獨家發布

    1.ajax 入門

    2.ajax 原理

    3.ajax 簡單實例

    4.ajax 無限級聯動菜單

    5.ajax 簡易聊天室

    6.ajax 開源框架簡介

    7.DWR 框架源碼分析一

    8.DWR 框架源碼分析二

    9.DWR 框架源碼分析三

    10.DWR 框架源碼分析四

    11.DWR框架源碼分析五

    12.SSH + DWR完成商城驅動

    13. Extjs 簡介

    14 Extjs&nbsp; 簡單實例

    15.SSH + Extjs 開發系列之OA一

    16. SSH + Extjs 開發系列之OA二

    17. SSH + Extjs 開發系列之OA三

    18. SSH + Extjs 開發系列之OA四

    19 .SSH + Extjs 開發系列之OA五

    20.&nbsp;SSH + Extjs 開發系列之OA六

    21. SSH + Extjs 開發系列之OA七

    22.&nbsp;SSH + Extjs 開發系列之OA八

    23.SSH + Extjs 開發系列之OA九

    24.SSH + Extjs 開發系列之OA十

    25. ajax 前景之我見

    下載地址:http://www.ibeifeng.com/read.php?tid=2338&u=5043

    # re: oracle事務管理相關問題總結  回復  更多評論   

    2008-06-13 15:48 by ~上善若水~
    傳智播客ajax全套內部視頻獨家發布,免費下載

    1.ajax 入門

    2.ajax 原理

    3.ajax 簡單實例

    4.ajax 無限級聯動菜單

    5.ajax 簡易聊天室

    6.ajax 開源框架簡介

    7.DWR 框架源碼分析一

    8.DWR 框架源碼分析二

    9.DWR 框架源碼分析三

    10.DWR 框架源碼分析四

    11.DWR框架源碼分析五

    12.SSH + DWR完成商城驅動

    13. Extjs 簡介

    14 Extjs&nbsp; 簡單實例

    15.SSH + Extjs 開發系列之OA一

    16. SSH + Extjs 開發系列之OA二

    17. SSH + Extjs 開發系列之OA三

    18. SSH + Extjs 開發系列之OA四

    19 .SSH + Extjs 開發系列之OA五

    20.&nbsp;SSH + Extjs 開發系列之OA六

    21. SSH + Extjs 開發系列之OA七

    22.&nbsp;SSH + Extjs 開發系列之OA八

    23.SSH + Extjs 開發系列之OA九

    24.SSH + Extjs 開發系列之OA十

    25. ajax 前景之我見

    下載地址:http://www.ibeifeng.com/read.php?tid=2338&u=5043

    # re: oracle事務管理相關問題總結[未登錄]  回復  更多評論   

    2008-06-13 17:29 by Brian
    請教文中說提到的"語句級別上可以認為是序列執行的"是不是可以理解為"事務是序列執行的"?謝謝!

    # re: oracle事務管理相關問題總結  回復  更多評論   

    2008-06-15 11:06 by 長江三峽
    高深

    # re: oracle事務管理相關問題總結  回復  更多評論   

    2008-06-16 10:50 by 英雄
    @Brian
    語句級序列執行的說法就是區別事務級序列執行。前者指語句間不會并發影響。比如一條update ** where **的語句可能要根據where條件更新幾萬行數據,在執行過程中,可以認為沒有其他語句在執行。實際上則是可有并發執行的語句,但是這些允許并發執行的語句一定不會影響這條語句的執行,比如導致該語句的where條件針對的數據在執行過程中發生變化。后者指事物間不會并發影響。即每一組語句的執行是順序執行的,而不認為是并發執行的。

    # re: oracle事務管理相關問題總結  回復  更多評論   

    2008-07-31 22:17 by karbo
    【如果沒有事務概念,oracle在語句級上控制并發,完全不會出現死鎖問題】覺得樓上的這句話有點問題,不是,是有大問題。恰恰相反,如果真的遵循事務的概念將不會產生死鎖,正是因為本來應該作為一個事務處理的邏輯,現在卻要與其它邏輯并行處理才會產生死鎖,因而,死鎖的根本原因是并行處理。

    # re: oracle事務管理相關問題總結[未登錄]  回復  更多評論   

    2008-08-12 13:19 by 英雄
    @karbo
    死鎖肯定要并行處理才會產生。但這里是指由于事務是包含多個執行語句的,oracle在執行過程中,是逐個按語句加鎖的;因為是逐個,而不是在事務一開始就加所有的鎖,這就有可能和其他并發的事務處理產生死鎖。

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲人成中文字幕在线观看| 亚洲AV无码乱码在线观看性色扶| 亚洲AV无码专区亚洲AV伊甸园| 深夜A级毛片视频免费| 四虎永久在线精品免费观看地址| 亚洲JLZZJLZZ少妇| 国产男女猛烈无遮档免费视频网站| 亚洲国产精品成人午夜在线观看 | 中文在线免费看视频| 国产啪亚洲国产精品无码| 一本大道一卡二大卡三卡免费| 亚洲视频在线精品| 黄色视屏在线免费播放| 久久久亚洲精品国产| 国产精品99久久免费观看| 亚洲综合综合在线| 妞干网手机免费视频| 免费无遮挡无遮羞在线看| 亚洲乱码中文字幕综合| 久久精品国产大片免费观看 | 中文字幕在线观看亚洲日韩| 日本不卡视频免费| 久久精品成人免费国产片小草| 亚洲成在人天堂在线| 91精品免费国产高清在线| 亚洲爆乳成av人在线视菜奈实| 亚洲国产成人乱码精品女人久久久不卡 | 日本高清色本免费现在观看| 深夜免费在线视频| 亚洲AV无码一区二区乱孑伦AS| 亚洲免费二区三区| 男人的天堂av亚洲一区2区| 伊人久久大香线蕉亚洲| 2021在线永久免费视频| 色欲aⅴ亚洲情无码AV| 亚洲AV无码久久精品狠狠爱浪潮| 91久久成人免费| 日韩在线观看免费完整版视频| 亚洲伦另类中文字幕| 精品国产免费观看一区| 国产免费网站看v片在线|