【问题标题】:Removing Locks in Oracle 10在 Oracle 10 中删除锁
【发布时间】:2012-11-30 12:07:28
【问题描述】:

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

它基本上不会完成,只是挂起。我想知道是否有强制删除oracle中的锁?

我注意到一个名为 v$locked_object 的表确实包含与我遇到的问题相关的 onject ID。

希望我已经解释得足够好了。

提前感谢您的帮助!

【问题讨论】:

  • 您是否发现 what 进程正在锁定对象以及该进程在做什么?当然,解决问题比绕过它更好吗? (我很确定您的问题的答案是否定的)。

标签: sql oracle sqlplus


【解决方案1】:

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

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

【讨论】:

  • 您好,我已通过查看 DBA_BLOCKERS 找到了此问题的原因。获得了 Session ID 并杀死了它。
【解决方案2】:

设法解决了这个问题。

我查看了 DBA_BLOCKERS 表并获得了会话 ID。然后终止会话并解除锁定。

【讨论】:

    【解决方案3】:

    这将完全符合您的目的:

    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 命令。由于代表低,无法投票给答案。谢谢
    • 嗨 Mari,感谢您提供这些命令。我能够释放我的数据库中的锁定表。非常感谢!
    猜你喜欢
    • 2017-01-15
    • 2018-02-20
    • 2020-11-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多