【问题标题】:How can user_tables get locked on Oracle?user_tables 如何锁定在 Oracle 上?
【发布时间】:2012-03-13 12:53:28
【问题描述】:

我有一台机器的回溯,其中以下查询似乎挂了好几天:

SELECT table_name FROM user_tables

什么可能产生这样的锁?用户永远不能修改这个表;并且该查询的许多后续实例都成功运行。

【问题讨论】:

  • 不幸的是,系统无法直接访问,必须重新启动服务才能解决问题;我正在努力解决如何防止这种情况再次发生...
  • 如果相关的话,它是 Windows 上的 Oracle 10.2.0.4...
  • 想知道这是否是通信问题;这是在 Python 中使用 cxOracle
  • @Devid Fraser - 您使用的是什么版本的数据库?如果您使用的是带有性能和调优包的企业版,我们或许可以查看 ASH 表(活动会话历史记录)中的数据,以获取有关正在发生的事情的更多详细信息。
  • 不幸的是,这是我们通过第三方处理的客户端,因此调试起来并不容易;我想知道像这样锁定的系统表是否有任何已知原因

标签: python oracle locking cx-oracle database-locking


【解决方案1】:

因此,由于条件不再存在,因此无法判断发生了什么。

但是,如果将来再次发生这种情况或类似情况,您将需要使用 Oracle 的等待接口。也就是看V$SESSION

首先,您需要确定进程是在旋转(即 CPU 上)还是阻塞(即等待等待事件)。确定的方法是查看STATE 列:

  • 如果状态是'WAITING',则会话被阻止。如果是这种情况,则 EVENT 列应描述会话正在等待的事件。
  • 如果状态不是“WAITING”,则会话在 CPU 上,并且 EVENT 列是它等待的最后一件事。
    • 如果 STATE 为 'WAITED KNOWN TIME',则 WAIT_TIME 是以厘秒为单位等待的时间。
    • 如果 STATE 为 'WAITED SHORT TIME',则会话等待不到一厘秒。
    • 如果 STATE 为 'WAITED UNKNOWN TIME',则等待时间未知,因为会话的 timed_statistics 设置为 FALSE。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多