锁是ORACLE防止用户同一时间并发访问修改资源,ORACLE使用不同类型的锁控制对数据的并发访问
防止用户之间出现破坏性的交互操作,ORACLE为处理事务自动锁定资源
ORACLE锁分类:
按加锁方式分:
自动锁
ORACLE自动加的
显示锁
用户显示手工去加的
如:lock table table_name in mode;
按锁的级别:
共享锁
排它锁
按针对的操作分类:
DML锁
DDL锁
内部闩锁(latch)
DML锁
DML锁根据锁的范围大小分为行锁(TX)和表锁(TM)
行锁的类型主要有:独占锁和无锁
表锁类型
锁代码 锁模式 备注
0 none 无锁,如select
1 null 不锁资源,但是表被drop、alter 等后,要通知一些对象
如执行计划、解析的游标等
2 Row-S 行共享锁(却是一个表锁),带有DML企图的锁
如:select ... for update
lock table ... in row share mode
3 ROW-X 行独占锁(表锁)如DML产生的锁
4 share 共享锁(共享、只读)不允许对表进行DML
lock talbe ... in share mode;
5 S/Row-X 共享行排他锁,也是只读锁,不允许对表进行进DML
与4号锁的区别,5号锁是串行执行
6 Exclusive 排它锁
锁的释放:
rollback 或 commit
查看锁
v$locked_object
v$lock
select sid,type,lmode,request,ctime,block from v$lock where TYPE IN ('TM','TX')
and sid in (16,137)
SID TY LMODE REQUEST CTIME BLOCK
----- -- ---------- ---------- ---------- ----------
137 TX 0 6 351 0
137 TM 3 0 351 0
16 TM 3 0 483 0
16 TX 6 0 483 1
SYS> select session_id,ORACLE_USERNAME,OBJECT_ID from v$locked_object;
SESSION_ID ORACLE_USERNAME OBJECT_ID
---------- ------------------------------ ----------
16 SYS 74925
137 SYS 74925
死锁
互相持有对方的资源,都希望对方释放
session1> update scott.emp set sal=1500 where empno=7369;
session2> update scott.emp set sal=2500 where empno=7521;
session1> update scott.emp set sal=2000 where empno=7521;
session2> update scott.emp set sal=1800 where empno=7369;
防止用户之间出现破坏性的交互操作,ORACLE为处理事务自动锁定资源
ORACLE锁分类:
按加锁方式分:
自动锁
ORACLE自动加的
显示锁
用户显示手工去加的
如:lock table table_name in mode;
按锁的级别:
共享锁
排它锁
按针对的操作分类:
DML锁
DDL锁
内部闩锁(latch)
DML锁
DML锁根据锁的范围大小分为行锁(TX)和表锁(TM)
行锁的类型主要有:独占锁和无锁
表锁类型
锁代码 锁模式 备注
0 none 无锁,如select
1 null 不锁资源,但是表被drop、alter 等后,要通知一些对象
如执行计划、解析的游标等
2 Row-S 行共享锁(却是一个表锁),带有DML企图的锁
如:select ... for update
lock table ... in row share mode
3 ROW-X 行独占锁(表锁)如DML产生的锁
4 share 共享锁(共享、只读)不允许对表进行DML
lock talbe ... in share mode;
5 S/Row-X 共享行排他锁,也是只读锁,不允许对表进行进DML
与4号锁的区别,5号锁是串行执行
6 Exclusive 排它锁
锁的释放:
rollback 或 commit
查看锁
v$locked_object
v$lock
select sid,type,lmode,request,ctime,block from v$lock where TYPE IN ('TM','TX')
and sid in (16,137)
SID TY LMODE REQUEST CTIME BLOCK
----- -- ---------- ---------- ---------- ----------
137 TX 0 6 351 0
137 TM 3 0 351 0
16 TM 3 0 483 0
16 TX 6 0 483 1
SYS> select session_id,ORACLE_USERNAME,OBJECT_ID from v$locked_object;
SESSION_ID ORACLE_USERNAME OBJECT_ID
---------- ------------------------------ ----------
16 SYS 74925
137 SYS 74925
死锁
互相持有对方的资源,都希望对方释放
session1> update scott.emp set sal=1500 where empno=7369;
session2> update scott.emp set sal=2500 where empno=7521;
session1> update scott.emp set sal=2000 where empno=7521;
session2> update scott.emp set sal=1800 where empno=7369;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21175589/viewspace-755799/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21175589/viewspace-755799/