Oracle锁3:DDL锁

当一个正在进行的DDL操作执行在或者引用了schema对象(注)时,Data dcictionary(DDL)锁用于保护该schema对象的定义,在DDL操作执行期间仅锁定单个schema对象,数据库从不锁定整个数据字典。

Oracle数据库自动地请求DDL锁,用户不能显示请求DDL锁。例如,如果用户创建一个存储过程,那么数据库自动为存储过程中引用的对象请求DDL锁,这些DDL锁防止存储过程被编译完成前这个对象被改变或者删除。

排它DDL锁

一个排它DDL锁阻止其它session获取DDL或DML锁。大部分DDL操作,除了在“共享DDL锁”中描述的,都会为资源要求排它DDL锁,例如:当ALTER TABLE正在为表格增加一列时,DROP TABLE不允许被执行,反之亦然。

排它DDL锁持续直到DDL操作执行完成并自动提交,在这期间,如果其它操作需要使用该schema对象,则需要等待直到老的DDL锁被释放。

共享DDL锁

共享DDL锁防止会破坏结构的冲突的DDL操作,但是允许类似的DDL操作并行执行。

例如,当一个CREATE PROCEDURE被执行时,事务会为所有的引用表要求共享DDL锁,其它事务能并行地创建引用相同表的存储过程并在相同的表上请求共享DDL锁,但是没有事务能请求一个排它DDL锁在任何被引用的表上。

共享DDL锁持续直到DDL操作执行完成并自动提交,因此,获取一个共享DDL锁的事务被保证事务执行期间schema对象保持不变。

可中断解析锁

SQL语句和PL/SQL块中引用的每个schema对象都会使用一个解析锁,因为如果一个引用对象被改变或者删除,对应的共享SQL域(注)将失效。一个解析锁被叫做可中断解析锁(breakable parse lock),因为它不阻止任何DDL操作并且为了允许冲突的DDL操作能被中断。

一个解析锁在解析SQL语句时被要求,如果语句的共享SQL域被保留在共享池中,锁将被一直持有。

注:

schema是数据库对象的名字集合;

schema对象是在一个schema中存储的数据的逻辑结构;

共享SQL域(shared SQL area)指在共享池(shared pool)中为一个SQL语句保存的解析树(parse tree)和执行计划,一个语句只有一个共享SQL域存在。

时间: 2024-10-01 06:23:12

Oracle锁3:DDL锁的相关文章

oracle学习----DDL锁理解

DDL锁分为三种 1.排他DDL锁 2.共享DDL锁 3.可中断解析锁 大部分DDL都带有排他DDL锁,如一个表被修改中,可以使用select查询数据,但是大多数操作都是不允许执行的,包括所有其他DDL语句. 但是在oracle中,有一些DDL操作没有DDL锁也发生.比如online创建索引 在线创建索引,会带有DL,OD,低级TM锁,但是没有排他DDL锁 DL 直接加载锁,对表进行直接加载路径与创建索引不能同时进行. OD锁 online DDL支持真正的联机. 低级TM锁 防止其他DDL发生

ORACLE的TM锁和TX锁

根据保护的数据不同,ORACLE的数据库锁分为以下几大类: 1.DML锁(data locks数据锁),用于保护数据的完整性: 2.DDL锁(dictionary locks字典锁),用于保护数据库对象的结构,例如表.索引的结构定义: 3.内部锁或闩(internal locks or latches),用于保护内部结构 在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁. 当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的

oracle之事务和锁

一.事务 首先,我们先介绍什么是PL/SQL.什么是PL/SQL?PL/SQL也是一种程序语言,叫做过程化程序语言(procedural Language/SQL),PL/SQL是oracle数据库对SQL语句的扩展.在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断,循环等操作实习复杂的功能或者计算的程序语言. 1.事务的介绍与应用. 什么是事务,事务是之一个业务逻辑单元执行的一系列操作,这些操作作为一个整体

Oracle事务之一:锁和隔离

Oracle事务之一:锁和隔离 一. 事务概述 事务管理是数据库处理的核心.数据库既要保证用户能并发地执行事务,还要保证数据库的一致性. 当第一条可执行的SQL开始执行,就隐形地开始了一个事务,直到遇到下面的几种情况: 1.Commit:提交事务. 2.RollBack:回滚. 3.DDL语句:执行和提交DDL语句结果前首先提交当前所有DML语句,成为隐式提交. 4.程序正常退出:自动提交. 5.不正常的程序失败:隐式回滚. 二.事务特性 事务的四个特性:A(原子性).C(一致性).I(隔离性)

Oracle TM锁和TX锁

本文主要介绍Oracle中的TM锁,了解当我们通过sql语句访问数据库中的同一表对象时,此时如果多个用户对同一表对象进行操作的话,可能会产生数据不一致,关于数据不一致,请参考数据库事务的一致性和原子性浅析,oracle解决事务在多线程情况下的数据不一致问题,主要是通过两种锁,一种是悲观锁,也就是我接下来要说的,另一种是乐观锁,关于这两种锁的介绍同样也请参考数据库事务的一致性和原子性浅析. TM锁和TX锁就是悲观锁的一部分,那么oracle是怎么通过TM锁TX锁来解决多用户访问同一对象,保证数据一

Oracle数据库悲观锁与乐观锁详解

数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁.什么叫悲观锁呢,悲观锁顾名思义,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住.而乐观锁就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息,让用户决定如何去做. 先从悲观锁开始说.在SqlServer等其余很多数据库中,数据的锁定通常采用页级锁的方式,也就是说对一张表内的数据是一种串行化的更新插

Oracle学习笔记七 锁

锁的概念 锁是数据库用来控制共享资源并发访问的机制. 锁用于保护正在被修改的数据 直到提交或回滚了事务之后,其他用户才可以更新数据 对数据的并发控制,保证一致性.完整性.             并行性 -允许多个用户访问同一数据 一致性 - 一次只允许一个用户修改数据 完整性 - 为所有用户提供正确的数据.如果一个用户进行了修改并保存,所做的修改将反映给所有用户 锁的类型 行级锁:对操作的数据行进行锁定,防止其他用户(连接)进行修改. 表级锁:对整个表进行锁定. 行级锁 对正在被修改的行进行锁

ORACLE查询数据库的锁表情况

  查询数据库的锁表情况语句如下: SELECT p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name FROM v$process p,v$session a, v$locked_object b,all_objects c WHERE p.addr=a.paddr AND a.process=b.process AND c.object_id=b.object_id 如果表因为某些情况出现死

理解Oracle TM和TX锁

在Oracle中有很多锁,通过v$lock_type视图可以查看Oracle中所有类型的锁,在本篇文章中我们熟悉一下TM和TX锁的类型 SQL> select * from v$lock_type where type in ('TM','TX'); TYPE NAME ID1_TAG ID2_TAG IS_USER DESCRIPTION -------- --------------- ------------------ ------------------- ------- ------