Home  >  Article  >  Database  >  Oracle 11g DDL 的 wait选项(DDL_LOCK_TIMEOUT)

Oracle 11g DDL 的 wait选项(DDL_LOCK_TIMEOUT)

WBOY
WBOYOriginal
2016-06-07 17:23:471172browse

DDL命令需要排它锁的内部结构。如果这些锁不可用,将返回一个rdquo; ORA-00054: resource busyrdquo;,当试图修改频繁访问的对象

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>

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn