【DB笔试面试661】在Oracle中,在新建或重建索引时有哪些锁?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/lihuarongaini/article/details/102597818

640?wx_fmt=gif

题目 部分

在Oracle中,在新建或重建索引时有哪些锁?

     

答案部分

可以利用1070410046事件跟踪新建或重建索引过程中的锁信息,命令为:

1alter session set events '10704 trace name context forever,level 10';
2alter session set events '10046 trace name context forever,level 12';

新建或重建索引的锁信息如下图所示:

640?wx_fmt=png

5-15 新建或重建索引的锁信息

不带ONLINE的新建或重建索引的SQL语句获取的是4TM,它会阻塞任何DML操作

Oracle 10g中,带ONLINE的新建或重建索引的SQL语句在开始和结束的时候获取的是4TM锁,而在读取表数据的过程中获取的是2TM,所以,在Oracle 10g中,即使加上ONLINE也会阻塞其它会话的DML操作

Oracle 11g中,带ONLINE的新建或重建索引的SQL语句在整个执行过程中获取的是2TM,并不会阻塞其它会话的DML操作,但是在创建或重建索引的过程中,其它的会话产生的事务会阻塞索引的创建或重建操作,所以必须结束其它会话的事务才能让创建或重建索引操作完成。所以应该避免在业务高峰期创建索引。

Oracle 11gONLINE的新建或重建索引的情况下:

① 过程中会持有ODONLINE DDL)、DLDirect Loader Index Creation)两种类型的锁,在Oracle 10g下只有DL锁没有OD锁。

② 表级锁TM的持有模式为2RSRow Share)与3RXRow Exclusive)类型的锁互相兼容,因此不会在表级发生阻塞。

③ 阻塞发生在行级锁申请阶段,即请求的4SShare)类型的锁与执行DML的会话已经持有的6XExclusive)锁之间存在不兼容的情况;相比非ONLINE方式的表级锁,锁的粒度上更加细化,副作用更小。

④ 新增以SYS_JOURNAL_”为前缀的IOT表,记录与索引创建动作同时进行的其它DML操作修改过的记录,等到索引创建完成前将IOT表里的记录合并至索引中并删除IOT表。

& 说明:

有关Oracle数据库锁的更多内容可以参考我的BLOGhttp://blog.itpub.net/26736162/viewspace-2128896/

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

640?wx_fmt=gif

---------------优质麦课------------

640?wx_fmt=png

详细内容可以添加麦老师微信或QQ私聊。

640?wx_fmt=gif

About Me:小麦苗

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

640?wx_fmt=gifDBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

640?wx_fmt=gif

640?wx_fmt=gif

640?wx_fmt=png

猜你喜欢

转载自blog.csdn.net/lihuarongaini/article/details/102597818
今日推荐