常用DDL和DML操作都加什么样的锁

Oracle TM锁的类型
锁模式 锁描述 解释
0 none  无锁
1 null  是oracle预留模式,通常仅起标志作用
2 Row-S 行共享(RS) 行级共享锁,是限制最少的TM锁,可以提供最高程度的并发性,其他会话可以对锁定的表进行任何类型的DML操作,还可以与其他会话锁并存。
3 Row-X 行专用(RX) 行级排他锁,通常已经有事务修改行或者select…for update 修改结果集,允许其他事务对锁定的表进行select insert update delete或lock table操作
4 Share 共享锁(S) 共享锁,其他事务可以查询锁定的表,但不能修改(阻止其他DML操作);只允许当前事务修改,但允许多个事务持有它 
5 S/Row-X 共享行专用(SRX) 共享行级排他锁,同一时间只允许一个事务持有和修改锁定的表,其他事务只能查询但不能修改。
6 exclusive 专用(X) 排他锁,独立访问使用。是限制最高的TM锁,禁止其他事务执行任何DML语句或者lock table。

综上所述一句话:数字越大级别越高,影响的操作就越多。

Oracle锁模式互斥关系图(仅表示TM与TM之间的)

锁模式

锁名称

允许级别

互斥级别

2

行级共享锁

2 3 4 5 6

6

3

行级排他锁

2 3

4 5 6

4

共享锁

2 4

3 5 6

5

共享行级排他锁

2

3 4 5 6

6

排他锁

 

2 3 4 5 6



先创建表并插入数据
SQL> create table text as select * from dba_objects;

SQL> insert into text select * from text;
.....
11133696 rows created.

SQL> create table text_t1 as select * from text;

SQL> create table text_t2 as select * from text;

SQL> select object_id,object_name from dba_objects where object_name in ('TEXT_T1','TEXT_T2');

 OBJECT_ID OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
     88930 TEXT_T2
     88902 TEXT_T1


一、Create index锁的跟踪测试

Session 1
SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM=1;
     
 SID

----------
       131
SQL> alter session set events '10704 trace name context forever, level 12';
SQL> create index idx_text01 on text_t1(OBJECT_ID);

Session 2
在索引创建之间,观察V$lock中131会话持有锁的动态状
SQL> select * from v$lock where sid=131;
ADDR KADDR SID TY        ID1  ID2   LMODE    REQUEST CTIME    BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000000BED5CBB8 00000000BED5CC10 131 AE        100    0       4  0  7250 0
00000000BED5D398 00000000BED5D3F0 131 TO      79833    1       3  0   116 0
00000000BED5D650 00000000BED5D6A8 131 DL      88902    0       3  0    32 0
00000000BED5D9D0 00000000BED5DA28 131 DL      88902    0       3  0    32 0
00007F2691BCC028 00007F2691BCC088 131 TM      88902    0       4  0    32 0
00007F2691BCC028 00007F2691BCC088 131 TM 18    0       3  0    32 0
00000000BBE04B08 00000000BBE04BB8 131 TS 14   25855378       6  0    16 0
00000000BBEB66D8 00000000BBEB6750 131 TX     262177 1318       6  0    32 0

Session 1
SQL> create index idx_text01 on text_t1(OBJECT_ID);

Index created.

SQL> alter session set events '10704 trace name context off';


Linux
[oracle@localhost trace]$ more orcl_ora_24114.trc 从操作系统中提取日志进行分析


TM锁  4号 指向TEXT_T1        TM-00015b46-00000000  开头持有结束释放

TM锁  3号 指向OBJ$ 对象基表  TM-00000012-00000000  多次持有多次释放(循环)
TM锁  3号 指向SEG$ 段基表    TM-0000000e-00000000  多次持有多次释放(循环)
TM锁  3号 指向ICOL$          TM-00000014-00000000  末尾出现一次,结束释放
TM锁  3号 指向IND$ 索引基表  TM-00000013-00000000  末尾出现一次,结束释放

可知:Create index操作是向表本身加了4号TM锁,由此可知,Create index过程中,其他事务还是可以查询到text_t1表的信息,但DML操作会被堵塞。
同时会以3号TM锁去锁定和修改OBJ$,SEG$ ICOL$IND$ 基表。



持有过的其他锁:
TX锁 6号  多个
CU锁 6号  游标绑定锁Cursor bind     
DL锁 3号  指向TEST_T1   Direct loader parallel index create  DL-00015af4-00000000 
TT锁 4号  指向I_OBJ#      临时表队列锁Temporary table enqueue  TT-00000003-00000010 
TS锁 6号  指向SEG$      New block allocation enqueue (ID2=1) TS-0000000e-01842082
HW锁 6号 指向SEG$      特定区块空间管理锁                   HW-0000000e-01842082 
PW锁 4号                                                                  PW-00000001-00000000

二、alter index rebuild跟踪测试
Session 1
SQL> update text_t1 set OBJECT_ID=99999;
SQL> alter session set events '10704 trace name context forever, level 12';
SQL> alter index idx_text01 rebuild;

Session 2
依旧观察V$lock中的状

SQL> select * from v$lock where sid=131;
ADDR KADDR SID TY        ID1  ID2   LMODE    REQUEST CTIME    BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000000BED5CBB8 00000000BED5CC10 131 AE        100    0       4  0  8933 0
00000000BED5D1D8 00000000BED5D230 131 DL      88902    0       3  0    27 0
00000000BED5D398 00000000BED5D3F0 131 TO      79833    1       3  0  1799 0
00000000BED5D810 00000000BED5D868 131 OD      88903    0       6  0    27 0
00000000BED5D8F0 00000000BED5D948 131 DL      88902    0       3  0    27 0
00007F2691BCA3A8 00007F2691BCA408 131 TM      88902    0       4  0    27 0
00000000BBE04B08 00000000BBE04BB8 131 TS 14   26321042       6  0    12 0
00000000BBED8048 00000000BBED80C0 131 TX     393222 2011       6  0    12 0

Session 1
SQL> alter session set events '10704 trace name context off';

Linux
[oracle@localhost trace]$ more orcl_ora_43002.trc 从操作系统中提取dump日志进行分析


TM锁 4号 指向TEXT_T1          TM-00015b46-00000000 开头持有结束释放

TM锁 3号 指向SEG$ 段基表     TM-0000000e-00000000 重复两次
TM锁 3号 指向WRI$_OPTSTAT_IND_HISTORY TM-000001eb-00000000 
TM锁 3号 指向CACHE_STATS_1$  TM-000001c9-00000000
TM锁 3号 指向IND_STATS$      TM-000001c7-00000000
TM锁 3号 指向IND$ 索引基表   TM-00000013-00000000
TM锁 3号 指向OBJ$ 对象基表   TM-00000012-00000000

可知:alter index rebuild操作是向表本身加了4号TM锁,与Create index过程中持有锁是一样的。
不同的是,在Create index的3号TM锁基础上,index rebuild会追加锁定WRI$_OPTSTAT_IND_HISTORY,CACHE_STATS_1$,IND_STATS$对象,以完成index rebuild工作。


持有过的其他锁:
TX锁 6号  多个
DL锁 3号 指向TEXT_T1        DL-00015b46-00000000
TT锁 4号 指向I_OBJ#         TT-00000003-00000010 循环持有
TS锁 6号 指向SEG$           TS-0000000e-0191a093
HW锁 6号 指向SEG$           HW-0000000e-0191a082


三、Create index online跟踪观察
新开个会话
Session 3
SQL> conn cyh/oracle
SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM=1;
       SID
----------
       215

SQL> alter session set events '10704 trace name context forever, level 12';

Session altered.

SQL> create index idx_text03 on text_t2(OBJECT_ID) online;

Session 2
继续观察V$lock中的状态
SQL> select * from v$lock where sid=215;
ADDR KADDR SID TY        ID1  ID2   LMODE    REQUEST CTIME    BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000000BED5C9F8 00000000BED5CA50 215 OD      88930    0       4  0    29 0
00000000BED5CF38 00000000BED5CF90 215 TO      79833    1       3  0   833 0
00000000BED5D650 00000000BED5D6A8 215 AE        100    0       4  0  1052 0
00000000BED5D8F0 00000000BED5D948 215 DL      88930    0       3  0    29 0
00000000BED5DFF0 00000000BED5E048 215 DL      88930    0       3  0    29 0
00007F2691BCC028 00007F2691BCC088 215 TM      88930    0       2  0    29 0
00007F2691BCC028 00007F2691BCC088 215 TM      88932    0       4  0    29 0
00000000BBE04B08 00000000BBE04BB8 215 TS 14   29360274       6  0    17 0
00000000BBEB48A8 00000000BBEB4920 215 TX     393218 2107       6  0    17 0
00000000BBEE55A8 00000000BBEE5620 215 TX     393228 2106       6  0    29 0


SQL> select object_name from dba_objects where object_id=88932;
OBJECT_NAME
--------------------------------------------------------------------------------
SYS_JOURNAL_88931

Session 1
SQL> create index idx_text03 on text_t2(OBJECT_ID) online;

Index created.

SQL> alter session set events '10704 trace name context off';

Session altered.

Linux
[oracle@localhost trace]$ more orcl_ora_55118.trc 从操作系统中提取dump日志进行分析


TEXT_T2表加了2号锁,临时对象SYS_JOURNAL_88931加了4号锁:
1.TM锁  2号 指向TEXT_T2                      TM-00015b62-00000000 开头持有,最后释放
2.TM锁  4号 指向SYS_JOURNAL_88931     TM-00015b64-00000000 多次持有多次释放,最终释放在TM-00015b62之前

TM锁  3号 指向OBJ$ 对象基表            TM-00000012-00000000  多次持有多次释放
TM锁  3号 指向CON$                     TM-0000001c-00000000  多次持有多次释放
TM锁  3号 指向SEG$ 段基表              TM-0000000e-00000000  多次持有多次释放
TM锁  3号 指向ICOL$                    TM-00000014-00000000  多次持有多次释放
TM锁  3号 指向IND$ 索引基表            TM-00000013-00000000  多次持有多次释放
TM锁  3号 指向TAB$                     TM-00000004-00000000  多次持有多次释放
TM锁  3号 指向COL$                     TM-00000015-00000000  多次持有多次释放
TM锁  3号 指向CCOL$                    TM-00000020-00000000  持有两次释放两次
TM锁  3号 指向CDEF$                    TM-0000001f-00000000  持有两次释放两次
TM锁  3号 指向IND_ONLINE$              TM-00000092-00000000  持有两次释放两次 
TM锁  3号 指向SDO_GEOR_DDL__TABLE$$    TM-000137d9-00000000  持有两次释放两次
TM锁  3号 指向IND_STATS$               TM-000001c7-00000000  持有两次释放两次
TM锁  3号 指向WRI$_OPTSTAT_IND_HISTORY TM-000001eb-00000000
TM锁  3号 指向OBJECT_USAGE             TM-000000db-00000000
TM锁  3号 指向CACHE_STATS_1$           TM-000001c9-00000000
TM锁  3号 指向COM$                     TM-00000089-00000000
TM锁  3号 指向TRANSIENT_IOT$           TM-000000b6-00000000
TM锁  3号 指向SUMDELTA$                TM-00000282-00000000
TM锁  3号 指向SUMPARTLOG$              TM-0000027f-00000000
TM锁  3号 指向SNAP_LOADERTIME$         TM-00000286-00000000
TM锁  3号 指向I_TRIGGERCOL1            TM-00000092-00000000
TM锁  3号 指向IDL_UB1$                 TM-000000e1-00000000
TM锁  3号 指向IDL_CHAR$                TM-000000e2-00000000
TM锁  3号 指向ICOLDEP$                 TM-00000072-00000000
TM锁  3号 指向JIJOIN$                  TM-00000097-00000000
TM锁  3号 指向JIREFRESHSQL$            TM-0000009b-00000000
TM锁  3号 指向COLTYPE$                 TM-00000053-00000000
TM锁  3号 指向SUBCOLTYPE$              TM-00000056-00000000
TM锁  3号 指向NTAB$                    TM-00000058-00000000
TM锁  3号 指向LOB$                     TM-00000050-00000000
TM锁  3号 指向REFCON$                  TM-0000005c-00000000
TM锁  3号 指向OPQTYPE$                 TM-0000005f-00000000

说明:Create index online持有2号TM锁在TEXT_T2上,到最后结束时才释放,在此期间,重建索引并不影响其他事务在表上的DML操作,也保证了一定程度的并发性;另外,index online时oracle产生了一个SYS_JOURNAL_88931系统临时日志表,该表用来存放online时索引变化的记录志,并以4号TM锁来锁定,并在TEXT_T2的2号TM锁释放之前释放Create index online相比Create index,TM锁定的基表更多,过程更复杂。


持有过的其他锁:
CU锁  6号 游标绑定锁Cursor bind
TX锁  6号 独占行锁
DL锁  3号 指向TEXT_T2  DL-00015b62-00000000
DL锁  3号 指向SYS_JOURNAL_88931    DL-00015b64-00000000
ZH锁  6号 指向SYS_JOURNAL_88931    ZH-00015b64-00000001  上面DL锁释放后,加的6号ZH锁
ZH锁  6号 指向SYS_JOURNAL_88931    ZH-00015b64-00000002
ZH锁  6号 指向SYS_JOURNAL_88931    ZH-00015b64-00000003
ZH锁  6号 指向SYS_JOURNAL_88931    ZH-00015b64-00000004
OD锁  4号 指向TEXT_T2  OD-00015b62-00000000
TT锁  4号 指向SEG$     TT-0000000e-00000000
TS锁  4号 指向SEG$     TS-0000000e-01842082
HW锁  6号 指向SEG$     HW-0000000e-01842082
FB锁  6号 指向SEG$     FB-0000000e-01842080
SE锁  4号              SE-000000d6-00000057
TT锁  4号 指向I_OBJ#   TT-00000003-00000010
HW锁  6号 指向SEG$     HW-0000000e-0184208a                      
RO锁  4号              RO-00010017-00000001
RO锁  4号              RO-00010017-00000002
CR锁  6号              CR-00010017-00000001
CR锁  6号              CR-00010017-00000002




四、Alter index rebuild online跟踪观察
SQL> update text_t2 set OBJECT_ID=99999 where OBJECT_ID<20000;
SQL> alter session set events '10704 trace name context forever, level 12';
SQL> alter index idx_text03 rebuild online;


Session 2
在索引建好之前,查看V$lock中的状态
SQL> select * from v$lock where sid=215;
ADDR KADDR SID TY        ID1  ID2   LMODE    REQUEST CTIME    BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
00000000BED5BE80 00000000BED5BED8 215 DL      88930    0       3  0     5 0
00000000BED5CF38 00000000BED5CF90 215 TO      79833    1       3  0 12388 0
00000000BED5D018 00000000BED5D070 215 OD      88930    0       4  0     5 0
00000000BED5D1D8 00000000BED5D230 215 DL      88930    0       3  0     5 0
00000000BED5D650 00000000BED5D6A8 215 AE        100    0       4  0 12607 0
00000000BED5D730 00000000BED5D788 215 OD      88946    0       6  0     5 0
00007F2691BCA3A8 00007F2691BCA408 215 TM      88930    0       2  0     5 0
00007F2691BCA3A8 00007F2691BCA408 215 TM      88948    0       4  0     5 0
00000000BBEE5FB8 00000000BBEE6030 215 TX     327691 2218       6  0     5 0

SQL> select object_name from dba_objects where object_id=88946;

OBJECT_NAME
--------------------------------------------------------------------------------
IDX_TEXT03    OD锁ID1指向了要在线重建的索引

SQL> select object_name from dba_objects where object_id=88948;

OBJECT_NAME
--------------------------------------------------------------------------------
SYS_JOURNAL_88946


Session 1

SQL> alter index idx_text03 rebuild online;

Index created.

SQL> alter session set events '10704 trace name context off';

Session altered.


TEXT_T2表加了2号锁,临时对象 SYS_JOURNAL_88946加了4号锁:
TM锁   2号 指向TEXT_T2           TM-00015b62-00000000 
TM锁   4号 指向SYS_JOURNAL_88946 TM-00015b74-00000000 

TM锁   3号 指向OBJ$              TM-00000012-00000000
TM锁   3号 指向CON$              TM-0000001c-00000000 重复多次
TM锁   3号 指向SEG$              TM-0000000e-00000000
TM锁   3号 指向ICOL$             TM-00000014-00000000
TM锁   3号 指向IND$              TM-00000013-00000000
TM锁   3号 指向TAB$              TM-00000004-00000000
TM锁   3号 指向COL$              TM-00000015-00000000
TM锁   3号 指向CCOL$             TM-00000020-00000000
TM锁   3号 指向CDEF$             TM-0000001f-00000000
TM锁   3号 指向IND_STATS$        TM-000001c7-00000000
TM锁   3号 指向IND_ONLINE$       TM-00000092-00000000 
TM锁   3号 指向INDREBUILD$       TM-000000b4-00000000
TM锁   3号 指向WRI$_OPTSTAT_IND_HISTORY TM-000001eb-00000000
TM锁   3号 指向SDO_GEOR_DDL__TABLE$$ TM-000137d9-00000000
TM锁   3号 指向OBJECT_USAGE      TM-000000db-00000000
TM锁   3号 指向COM$              TM-00000089-00000000
TM锁   3号 指向HIST_HEAD$        TM-000001c0-00000000
TM锁   3号 指向COMPRESSION$      TM-000000b6-00000000 
TM锁   3号 指向SUMDELTA$         TM-00000282-00000000 
TM锁   3号 指向SUMPARTLOG$       TM-0000027f-00000000
TM锁   3号 指向SNAP_LOADERTIME$  TM-00000286-00000000
TM锁   3号 指向IDL_UB1$          TM-000000e1-00000000
TM锁   3号 指向IDL_CHAR$         TM-000000e2-00000000
TM锁   3号 指向IDL_UB2$          TM-000000e3-00000000
TM锁   3号 指向IDL_SB4$          TM-000000e4-00000000
TM锁   3号 指向NCOMP_DLL$        TM-000000f2-00000000
TM锁   3号 指向ECOL$             TM-0000007b-00000000 
TM锁   3号 指向COLTYPE$          TM-00000053-00000000 
TM锁   3号 指向OBJAUTH$          TM-0000003d-00000000
TM锁   3号 指向NTAB$             TM-00000058-00000000 
TM锁   3号 指向LOB$              TM-00000050-00000000 
TM锁   3号 指向REFCON$           TM-0000005c-00000000 
TM锁   3号 指向OPQTYPE$          TM-0000005f-00000000 
TM锁   3号 指向ICOLDEP$          TM-00000072-00000000 
TM锁   3号 指向JIJOIN$           TM-00000097-00000000 
TM锁   3号 指向JIREFRESHSQL$     TM-0000009b-00000000 

说明:Alter index rebuild online与Create index online类似,都是在线操作索引。完成过程中持有的锁相对offline比较多和复杂。持有2号TM锁在TEXT_T2上,到最后结束时才释放,不堵塞DML操作,也保证了表的并发性;另外产生了一个SYS_JOURNAL_88946系统临时日志表用来存放索引变化的记录以4号TM锁锁定,并在TEXT_T2的2号TM锁释放之前释放。当新的索引创建完成后,将临时日志表SYS_JOURNAL_88946中的记录添加到新的索引中,然后drop掉旧索引,rebuild;Alter index rebuild online相比Alter index rebuild,TM锁定的基表更多,过程更复杂。


持有过的其他锁:
CU锁   6号 游标绑定锁Cursor bind
TX锁   6号 独占行锁
OD锁   6号 指向索引IDX_TEXT03    OD-00015b72-00000000
TT锁   4号 指向SEG$              TT-0000000e-00000010
DL锁   3号 指向TEXT_T2           DL-00015b62-00000000
DL锁   3号 指向SYS_JOURNAL_88946 DL-00015b74-00000000
ZH锁   6号 指向SYS_JOURNAL_88946 ZH-00015b74-00000001
ZH锁   6号 指向SYS_JOURNAL_88946 ZH-00015b74-00000002
ZH锁   6号 指向SYS_JOURNAL_88946 ZH-00015b74-00000003
ZH锁   6号 指向SYS_JOURNAL_88946 ZH-00015b74-00000004 
TS锁   6号 指向SEG$              TS-0000000e-01869782
HW锁   6号 指向SEG$              HW-0000000e-01869782
FB锁   6号 指向SEG$              FB-0000000e-01869780
TT锁   4号 指向I_OBJ#            TT-00000003-00000010
TS锁   6号 指向SEG$              TS-0000000e-018a8583
RO锁   6号                       RO-00010017-00000001
RO锁   6号                       RO-00010017-00000002
CR锁   6号                       CR-00010017-00000001
CR锁   6号                       CR-00010017-00000002


总结:
offline create index /rebuild onlincreate index /rebuild 的不同点
1.offline始终持有4号TM锁来锁定表,堵塞其他事务DML操作;online持有2号TM锁来锁定表,不会堵塞其他事务的DML操作,并发性能更好;
2.online会自动产生SYS_JOURNAL_XXXX的系统临时表来记录日志;
3.online时3TM锁相比offline时要杂得多。

五、INSERT、UPDATE、DELETE
观察过程略..

1. INSERT
insert into TEXT_T2 select * from text;
TM锁 3号 指向TEXT_T2 TM-00015b62-00000000

2.UPDATE
update text_t2 set OBJECT_ID=9999;
TM锁 3号 指向TEXT_T2 TM-00015b62-00000000

3 .DELETE
delete from text_t2;
TM锁 3号 指向TEXT_T2 TM-00015b62-00000000

执行 INSERT、UPDATE、DELETE 语句3号TM锁


六、drop table、truncate table、create


1.drop table
insert into text_t2 select * from text_t1;
drop table text_t2

TEXT_T2表6号TM锁:

TM锁 6号 指向TEXT_T2               TM-00015b62-00000000  开始持有,最后释放

持有的其他TM锁:
TM锁 3号 指向SDO_GEOR_DDL__TABLE$$ TM-000137d9-00000000 mode=3
TM锁 3号 指向SUMDELTA$             TM-00000282-00000000 mode=3 
TM锁 3号 指向SUMPARTLOG$           TM-0000027f-00000000 mode=3
TM锁 3号 指向SNAP_LOADERTIME$      TM-00000286-00000000
TM锁 3号 指向RECYCLEBIN$           TM-0000008e-00000000
TM锁 3号 指向IDL_UB1$              TM-000000e1-00000000
TM锁 3号 指向IDL_CHAR$             TM-000000e2-00000000
TM锁 3号 指向IDL_UB2$              TM-000000e3-00000000
TM锁 3号 指向IDL_SB4$              TM-000000e4-00000000
TM锁 3号 指向ERROR$                TM-000000e5-00000000
TM锁 3号 指向OBJ$                  TM-00000012-00000000
TM锁 3号 指向SDO_GEOR_SYSDATA_TABLE TM-000137cf-00000000
TM锁 3号 指向SDO_TIN_PC_SYSDATA_TABLE TM-000139b3-00000000
TM锁 3号 指向SDO_TIN_PC_SEQ        TM-000139b1-00000000 
TM锁 3号 再次指向SDO_GEOR_DDL__TABLE$$ TM-000137d9-00000000 
(以上TM锁全部释放后
TM锁 3号 指向OBJ$                  TM-00000012-00000000
TM锁 3号 指向SEG$                  TM-0000000e-00000000

drop table持有6号TM排他锁,禁止其他事务执行任何DML语句。


2.truncate table

truncate table text_t1


TM锁 6号 指向TEXT_T1  TM-00015b46-00000000  开始持有最后释放
TM锁 3号 指向MLOG$    TM-0000028a-00000000
TM锁 3号 指向MON_MODS$ TM-000001e4-00000000
TM锁 3号 指向SUPEROBJ$ TM-00000047-00000000
TM锁 3号 指向TAB_STATS$ TM-000001c5-00000000
TM锁 3号 指向TAB$             TM-00000004-00000000
TM锁 3号 指向SEG$                  TM-0000000e-00000000
TM锁 3号 指向OBJ$                  TM-00000012-00000000
(以上TM锁全部释放后
TM锁 3号 指向SEG$                  TM-0000000e-00000000



truncate table持有6号TM排他锁,禁止其他事务执行任何DML语句。

3.create table
create table text_t2 as select * from text;

TM锁 3号 指向SEG$     TM-0000000e-00000000
TM锁 3号 指向TAB$     TM-00000004-00000000
TM锁 3号 指向COL$     TM-00000015-00000000

create table时被操作表本身不持有锁,只是去锁定了几个系统基表



实验

锁模式 锁描述 解释 sql操作 0 none  1 null  预留模式,仅起标志作用 select 2 Row-S 行共享(RS) 行级共享锁,其他对象只能查询这些数据行 Create index online,Alter index rebuild online 3 Row-X 行专用(RX) 行级排他锁,在提交前不允许做DML操作 insert into table,update table,delete from xxx 4 Share 共享锁(S) 共享锁 Create index,Alter index rebuild 5 S/Row-X 共享行专用(SRX) 共享行级排他锁 6 exclusive 专用(X) 排他锁 drop table,truncate tabledrop index

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31467990/viewspace-2140929/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31467990/viewspace-2140929/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值