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

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

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

    本站不再更新,歡迎光臨 java開發技術網
    隨筆-230  評論-230  文章-8  trackbacks-0

    自治事務前的事務管理(一般事務管理)

    ?? DML 這樣的數據庫扣作都是在事務的上下文環境中執行的。事務是一個或多個 SQL 語句的序列,執行一定的工作邏輯單元。事務、定義的特定會話可以由 commit rollback 操作進行控制。只要發生 commit rollback 操作就會釋放鎖定資源的鎖。

    ?

    自治事務的定義和使用

    自治事務是將單一的、完整的事務分割為多個子事務。控制從主事務( MT )轉移到自治事務( AT )。一旦自治事務執行了,主事務就會恢復執行。自治事務獨立于主事務, COMMIT ROLLBACK 的范圍僅僅限制在自治事務的上下文中。

    ?

    自治事務的優點

    1、? 代碼的模塊人程度更高而且更簡單。

    2、? 在觸發器內執行 COMMIT

    3、? 從執行 DML SQL 中調用用戶自定義的函數。

    ?

    將事務指定為自治事務

    可以在代碼的聲明部分使用下面語句,以便在 PL/SQL 塊中定義一個自治事務:

    PRAGMA?? AUTONOMOUS_TRANSACTION

    ?

    其中 pragma 關鍵字的作用是通知 PL/SQL 編譯器,將聲明它的這個 PL/SQL 代碼塊分割為一個自治的或獨立的事務。定義自治事務時,要遵守以下幾條規則:

    1 、如果 PL/SQL 塊是匿名的,那么該匿名 PL/SQL 塊必須是一個頂層塊。

    2 、如果 PL/SQL 塊不是匿名的,那么它必須作為包或存儲過程序單元一部分的一個過程或函數。當在包中定義自治事務時,只有包中具體的函數或過程才能被指定為自治的的。

    3 PL/SQL 塊也可以是存儲對象類型的一個方法

    4 PL/SQL 塊也可以是一個數據庫觸發器

    ?

    一個例子程序

    create or replace procedure writelog(
    ? vid number,errtext varchar2????
    )
    is
    pragmaautonomous_transaction;?
    -- 定義事務
    begin
    ? insert into t_log values(vid,errtext);
    ? commit;
    end;

    ?

    ?

    create or replace procedure createuser(uid number ,vname varchar2,vsex varchar2)
    is
    begin
    ?? insertinto t_user values (uid,vname,vsex);
    ?? commit;
    exception
    ? whenothersthen
    ??? writelog(sqlcode,sqlerrm);
    ??? rollback;?
    end;

    自治事務處理

    主事務開始執行

    主事務遇到一個對自治子程序的調用,這時主事務就暫停,將控制轉移到自治例程中

    自治事務開始執行

    自治事務執行 commit rollback 操作,這將結束當前自治事務。

    主事務恢復

    主事務結束

    ?

    自治事務的一些關鍵問題

    1、? ALTER SESSION 的自治事務

    自治事務應該與主事務共享一個會話,因此通過 ALTER SESSION 語句,對該會話的任何修改,對自治事務和主事務應該都是可見的。但自治事務執行與主事務不同的上下文中。任何從自治塊中引發的自治子程序調用都與自治事務共享相同的事務上下文。

    ?

    ?

    2、? 自治事務與死鎖

    必須以下面的這種方式定義自治事務:

    ? 不創建主事務對資源和鎖的死鎖。死鎖在自治事務試圖訪問一個被主事務占用的資源時發生,這時主事務會掛起,直到自治事務結束。自治事務死等主事務釋放資源,結果可能導致死鎖。

    ?

    ?

    3、? 定義自治事務的條件

    只有頂層匿名塊才能包括 PRAGMA? AUTONOMOUS_TRANSTRACTION

    ?

    4、? COMMIT ROLLBACK 行為與自治事務

    自治事務是以 commit rollback 語句結束的。因此,應該在自治事務程序的內部顯式地包含一個 commit rollback 語句。如果沒有這樣做,任何一個未確定的事務都會回滾。這是一個事務級的回滾,而不是一個語句級的回滾。

    ?

    5、? 異常與自治事務

    當自治事務以一個異常的方式退出時,就發生一個事務級的回滾,自事事務中所有未確定的改變都會回滾 .

    ?

    6、? 多自治事務

    一個自治事務的上下文中,初始化多個自治事務。可以在一個自治塊內定義多個 commit rollback 語句來完成這項任務,當包含一個 rollback 時,它就會屬于當前事務,而不屬于主事務。

    ?

    7、? 自治事務的并發問題

    自治事務與主事務是并發運行的,初始化文件 init.ora 中的 transactions 參數決定著每個會話中并發事務的數量。 .

    ?

    8、? 通過自治事務和從 SQL 中調用用戶自定義函數

    通過自治事務,可以從 SQL 中調用用戶自定義函數來執行 DML 操作。只需把用戶自定義函數定義為自治事務,函數就變為可從 SQL 中調用的。

    9、? 自治事務和隔離等級

    應該在自治事務中給出 commit rollback 命令,一旦 commit rollback 在自治事務內部執行,那些改變對主事務而言是可見。但是 oracle 也允許從主事務中通過設定主事務的隔離等級為 SERIALIZABLE ,而不是默認的 READ COMMITTED ,對主事務隱藏這些改變,這可以通過 Set TRANSCTION 語句完成,其語法如下:

    Set transaction isolation level serializable;

    關于隔離等級的問題,以下兩點值得注意:

    1 當自治事務以 commit rollback 而結束時,由自治事務造成的改變對主事務以外的其它事務是可見的 .

    2 設置隔離等級為 serializable ,對主事務隱藏自治事務的變化。直到主事務提交,主事務一旦提交,自治事務中的改變對自治事務也就可見。

    ?

    ?

    10、????????????? 什么是隔離級別

    隔離級別是一種處理修改數據庫事務的方法,它影響到一個事務中的改變對另一個事務的可見性。 SQL92 中定義了 4 種隔離級別即:

    ?READ UNCOMMITTED

    ?REPEATABLE? READ

    READ COMMOTTED

    ?SERIALIZABLE

    些外 oracle 支持 READ COMMOTTED SERIALIZABLE 兩種隔離級別

    Read committed :這種設置是 oracle 默認的 , 它使 oracle 查詢可以看到查詢之前提將近的數據。換句話說,這種模式的事務是基于每句一致的事務集的。

    Serializable 這種設置意味著一個事務中的所有語句,都在操作一個事務開始時的數據庫映像中,這意味著沒有 commit 之前,當前事務都不能看到其它事務所提交的數據。

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    posted on 2006-09-24 17:17 有貓相伴的日子 閱讀(1944) 評論(0)  編輯  收藏 所屬分類: pl/sql
    本站不再更新,歡迎光臨 java開發技術網
    主站蜘蛛池模板: 日本免费网址大全在线观看| 国产亚洲精品岁国产微拍精品| 亚洲AV人无码激艳猛片| 一级中文字幕乱码免费| 亚洲情a成黄在线观看| 在线播放国产不卡免费视频| 亚洲精品无码av天堂| 日韩色日韩视频亚洲网站| 亚洲精品国产精品乱码不99| 欧洲人成在线免费| 美女羞羞喷液视频免费| 九九99热免费最新版| 亚洲不卡av不卡一区二区| 中文字幕免费在线看电影大全 | jizz在线免费观看| 亚洲欧洲日产国码无码网站 | 美景之屋4在线未删减免费| 午夜国产羞羞视频免费网站| 黄色毛片免费网站| 亚洲精品无码Av人在线观看国产 | 国产免费拔擦拔擦8x| 黄色毛片免费在线观看| 国产亚洲高清不卡在线观看| 久久免费国产视频| 亚洲乱码中文字幕小综合| 亚洲国产精品精华液| 亚洲一级特黄大片无码毛片| 国产亚洲综合成人91精品| 久青草视频97国内免费影视| 亚洲国产成人一区二区精品区| 久久久久久AV无码免费网站 | 在线观看亚洲AV日韩A∨| 国产18禁黄网站免费观看| 久久国产一片免费观看| 99ri精品国产亚洲| 日本特黄a级高清免费大片| 本道天堂成在人线av无码免费| 亚洲av激情无码专区在线播放| 成人毛片免费在线观看| yellow免费网站| 亚洲av一本岛在线播放|