大家都知道TM锁共有6种模式,最常见的是3(插入,更新,删除);4(创建索引时);5(部分DDL操作如:删除列)等等,这些锁比较容易看到,不再详述实验经过.有些操作速度过块,如:Truncate和Drop等.这时不容易看到锁的状态,下面我做了个小实验来看清楚这些速度较快的命令持有什么样的锁. 例如:Truncate和Drop
因为命令执行速度快,只有靠脚本来快速观察.如下: create or replace procedure my_cursor is cursor aa is select lmode from v$lock where type='TM' and sid=您的会话SID; x number(3):=9; begin for i in 1..3000 loop open aa; fetch aa into x; dbms_output.put_line(i||'-'||x); close aa; x:=9; end loop; end; / **如果X为空的话,下次抓取值不变,所以每次抓取结束后为X附上一个锁中不可能出现的值9;
步一:脚本显示内容过多,会造成显示缓冲区溢出,先把缓冲区设大点; SQL> set serveroutput on size 100000;
步二:为了更清楚的观察,把结果输送到文件中来查看结果; SQL> spool e:\oracle\aa.txt
步三:执行脚本 SQL> exec my_cursor;
|