Oracle 查询死锁,查询步骤及处理方法

在执行或编译某个存储过程时,出现锁定超时(locked timeout)的错误,
我们首先考虑 系统中有对应的引用对象 存在锁定状态


以下步骤为基本查询锁定信息的步骤:

  1. 查询当前系统中锁定的对象

    select v.sid,v.serial#,o.object_name,o.object_type,l.locked_mode 
    from v$locked_object l,v$session v,user_objects o
    where l.session_id = v.sid
    and l.object_id = o.object_id;
  2. 查询当前系统中对应的锁定对象的调用

    select NAME, TYPE 
    from user_dependencies  
    where referenced_name = 'TMP_DEVICE'
  3. 查询当前系统中正在执行的某个特定功能的会话信息
    select v.sid,v.serial#,p.pid,p.spid,s.sql_text 
    from v$session v,v$sql s,v$process p
    where v.sql_id = s.sql_id
    and v.paddr = p.addr
    and s.sql_text like '%p_stat%';

查询出对应进程,如果不是死锁,可等待对象进程执行完,如果时死锁状态 ,需要杀掉对应进程

从第3步查询的结果进行处理


-- 杀掉进程 
alter system kill session 'sid,serial#';
或者
登录后台:kill -15 spid;

猜你喜欢

转载自blog.51cto.com/8026776/2514248
今日推荐