Lock Description
DML locks (data locks) DML locks protect data. For example, table locks lock
entire tables, rowlocks lock selected rows.
DDL locks (dictionary
locks)
DDL locks protect the structure of schema objects—for
example, the definitions of tables and views.
Internal locks and latches Internal locks and latches protect internal database
structures such as datafiles. Internal locks and latches
are entirely automatic.
DML锁就是保证当数据被多个用户同时修改时的完整性,保证不同时发生DML或者DDL。例如table a正在执行事务,
就不能被drop。
DML操作请求数据锁在两种不同类型的level:for 特定的行 和for 整个表。
ROW Locks(TX)TABLE LOCKS (TM)
。
当出现 TX锁时,会跟着一个TM锁,保证在事务的过程中不会修改表结构,当然也可以disable 掉dml锁。
ROW SHARE TABLE LOCK (RS) :
事务已经得到了表上的锁,并且锁定了行,将要去更新这些行,在下面的这两种情况下会产生RS锁:
SELECT ... FROM table ... FOR UPDATE OF ... ;
LOCK TABLE table IN ROW SHARE MODE;
这时,锁定的行是不能被修改的,锁的情形如下:
OS_USER_NA USER_NAME LOCK_TYPE OBJECT LOCK_MODE
---------- ---------- ------------------------ ------------------------------ -------------
XIAYULAI XIAYULAI DML enqueue lock T1 Row Share
XIAYULAI XIAYULAI Transaction enqueue lock Exclusive
ROW SHARE 是发生在表上的,它对应的lock type 是TM锁。select .. for update 这个语句会产生row share 锁,同时也会产生行上的
TX锁,即 lock mode为exclusive。TM锁个人认为就是为了保证表结构在操作的过程中不会被修改。
ROW EXCLUSIVE TABLE LOCK (RX):
事务已经获得了表的锁,并且已经做了一些行的修改,下面的情形出现RX:
INSERT INTO table ... ;
UPDATE table ... ;
DELETE FROM table ... ;
LOCK TABLE table IN ROW EXCLUSIVE MODE;
锁的情形如下:
OS_USER_NA USER_NAME LOCK_TYPE OBJECT LOCK_MODE
---------- ---------- ------------------------ ------------------------------ -------------------
XIAYULAI XIAYULAI DML enqueue lock T1 Row Exclusive
XIAYULAI XIAYULAI Transaction enqueue lock Exclusive
SHARED TABLE LOCKS (S) :
LOCK TABLE T1 IN SHARE MODE;
这样的状态下,只允许其他的事务查询这个表,不允许修改,即可以select .. for update,但是不能update.
多个事务可以同时将一个表lock in share mode,但是每一个事务都不能更新。锁的情形如下:
OS_US USER_ LOCK_TYPE OBJECT LOCK_MODE OWNER session id SERIAL_NUM id1 id2
----- ----- -------------------- -------------------- -------------------- ---------- ---------- ---------- ------- -------
oracl TEST DML enqueue lock T1 Share SCRM 27 3884 31134 0
e
SHARE ROW EXCLUSIVE TABLE LOCKS (SRX):
可以允许select ... for update;
EXCLUSIVE TABLE LOCKS (X):
只允许一个事务,并且不允许select ... for update;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7312700/viewspace-1005168/ ,如需转载,请注明出处,否则将追究法律责任。