Oracle DBA常用操作

问题一:当我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';
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值