精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● 数据库技术>>Oracle产品>>Re:ORACLE死锁问题?

主题:Re:ORACLE死锁问题?
发信人: xiaomiao()
整理人: pengxiaohui(2001-06-27 14:17:58), 站内信件
【 在 zhouubin 的大作中提到:】
:当我UPDATE某一条记录时总是被锁住,我怎样才能找到原因并排除?
:......
 
 二 · 应 用 
 处 理 用 户 被 锁 住 的 方 法 
 当 一 个 用 户 抱 怨 他 被 锁 住 了, DBA 首 先 要 做 的 是 向 用 户 了 解 他 在 锁 定 的 
 点 执 行 的 操 作, 并 确 定 用 户 是 否 真 的 被 锁 住 了。 下 列 查 询 会 返 回 当 前 被 
 锁 住 的 用 户 列 表: 
 select a.username, a.sid, a.serial#, b.id1, c.sql_text
  from v$session a, v$lock b, v$sqltext c
  where a.lockwait = b.kaddr
   and a.sql_address = c.address
   and a.sql_hash_value = c.hash_value;

USERNAME SID SERIAL# ID1 SQL_TEXT 
SCOTT 11 9 131080 update
plsql_user.s_employee
set salary = 5000 

 结 果 显 示 SCOTT 是 在 做 UPDATE 时 被 锁 住 了。 下 一 步 是 确 定 谁 锁 住 了 该 用
 户, 而 这 个 用 户 又 在 做 何 操 作。 你 可 以 执 行 下 列 查 询: 
   select a.username, a.sid, a.serial#, b.id1, c.sql_text
   from v$session a, v$lock b, v$sqltext c
   where b.id1 in
   (select distinct e.id1
   from v$session d, v$lock e
   where d.lockwait = e.kaddr)
   and a.sid = b.sid
   and c.hash_value = a.sql_hash_value
   and b.request = 0;

USERNAME SID SERIAL# ID1 SQL_TEXT 
PLSQL_USER 10 26 131080 update s_employee 
set salary = 10000 

    
 结 果 显 示 是 由 于 PLSQL_USER 和 SCOTT 对 同 一 TABLE 做 UPDATE 而 锁 住 了 SCOTT。
 当 你 有 了 这 些 信 息, 就 可 以 通 过 KILL SESSION, 释 放 锁。 例 如 我 们 可 以
 用 下 面 的 命 令 来 杀 死 PLSQL_USER 的 SESSION。 
 alter system kill session '10,26';


----
/*********************************************
低调,唯美,内省,黑色,简约,折衷,颓废,梦呓, 
糜烂,迷乱,阴郁,婉约,低吟,根源,氛围,元素, 
极端,低迷,扭曲,爆裂,失落,充斥,具象,聆听, 
压抑,气息,炼狱,冰冷,理念,郁闷,神伤,实验, 
回归,迷幻,迷离,内敛,艰涩,严肃,模糊,前卫。 
    

[关闭][返回]