一、oracle锁的特点

  1、oracle自动施加和释放锁

  2、oracle默认使用行级锁

  3、oracle默认把锁的信息放在数据块中

  4、oracle不支持锁的升级

  5、锁在事务中使用,事务结束后oracle释放锁;如果事务撤销到保存点,则保存点之后的操作持有的锁被释放。

  6、任何oracle锁模式都不影响select,反之亦然。

二、锁定的对象

  1、用户对象 如表、索引、行

  2、系统对象 如数据字典、内存中的共享数据结构

三、锁的粒度

  oracle使用行级粒度锁定对象

四、锁的类型

  1、DML锁:保护表或者索引中的数据。在进行DML操作时,oracle在被更改的行上施加行级锁

  2、DDL锁:在进行DML操作时,oracle自动施加一个表级DDL锁;在进行单纯的DDL操作时,oracle也会在表上施加DDL锁。

  3、内部锁:保护诸如表空间、数据文件、撤销段这样的结构的访问

  4、闩:保护SGA中的共享数据结构的内部机制

  5、数据字典锁:oracle在字典对象被修改时使用的锁

  6、分布锁:分布式数据库系统或者RAC中使用的特殊锁定机制

五、显示锁

  用户可以根据需要显示施加锁,如:lock table table_name  in lock_mode mode [nowait]

  --lock_mode的取值有:share、exclusive、row share、row exclusive、share row exclusive、share update

  也可以使用select .... from table_name for update [nowait];

六、阻塞锁

  一个事务持有其他事务请求的锁,就出现了阻塞锁。

  使用视图v$session查询阻塞关系:

  select username,sid,serial#,blocking_session from v$session    --block_session表示阻塞锁持有者的会话id

  where blocking_session_status='VALID';

  也可以使用v$session和dba_blockers连接查询阻塞锁持有者的信息 如:

  select .... from v$session s,dba_blockers b

  where s.sid=b.helding_session;

  还可以dba_waiters,dba_locks,v$lock等查看锁的情况。

  杀死阻塞会话:1、查询阻塞锁持有者的sid,serial#

                         2、alter system kill session 'sid,serial#';

 

七、死锁

  两个事务相互请求对象持有的锁,这是就发生了死锁。oracle自动解决死锁,杀死持有最近应用的锁的会话,终止其事务。

八、oracle锁管理

  1、执行$oracle_home/rdbms/admin下的catblock.sql和utllockt.sql

    catblock.sql创建与有关的视图 如:dba_waiters,dba_blockers,dba_locks等

    utllocks.sql创建一个树形结构的锁等待图,通过执行该脚本文件可以看到会话之间的阻塞关系

  2、使用oem管理所

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值