"ICDMAIN","94","33286","KILLED","Administrator","ICD_DOMAIN\ICD_JIEKOU","PLSQLDev.exe","PL/SQL Developer","Test Window - Script for procedu","04-3-30 15:10:32","00000004009B7220","182078","00000004009502E8","32","47","2147483644","000000040195EAD8","","DEDICATED","32","ICDMAIN","119:126","ICD_JIEKOU","USER","0000000410351728","4115313795","0000000410351728","4115313795","1190136663","3367543201","","305825","-1","0","0","0","4728","NO","NONE","NONE","NO","DEFAULT_CONSUMER_GROUP","DISABLED","ENABLED","ENABLED"
为什么Kill一个Session,进程状态为Kill,但一直没从操作系统中删除,怎么做,为什么会这样。
为什么Kill一个Session,进程状态为Kill,但一直没从操作系统中删除,怎么做,为什么会这样。
1.该session的回退操作没有完成,可能被其它会话阻塞。
2.pmon进程繁忙,来不及清理死进程。解决办法:
1.
kill掉该session对应的进程(UNIX)/线程(windows),强制smon清理死session.
unix: select process from v$session where sid='94'
$kill -9 'process'
windows: select spid from v$procecess ,v$session where v$session.paddr=v$process.addr and v$session.sid='94'
c:\>orakill 94 'spid'
2.
重启数据库,让instance recovery快速清除死sessionkill session可以使用immediate,迅速杀死session:
alter system kill session ',' immediate;
我有三个程序,程序的处理流程基本上相同的。
每个程序分别创建了一个SOCKET监听,也创建了一个到ORACLE的连接。SOCKET接受数据,处理后填入ORACLE,填写是用存储过程来实现的,操作的表也是一样的。
现在问题是,我的第二个程序总是会在大概第三天断开连接,而且与ORACLE的连接也不活动,ORACLE占用CPU骤升到60%,此时另外两个程序仍在正常运行,一小时后CPU升到100%。
我在操作系统中杀掉第二个进程,在ORACLE中KILL第二个连接,CPU仍不下降。查了v$locked_object也没有死锁,我想知道ORACLE的60%CPU它到底在干什么?有什么办法?
还有,我重新运行第二个程序,居然socket.bind失败,用netstat并没看到有那个端口,问有没有办法不用注销/不用重启就能解决bind失败问题的?
我观察了一个月了,也还是黔驴技穷,只得到上面的信息。它为什么偏偏每次都是第二个程序在三天后出这种莫名其秒的事情,望各位高手各抒已见。我的最终目的,就是要让系统在无人干预的情况下长久稳定的运行,无论采用什么手段都行。
我也试过另做一个监控程序,发现系统异常时就重启电脑,但也很麻烦,因为老是重启不成功,导致系统更糟或者谁有比较历害的重启电脑函数,只要保证操作系统不坏,ORACLE数据库不坏(因为此时ORACLE处于异常状态)就行,又能保证重启成功的(因为CPU很高,经常有些东西会弹出立即结束那种对话框,不是随便搞个给权限再ExitWindow就可以搞定的)。
谢谢!!
1,用alter system kill session '10,9' ,结果执行光标停着不动,过半分钟后出一个错误:
ERROR位于第一行:
ORA-00031:标记要删去的会话。
2,用ORAKILL 结果出错:
Could not attach to oracle instance 10 : err=2
除了重启数据库搞不定,说明上面各位说的还是不大起作用。
對於KILLED的進程,由於回退沒有完成,所以需要等待