1. 在没有加online选项的情况下,创建索引
session 1:
SQL> select sid from v$mystat where rownum=1;
SID
----------
10
SQL> create index idx_test tablespace b2cspace on test(object_id,object_name);
create index idx_test tablespace b2cspace on test(object_id,object_name)
*
ERROR at line 1:
ORA-00969: missing ON keyword
SQL> create index idx_test on test(object_id,object_name) tablespace b2cspace;
Index created.
在session 1创建索引同时,session 2 执行:
SQL> select sid from v$mystat where rownum=1;
SID
----------
11
SQL> update test set object_name=1 where rownum=1;
1 row updated.
session 3观察数据库里锁的信息:
SQL> select * from v$lock where sid in(10,11)
2 ;
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
579580EC 579581F8 10 TX 262188 4838 6 0 28 0
57942C34 57942C48 10 TM 18 0 3 0 28 0
57942BB0 57942BC4 10 TM 6657 0 4 0 28 1
56D0ED5C 56D0ED6C 10 DL 6657 0 3 0 28 0
57942CB8 57942CCC 11 TM 6657 0 0 3 13 0
可见,在这种情况下,创建索引时需要获得TX锁,共享的TM锁,以及一个DL锁。而且,这会堵塞其它session的DML操作。另外,还可以看到对表OBJ$也加了TM锁类型的锁。
进一步模拟当加S模式的TM锁时,对update操作的影响:
session 1:
SQL> lock table test in share mode;
Table(s) Locked.
session 2:
SQL> update test set object_name=1 where rownum=1;
hang住
session 3:
SQL> select * from v$lock where sid in(10,11);
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
57942BB0 57942BC4 10 TM 6657 0 4 0 324 1
57942C34 57942C48 11 TM 6657 0 0 3 310 0
可见,session2 被session 1阻塞。
再进一步查看对insert操作的影响:
session 4:
SQL> insert into test select * from test where rownum=1;
hang住
在session 3里再次查看锁的情况:
SQL> select * from v$lock where sid in(10,11,21);
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
57942BB0 57942BC4 10 TM 6657 0 4 0 720 1
57942C34 57942C48 11 TM 6657 0 0 3 61 0
57942CB8 57942CCC 21 TM 6657 0 0 3 6 0
结论:
(1) 当不用online选项创建索引时,将对表加S模式的TM锁,这直接造成对DML操作的阻塞。
(2)进行DML操作时,将首先获得TM类型的表级意向锁,然后才能获得TX类型的事务锁。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10972173/viewspace-524537/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10972173/viewspace-524537/