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

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

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

    隨筆 - 79  文章 - 11  trackbacks - 0
    <2009年5月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    不再墮落。
    Oracle documents: 
    http://tahiti.oracle.com/

    常用鏈接

    留言簿

    隨筆分類(66)

    隨筆檔案(79)

    相冊

    收藏夾(11)

    搜索

    •  

    積分與排名

    • 積分 - 53320
    • 排名 - 949

    最新隨筆

    最新評論

    閱讀排行榜

    insert阻塞不常見,對于帶主鍵的表,如果表上有唯一約束,有兩個會話試圖插入相同主鍵值的一條記錄,則其中一個會話會發生阻塞,直到另一個會話提交或回滾。
    mld@ORCL> create table demo ( x int primary key );

    表已創建。

    mld
    @ORCL> insert into demo values ( 1 );

    已創建 
    1 行。

    ----- session2
    mld
    @ORCL> insert into demo values ( 1 );

    --waiting。。。。。。。。

    解決:
        a,使主鍵保證唯一,可采用UUID,SEQUENCE等方式;
        b,使用DBMS_LOCK.REQUEST根據主鍵ID的hash值分配一個排它鎖,一次只有一個會話能請求成功,見代碼:
      
    mld@ORCL> conn sys/mld as sysdba
    已連接。
    sys
    @ORCL> grant execute on dbms_lock to mld;

    授權成功。
    mld
    @ORCL> create or replace trigger demo_bifer
      
    2  before insert on demo
      
    3  for each row
      
    4  declare
      
    5      l_lock_id   number;
      
    6      resource_busy   exception;
      
    7      pragma exception_init( resource_busy, -54 );
      
    8  begin
      
    9      l_lock_id :=
     
    10         dbms_utility.get_hash_value( to_char( :new.x ), 01024 );
     
    11      if ( dbms_lock.request
     
    12               (  id                => l_lock_id,
     
    13                  lockmode          => dbms_lock.x_mode,
     
    14                  timeout           => 0,
     
    15                  release_on_commit => TRUE ) <> 0 )
     
    16      then
     
    17          raise resource_busy;
     
    18      end if;
     
    19  end;
     
    20  /

    觸發器已創建

    mld
    @ORCL> show error;
    沒有錯誤。
    mld
    @ORCL> insert into demo values ( 1 );

    已創建 
    1 行。

    --session 
    2
    mld
    @ORCL> insert into demo values ( 1 );
    insert into demo values ( 1 )
    *
    第 
    1 行出現錯誤:
    ORA
    -00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源
    ORA
    -06512: 在 "MLD.DEMO_BIFER", line 14
    ORA
    -04088: 觸發器 'MLD.DEMO_BIFER' 執行過程中出錯


    mld
    @ORCL>

    posted on 2009-05-06 22:45 donnie 閱讀(616) 評論(0)  編輯  收藏 所屬分類: database
    主站蜘蛛池模板: 亚洲欧洲日韩国产| 亚洲精品成人a在线观看| 国产AV无码专区亚洲AV男同| 一道本不卡免费视频| 四虎永久免费地址在线观看| 亚洲AV无码成人精品区狼人影院| 免费无码黄十八禁网站在线观看| 亚洲成在人线中文字幕| 曰批视频免费30分钟成人| 亚洲国产中文在线视频| 亚洲免费中文字幕| 亚洲AV成人噜噜无码网站| 日本免费一区二区三区最新| 大桥未久亚洲无av码在线| 亚洲AV网站在线观看| 久久性生大片免费观看性| 亚洲av无码成h人动漫无遮挡 | 亚洲AV日韩精品一区二区三区| 黄色网址在线免费观看| 青青草原亚洲视频| 免费国产污网站在线观看15 | 亚洲a∨无码一区二区| 亚洲Av无码乱码在线观看性色| 久久不见久久见免费影院www日本| 欧洲亚洲国产清在高| 国产91免费在线观看| 国产亚洲男人的天堂在线观看| 国产乱辈通伦影片在线播放亚洲 | 亚洲最大免费视频网| 亚洲高清一区二区三区电影| 亚洲中文字幕无码一去台湾| 日本人的色道www免费一区| 一二三区免费视频| 久久精品国产亚洲AV无码娇色| 免费看污成人午夜网站| 免费国产黄网站在线观看动图| 亚洲成人免费在线| 免费看国产一级特黄aa大片| 无码人妻久久一区二区三区免费 | 亚洲一区二区三区免费观看| 亚洲精品无码成人|