【问题标题】:Tables oracle locked表 oracle 锁定
【发布时间】:2014-09-22 16:07:23
【问题描述】:

我不是 dba,但我遇到了一个数据库问题,它锁定了表并因此造成了很大的混乱。我从 oracle dba 获得了一些信息,如果有人可以帮助我找到问题的关键或指出我需要做什么,我将更多信息放在这里:

我有一份来自 oracle 的大报告,但我不理解 95% 的数据。

【问题讨论】:

  • “它一直在锁定表并造成大混乱” 你能详细说明一下吗?有什么症状?这是突然的行为吗?
  • 是的,寄存器和表格都被锁定了,所以下次用户尝试访问 Web 应用程序时会被锁定等待响应。当很多用户访问系统时会发生这种情况。我的意思是当系统的负载很重时。
  • 你有FKs without indexes吗?

标签: database oracle database-design database-administration database-locking


【解决方案1】:

这看起来像常规的行级锁定。一行只能由一个用户一次修改。数据字典包含有关谁被阻止以及谁正在执行阻止的信息:

--Who's blocking who?
select
    blocked_sql.sql_id blocked_sql_id
    ,blocked_sql.sql_text blocked_sql_text
    ,blocked_session.username blocked_username
    ,blocking_sql.sql_id blocking_sql_id
    ,blocking_sql.sql_text blocking_sql_text
    ,blocking_session.username blocking_username
from gv$sql blocked_sql
join gv$session blocked_session
    on blocked_sql.sql_id = blocked_session.sql_id
    and blocked_sql.users_executing > 0
join gv$session blocking_session
    on blocked_session.final_blocking_session = blocking_session.sid
    and blocked_session.final_blocking_instance = blocking_session.inst_id
left join gv$sql blocking_sql
    on blocking_session.sql_id = blocking_sql.sql_id;

如果您了解系统,通常更容易关注“谁”在阻止而不是“什么”被阻止。上面的查询只返回了一些常见的列,但这些表中还有许多其他列可能有助于识别进程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    相关资源
    最近更新 更多