oracle的锁主要有TX锁、TM锁、DDL锁。
TX锁是事务锁,对数据的修改都会产生一个事务锁,同时在修改数据的过程中,为了防止修改表结构,oracle会产生一个TM锁。
可以用一下的脚本查看系统中的锁
DDL过程的伪代码如下:
Begin
Commit;
DDL_Statement;
Commit;
Exception
When others then rollback;
End;
从上面的伪代码可以知道,DDL会先提交事务。所以一般来说在PL/SQL中写DDL语句需要考虑这种情况。
TX锁是事务锁,对数据的修改都会产生一个事务锁,同时在修改数据的过程中,为了防止修改表结构,oracle会产生一个TM锁。
可以用一下的脚本查看系统中的锁
SQL> select username,l.SID,id1,id2,l.LMODE,request,block,l.TYPE 2 from v$lock l, v$session s where l.SID = s.SID and s.USERNAME= USER 3 ; USERNAME SID ID1 ID2 LMODE REQUEST BLOCK TYPE ------------------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---- NCSRPT 10 30508 0 3 0 0 TM NCSRPT 10 262190 524 6 0 0 TX |
DDL过程的伪代码如下:
Begin
Commit;
DDL_Statement;
Commit;
Exception
When others then rollback;
End;
从上面的伪代码可以知道,DDL会先提交事务。所以一般来说在PL/SQL中写DDL语句需要考虑这种情况。