您的位置:首页 > 数据库 > Oracle

Oracle DBA常用操作

2008-02-11 00:01 323 查看
问题一:当我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';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: