Oracle 11g DDL 的 wait選項(DDL_LOCK_TIMEOUT)

來源:互聯網
上載者:User

DDL命令需要排它鎖的內部結構。如果這些鎖不可用,將返回一個” ORA-00054: resource busy”,當試圖修改頻繁訪問的對象時,這可能特別讓人沮喪,為瞭解決這個問題Oracle 11g 包含了DDL_LOCK_TIMEOUT參數,可以在執行個體或者會話層級分別使用alter system 和 alter session命令。
 
DDL_LOCK_TIMEOUT 表示一個DDL命令等待鎖可用的秒數在拋出”resource busy”錯誤之前。預設值是0(表示NOWAIT)。
 
SQL> create  table  ddl_lock_test (
 
      id  number
 
    );
 
SQL> insert  into ddl_lock_test    values  ( 1 );
 
 
 
-----------建立一個測試表,並插入一條資料,但不commit;
 
-----------新開一個session,在session 層級設定 DDL_LOCK_TIMEOUT 為一個非0值並試圖在表上加一列;
 
 
 
 
 
SQL> alter  session  set  ddl_lock_timeout = 20;
 
 
 
SQL>alter  table  ddl_lock_test  add  (
 
    name  varchar2(20)
 
      );
 
 
 
--------這個會話會等待20秒在失敗之前.
 
 alter  table  ddl_lock_test  add  (name  varchar2(20))
 
*
 
ERROR at line 1:
 
ORA-00054: resource busy and acquire with NOWAIT specified
 
 
 
----若我們重複alter  table 命令並在20秒內commit 第一個session 的 insert , alter  table 將會返回執行成功訊息。
 
 
 
SQL>alter  table  ddl_lock_test  add  (
 
    name  varchar2(20)
 
      );
 
 Table  altered.
 
 
 
SQL>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.