在Oracle中锁定表

时间:2019-03-14 17:37:04

标签: oracle oracle11g locking

我想在oracle中锁定一个表,然后检查它是否被阻止, 但是我无法锁定桌子。 我试图这样做来锁定:

LOCK TABLE CLIENTS IN EXCLUSIVE MODE

这是对Lock的查询,但是我仍然可以在该表中更新

然后检查其是否被阻止:

SELECT COUNT(*) total FROM V$LOCKED_OBJECT l 
INNER JOIN DBA_OBJECTS d ON l.object_id = d.object_id 
WHERE d.object_type = 'TABLE' AND d.object_name = 'CLIENTS'

如何锁定表,然后检查其是否被php阻止。

1 个答案:

答案 0 :(得分:2)

您可以使用for update

select * from clients for update

以独占模式(ROW_X (SX): Row Exclusive Table Lock-> “锁定模式3” )锁定表的整个记录​​,但是不建议在生产系统中使用。至少仅锁定通过where子句过滤的受限记录集。

您的语句(LOCK TABLE CLIENTS IN EXCLUSIVE MODE)也会锁定整个表,并调用Exclusive (X): Exclusive Table Lock-> “锁定模式6” 作为上面for update的命令,即逻辑适用于SXX锁,无论select语句是否没有where子句。但是在第一种方法中,有机会限制受锁定操作影响的记录数。

  应该发出

commitrollback来释放这两种情况的锁定(   SXX类型的锁)。