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 和online create index /rebuild 的不同点
1.offline始终持有4号TM锁来锁定表,堵塞其他事务DML操作;online持有2号TM锁来锁定表,不会堵塞其他事务的DML操作,并发性能更好;
2.online会自动产生SYS_JOURNAL_XXXX的系统临时表来记录日志;
3.online时持有的3号TM锁相比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 table,drop index
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31467990/viewspace-2140929/
,如需转载,请注明出处,否则将追究法律责任。