在Oracle 10中删除锁定

25

我在尝试更新sqlplus中的列值时遇到了问题。

它基本上无法完成,只会挂起。我想知道是否有办法强制解除Oracle中的锁定?

我注意到一个名为v$locked_object的表,其中包含与我遇到问题相关的对象ID。

希望我的解释足够清楚。

非常感谢任何帮助!


1
你找到了锁定对象的进程以及该进程在做什么吗?肯定比绕过问题更好地解决问题吧?(我相当确定你的问题的答案是否定的)。 - Ben
3个回答

67

这将完全满足您的需求:

SELECT SESSION_ID FROM DBA_DML_LOCKS WHERE NAME = <TABLE_NAME>;
使用此语句中的SESSION_ID查找相应的SERIAL#
SELECT SID, SERIAL# FROM V$SESSION WHERE SID IN (
    SELECT SESSION_ID FROM DBA_DML_LOCKS WHERE NAME = <TABLE_NAME>
);

找到有问题的元组 SID, SERIAL# 并执行以下步骤释放:

ALTER SYSTEM KILL SESSION 'SID, SERIAL#';

我通过在检查 dba_blockers 后找到应用程序中的持有会话来解决了这个问题。但是将来会记住 ALTER 命令。由于声望不高,无法投票支持答案。谢谢。 - Thomas Pollock
嗨Mari,谢谢你提供这些命令。我成功地释放了我的数据库中被锁定的表格。非常感谢! - Rakesh Narang

1

已成功解决此问题。

我查看了 DBA_BLOCKERS 表并获取了会话 ID。然后终止了该会话,锁定已被移除。


0

可能是有其他人更新了同一张表,但尚未提交。甚至可能是您在不同的工具或不同的会话中进行了更新。

摆脱锁定的最简单方法是在另一个会话中提交工作。


嗨,我通过查看 DBA_BLOCKERS 找到了此问题的原因。获得了会话 ID 并将其终止了。 - Thomas Pollock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接