• 如何检测被锁住的Oracle存储过程及处理办法汇总(转)


    1.查看是哪一个存储过程被锁住
    查V$DB_OBJECT_CACHE视图
    select * from V$DB_OBJECT_CACHE where owner='过程的所属用户' AND LOCKS!='0'


    2.查看是哪一个sid,通过sid可以知道是哪一个session
    查v$access视图
    select * from v$access where owner='过程的所属用户' and name='刚才查到的过程名'
    3.查出sid和serial#
    查v$session视图
    select sid,serial#,paddr from v$session where sid='刚才查到的sid';
    查v$process视图
    select spid from v$process where addr='刚才查到的paddr';
    4.杀进程
    4.1先杀oracle进程
    alter system kill session '查出的sid,查出的serial#';
    4.2再杀操作系统进程
    如果是unix
    kill -9 刚查出的spid
    如果是windows
    orakill 刚查出的sid 刚查出的spid

    http://www.cnblogs.com/zwl715/p/3699124.html

    原因: 存储过程执行过程中,关闭或者中断存储过程,重新编译是等待时间很长,无法删除

    解决:

    先查出被锁定存储过程的spid

    SELECT spid

    FROM V$DB_OBJECT_CACHE   OC,

           V$OBJECT_DEPENDENCY OD,

           DBA_KGLLOCK         W,

           V$SESSION           S,

           V$PROCESS           P

          

    WHERE OD.TO_OWNER = OC.OWNER

       AND OD.TO_NAME = OC.NAME

       AND OD.TO_ADDRESS = W.KGLLKHDL

       AND W.KGLLKUSE = S.SADDR

       AND P.ADDR = S.PADDR

    AND OC.NAME = 'SP_PS_DATAWWTPFLOWSUM_U'//存储过程名称

    登陆被锁定存储过程所属Oracle的安装服务器, 开始->运行->CMD ,输入格式 orakill SID实例 SPID如:C:>orakill orcl 540

    http://www.cnblogs.com/zwl715/p/3699120.html

  • 相关阅读:
    容器占用空间的小问题
    一个ipv4到ipv6的移植问题
    一个linux内核模块移植到低版本时发生的异常
    一个发包乱序问题记录
    一个docker镜像中的目录删除不了问题
    C/C++(共用体与枚举)
    C/C++(数据结构栈的实现)
    C/C++(结构体)
    C/C++(内存管理)
    C/C++(指针数组)
  • 原文地址:https://www.cnblogs.com/softidea/p/5336734.html
Copyright © 2020-2023  润新知