专栏首页小麦苗的DB宝专栏【DB笔试面试661】在Oracle中,在新建或重建索引时有哪些锁?

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

题目部分

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

答案部分

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

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

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

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

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

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

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

在Oracle 11g带ONLINE的新建或重建索引的情况下:

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

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

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

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

& 说明:

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

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

本文分享自微信公众号 - DB宝(xiaomaimiaolhr),作者:小麦苗best

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【DB笔试面试565】在Oracle中,为什么索引没有被使用?

    “为什么索引没有被使用”是一个涉及面较广的问题。有多种原因会导致索引不能被使用。首要的原因就是统计信息不准,第二原因就是索引的选择度不高,使用索引比使用全表扫描...

    小麦苗DBA宝典
  • 【DB笔试面试566】在Oracle中,什么是索引分裂?

    索引分裂(Index Block Split),就是索引块的分裂。当一次DML操作修改了索引块上的数据,但是旧有的索引块没有足够的空间去容纳新修改的数据时,将分...

    小麦苗DBA宝典
  • 【DB笔试面试593】在Oracle中,表的访问方式有哪几种?

    访问表的方式也叫优化器访问路径,主要有3种访问路径:全表扫描(FULL TABLE SCAN,FTS)、索引扫描(INDEX SCAN)和ROWID访问。

    小麦苗DBA宝典
  • Oracle Sql优化

    3.Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。NOT...

    斯文的程序
  • MySQL索引设计概要

    在关系型数据库中设计索引其实并不是复杂的事情,很多开发者都觉得设计索引能够提升数据库的性能,相关的知识一定非常复杂。 ? 然而这种想法是不正确的,索引其实并不是...

    用户1263954
  • elasticsearch之基础

    Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它可以在很短的时间内存储,搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核...

    王念博客
  • python之画图

    今天做的是用python实现画图,画出你想要的图案,只要你的想象力足够丰富,以及能够合理的运用这个turtle模块,基本可以画出你想要的东西出来。

    sjw1998
  • explain 深入剖析 MySQL 索引及其性能优化指南

    0.SQL标准的执行流程(select) (8) SELECT (9) DISTINCT (11) <TOP_specification> <select_...

    用户1177713
  • X-AI开源项目(人工智能可视化管理平台)

    http://59.110.242.233:8082/bd/faceBD/detectface 人脸检测

    小帅丶
  • Elasticsearch 的一些关键概念

    我更喜欢把 Elasticsearch 作为一种 nosql 去理解,它的一些开发概念和 MongoDB 以及 Redis 没有太大的区别,不过了解 Elast...

    潘成涛

扫码关注云+社区

领取腾讯云代金券