测试如下:
SQL> select sid from v$mystat where rownum=1;
SID
----------
20
SQL> insert /*+ append */ into t1 select * from emp;
16 rows created.
SQL> select sid,type,lmode,request from v$lock where sid=20;
SID TY LMODE REQUEST
---------- -- ---------- ----------
20 TX 6 0
20 TM 6 0
可见,对于direct方式的insert,获取的为独享表级锁,这就直接阻止了其它session对于表的dml、ddl之类的操作。再看看普通方式的insert
SQL> select sid from v$mystat where rownum=1;
SID
----------
19
SQL> insert into t2 select * from emp;
16 rows created.
SQL> select sid,type,lmode,request from v$lock where sid=19;
SID TY LMODE REQUEST
---------- -- ---------- ----------
19 TX 6 0
19 TM 3 0
同样可以看出,对于普通方式的insert,获取的是表级共享锁。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10972173/viewspace-471153/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10972173/viewspace-471153/