在oracle中锁定一个表

问题描述 投票:1回答:1

我想在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阻止。

oracle oracle11g locking
1个回答
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型锁)。

© www.soinside.com 2019 - 2024. All rights reserved.