1。在一个数据库中有两个存储过程编译时就死在那儿,和通常情况下的过程有错误提示相关信息不同,没有任何提示(一直挺在那儿,过不去),但可以把以前同名过程drop掉。
2。在分析这两个过程用的几个表也分析不了。
3。shudown immediate数据库停不下来,所有外部session都已停掉。
4。其他过程和表都没有此问题。
5。数据库已经重起n遍(shutdown abort,startup)
6。操作系统AIX4.3,数据库ORACLE920

解决方案 »

  1.   

    你的存储过程里是不是用了replace函数?以前碰到过这样的情况。
      

  2.   

    先把LISTERNAL停掉,再把数据库SHUTDOWN IMME,
    再起数据库,等回滚事务停止后,再建立存储过程
      

  3.   

    检查以前有没有这两个存储过程,看看是不是这两个过程处于调试状态或者两个过程所在的session 已经处于等待释放锁的状态。
      

  4.   

    总结陈词:
    1、对于你的问题,最简单的办法,是在你down库后,把你的机器重启一下,这决不是搜注意。
    2、你的存储过程一编译就死,是因为你的存储过程被其它session给锁了,如果你有决对的耐心,编译器一定会报一个类似"不能锁定存储过程"的错误。其实处理起来很简单,如下:
     a、select * from v$access where object='YOUR PROCEDURE NAME';
       记住相应的sid,这时假设其为sid1
      b、select sid,serial# from v$session where sid=sid1
      c、当然是用alter system kill session 'sid,serial#';杀掉锁过程的进程了。
    3、表分析不了也可以用类似2的方法处理。
    4、shutdown immediate一定可以把你的库down下来,不过你也要有些耐心,在做shutdown immediate之前,建议把你的应用停下来,或把除oracle的几个smon等进程外,其余的kill -9掉,这样做shutdown immediate就快了。
    不过,如果你的库有问题,shutdown immediate 宕库不下来就另说了。
    5、重启库N遍不解问题,我认为是共享内存引起的
     当你down 库之后,执行一下如下操作:
     a、#ipcs -pmb
        看共享内存中oracle的部分是否在
      b、如在,用如下命令处理一下
         #ipcrm -m a中的id号
      或 #ipcrm -M a中的KEY值
      这和重新起动一下主机的效果一样。再就是祝你好运了!
      

  5.   

    谢谢hrb_qiuyb(大森林) 
    我也碰到了这种问题,解决了,谢谢!!