在oracle中锁定表

在oracle中锁定表,oracle,oracle11g,locking,Oracle,Oracle11g,Locking,我想在oracle中锁定一个表,然后检查它是否被阻止, 但是我锁不上桌子。 我尝试这样做来锁定: LOCK TABLE CLIENTS IN EXCLUSIVE MODE 这会使查询锁定,但我仍然可以在该表中升级 然后检查其是否被阻止: 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'

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

LOCK TABLE CLIENTS IN EXCLUSIVE MODE
这会使查询锁定,但我仍然可以在该表中升级

然后检查其是否被阻止:

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阻止。

您可以使用
进行更新:

从客户端选择*进行更新

以独占模式锁定表的整个记录(
行X(SX):行独占表锁定
-->“锁定模式3”),但不建议用于生产系统。通过
where
子句筛选的仅限记录集的至少锁定

您的语句(
LOCK TABLE CLIENTS IN EXCLUSIVE MODE
)也会锁定整个表,并将
EXCLUSIVE(X):EXCLUSIVE TABLE LOCK
-->-->“locked MODE 6”作为上面用于更新的
命令,也就是说,逻辑既适用于
SX
锁,也适用于
X
锁,其中select语句中没有
where
子句。但在第一种方法中,有可能限制受锁定操作影响的记录数

应发出
commit
rollback
以释放两种情况下的锁(
SX
X
类型锁)


我只是在测试,不是在生产中,我想锁定一个表进行更新,插入,delete@Leoh好的,那么试试这个。但是查询如何锁定表:独占模式下的锁定表客户端不会锁定table@Leoh是的,你可以,我只是添加了一个详细的解释。我使用这个查询来检查是否被锁定:选择计数(*)从V$LOCKED_OBJECT l内部联接DBA_OBJECTS d到l.OBJECT_id=d.OBJECT_id的总计,其中d.OBJECT_type='TABLE'和d.OBJECT_name='CLIENTS';我不确定你是否弄错了。您发布的LOCK命令将锁定表,除了选择行之外,没有人可以对表执行任何操作。这就引出了为什么要锁定表的问题。Oracle的事务和锁定机制与您可能熟悉的其他rdbms产品完全不同。在oracle中,很少需要显式锁定表。