首页 > Linux操作系统 > Linux操作系统 > LOCK table
此语句用于防止其它并发事务访问或修改表。
语法LOCK TABLE table-name
[ WITH HOLD ]
IN { SHARE | EXCLUSIVE } MODE
table-name 表必须是基表,而不是视图。因为临时表数据是当前连接的本地数据,所以锁定全局临时表或局部临时表都无效。
WITH HOLD 子句 如果指定该子句,锁一直保持到连接结束时。如果没有指定该子句,则提交或回退当前事务时将释放锁。
SHARE 模式 禁止其它事务修改表,但允许它们读取表。在该模式下,只要没有其它的事务锁定所修改的行,就可以间接地或显式地使用 LOCK TABLE 更改表中的数据。
EXCLUSIVE 模式 禁止其它事务访问表。任何其它事务都不能对表执行查询、任何更新或任何其它操作。如果用 LOCK TABLE t IN EXCLUSIVE MODE 排它性地锁定表 t,则服务器的缺省行为是不获取 t 的行锁定。将 SUBSUME_ROW_LOCKS 选项设置为 OFF 可以禁用此行为。
用法LOCK TABLE 语句允许直接控制表级并发,与当前的隔离级别无关。
虽然事务的隔离级别通常控制当前事务执行请求时设置的锁的种类,但 LOCK TABLE 语句允许更显式地控制表行的锁定。
LOCK TABLE 以 SHARE 模式放置的锁为幻像和防幻像锁,sa_locks 过程将它们显示为 PT 和 AT。
权限若要以 SHARE 模式锁定表,需要 SELECT 权限。
若要以 EXCLUSIVE 模式锁定表,必须是表所有者或者有 DBA 权限。
副作用需要访问锁定表的其它事务可能被延迟或阻塞。
Oracle中的锁定可以分为几类:
1、DML lock(data lock),
2、DDL lock(dictionary lock)
3、internal lock/latch。
DML lock又可以分为row lock和table lock。row lock在select.. for
update/insert/update/delete时隐式自动产生,而table lock除了隐式产生,也可以调用lock table
如果不希望别的session lock/insert/update/delete表中任意一行,只允许查询,可以用lock table table_name in exclusive mode。(X)这个锁定模式级别最高,并发度最小。
如果允许别的session查询或用select for update锁定记录,不允许insert/update/delete,可以用
lock table table_name in share row exclusive mode。(SRX)
如果允许别的session查询或select for update以及lock table table_name in share mode,只是不允许insert/update/delete,可以用
lock table table_name in share mode。(share mode和share row exclusive
mode的区别在于一个是非抢占式的而另一个是抢占式的。进入share row exclusive
mode后其他session不能阻止你insert/update/delete,而进入share
mode后其他session也同样可以进入share mode,进而阻止你对表的修改。(S)
还有两种锁定模式,row share(RS)和row exclusive(RX)。他们允许的并发操作更多,一般直接用DML语句自动获得,而不用lock语句。
详细参考concepts文档中的"Type Of Locks":
http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96524/c21cnsis.htm#2937
unlock table 解锁
方法一、kill session:
SQL> select object_id,session_id from v$locked_object; //注意session_id 就是上锁的 session标志
SQL> select username,sid,SERIAL# from v$session where sid=。。; //这里的SID = session_id
SQL> alter system kill session 'id,serial#'; //杀死该session
方法二、rollback/commit 终止事务处理
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11976525/viewspace-682510/ ,如需转载,请注明出处,否则将追究法律责任。