【11g新特性】DDL_LOCK_TIMEOUT的作用

11g以前,DDL 语句是不会等待DML语句的,当DDL语句访问的对象正在执行的DML语句,会立即报错ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效。而在11g以后,DDL_LOCK_TIMEOUT参数可以修改这一状态,当DDL_LOCK_TIMEOUT=0时,DDL 不等待DML,当DDL_LOCK_TIMEOUT 为N(秒)时,DDL等待DML N 秒!

版本:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

  

session 1

建立测试表

yang@rac1>create table yangtab as select * from all_objects where rownum <200;

表已创建。

对表执行DML 

yang@rac1>update yangtab set object_name='yangql';

已更新199行。

yang@rac1>show parameter ddl_lock

NAME                                 TYPE        VALUE

------------------------------------ ----------- ----------

ddl_lock_timeout                     integer     0

yang@rac1>update yangtab set wner='yangql';

已更新199行。

session 2 对表执行ddl操作

yang@rac1>alter table yangtab drop column owner;

alter table yangtab drop column owner

            *

第 1 行出现错误:

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

已用时间:  00: 00: 00.01 --注意时间

设置 ddl_lock_timeout =10 秒,实现DDL语句等待DML语句

yang@rac1>alter session set ddl_lock_timeout=10;

会话已更改。

已用时间:  00: 00: 00.10

yang@rac1>alter table yangtab drop column owner;

alter table yangtab drop column owner

            *

第 1 行出现错误:

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

已用时间:  00: 00: 10.03 --等待时间接近10秒

yang@rac1>alter session set ddl_lock_timeout=8;改为8秒

会话已更改。

已用时间:  00: 00: 00.02

yang@rac1>alter table yangtab drop column owner;

alter table yangtab drop column owner

            *

第 1 行出现错误:

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

已用时间:  00: 00: 08.01 --等待8秒

yang@rac1>alter session set ddl_lock_timeout=0;

会话已更改。

已用时间:  00: 00: 00.00

yang@rac1>alter table yangtab drop column owner;

alter table yangtab drop column owner

            *

第 1 行出现错误:

ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

已用时间:  00: 00: 00.00

综上,设置ddl_lock_timeout为N(秒)后,DDL执行后将等待N秒钟后才抛出报错信息。在ddl_lock_timeout为默认值 0 时,DDL语句提交之后马上报错。

官方解释如下:

DDL_LOCK_TIMEOUT

Property Description
Parameter type Integer
Default value 0
Modifiable ALTER SESSION
Range of values 0 to 1,000,000 (in seconds)
Basic No
时间: 2024-09-19 09:44:50

【11g新特性】DDL_LOCK_TIMEOUT的作用的相关文章

Oracle 数据库11g新特性之高效 PL/SQL 编码

Oracle 数据库11g新特性之高效 PL/SQL 编码 转自:http://space.itpub.net/1384/viewspace-217959 自推出以来,PL/SQL 就一直是在 Oracle 数据库中编程的首选语言.经过一段时间的发展,我们看到,由于该语言可以实现越来越多需要较少编码的功能,它已经演变为一个综合的开发平台.Oracle 数据库 11g使得 PL/SQL 编码对程序员更加高效.在本文中,您将通过某些示例简单了解这个新功能. 复合触发器 请考虑一个宾馆数据库:宾馆房间

Oracle 11g 新特性 -- Online Patching (Hot Patching 热补丁)说明

Oracle 11g 新特性 -- Online Patching (Hot Patching 热补丁)说明 一.官网说明 MOS 的文档:RDBMSOnline Patching Aka Hot Patching [ID 761111.1] 有说明.这里取部分内容.   A regular RDBMSpatch is comprised of one or more object (.o) files and/or libraries (.afiles). Installing a regul

Oracle 11G新特性详解

一.数据库管理部分 1. 数据库重演(Database Replay) 这一特性可以捕捉整个数据的负载,并且传递到一个从备份或者standby数据库中创建的测试数据库上,然后重演负载以测试系统调优后的效果. 2. SQL重演(SQLReplay) 和前一特性类似.但是只是捕捉SQL负载部分,而不是全部负载. 3.计划管理(Plan Management) 这一特性允许你将某一特定语句的查询计划固定下来,无论统计数据变化还是数据库版本变化都不会改变它的查询计划. 4.自动诊断知识库(Automat

ORACLE 11g新特性--延迟段创建

很多数据库都有存在空表的情况,较多的空表会占用大量的磁盘空间,ORACLE 在11gR2版本推出延迟段创建新特性,所谓延迟段创建,顾名思义就是在创建一张新空表的时候,ORACLE默认不会为这张空表分配段(SEGMENTS),也就是不会为这张空表分配空间,这样就避免了空表占用空间的情况,如下实验: SQL> SELECT * FROM V$VERSION; BANNER ----------------------------------------------------------------

Oracle 11g新特性direct path read引发的系统停运故障诊断处理

黎俊杰 | 2016-07-28 14:37 声明:部分表名为了脱敏而用XX代替 1.故障现象 (1)一个业务系统输入用户名与密码后无法进入首页,表现为一直在运行等待,运行缓慢 (2)整个系统无法正常使用,接近停运状态 2.故障解决方法 调整数据库参数alter system setevent='10949 trace name context forever, level 1'来关闭"direct path read"(直接路径读)特性,使SQL语句可以从缓存中查询数据,达到降低I/

[引用分区表]Oracle 11g新特性之引用分区表

        引用分区表是Oracle11g引入的新特性,在特定场合十分好用,解决了"并非所有表都具有您需要根据其进行分区的列"这个问题.          根据Oracle官方文档介绍,引用分区表是通过PARTITION BY REFERENCE语句来实现,需要指定引用约束的名称,该约束将成为应用到该引用分区表所使用的约束.这个约束必须启用和执行.    和其他分区表一样,你可以制定对象级别的默认属性,也可以随意在特定分区设置属性,覆盖对象级别的属性.    下面的sql语句创建了

【DataGuard】11g 新特性:Active Data Guard

  在Oracle 11g之前,物理备库(physical Standby)在应用redo的时候,是不可以打开的,只可以mount.从11g开始,在应用redo的时候,物理备库可以处于read-only模式,这就称为Active Data Guard .通过Active Data Guard,可以在物理备库进行查询或者导出数据,从而减少对主库的访问和压力. Active Data Guard适用于一些只读性的应用,比如,有的应用程序只是查询数据,进行一些报表业务,不会产生redo数据,这些应用可

Oracle 11g新特性之收集多列统计信息

        通常,当我们将SQL语句提交给Oracle数据库时,Oracle会选择一种最优方式来执行,这是通过查询优化器Query Optimizer来实现的.CBO(Cost-Based Optimizer)是Oracle默认使用的查询优化器模式.在CBO中,SQL执行计划的生成,是以一种寻找成本(Cost)最优为目标导向的执行计划探索过程.所谓成本(Cost)就是将CPU和IO消耗整合起来的量化指标,每一个执行计划的成本就是经过优化器内部公式估算出的数字值.         我们在写SQ

Oracle 11g 新特性 Flashback Data Archive 使用实例_oracle

Flashback Data Archive(闪回日志归档)其实理解为长时间的保存undo数据,对于某些重要的表可以自定义它的历史记录保存期限,它的的种种行为与undo表空间十分相似,使用的时候也是完全透明的,用户不知道它的查询一致性视图数据是来自undo还是Flashback Data Archive,现来分析它与undo的几点不同: 1.Flashback Data Archive仅记录UPDATE和DELETE语句,不记录INSERT语句. 2.Flashback Data Archive