登录oracle资料库时很久无反应的问题处理一例

原因是系统存在僵死的进程,促使session处于激活状态.
首先查看alert.log文件
接着查看oracle进程
$ ps -ef|grep oracle
终止与ORACLE_SID有关的所有Oracle过程:
$ ps -ef|grep $ORACLE_SID| grep -v grep|awk '{print $2}'|xargs -i kill -9 {}
$ ipcs -mp
------ Shared Memory Creator/Last-op --------
shmid      owner      cpid       lpid     
4947969    oracle     26474      26488  
$ ipcrm shm 4947969
也可以用下面的方法.
先找到该oracle session对应的sPID通过操作系统检查有没有僵死进程
下面的语句用来查询哪些对象被锁::

SELECT DO.OBJECT_NAME,
       SS.SID,
       SS.SERIAL#,
       LO.PROCESS,
       LO.LOCKED_MODE,
       PS.SPID,
       SQL.SQL_TEXT
FROM V$LOCKED_OBJECT LO,
       DBA_OBJECTS     DO,
       V$SESSION       SS,
       V$PROCESS       PS,
       V$SQL           SQL
WHERE LO.OBJECT_ID = DO.OBJECT_ID
   AND SESSION_ID = SS.SID
   AND PS.ADDR = SS.PADDR
   AND SS.SQL_ADDRESS = SQL.ADDRESS
   AND SS.SQL_HASH_VALUE = SQL.HASH_VALUE;

 
查到后可以看到他们的sid, SERIAL#,然后用

alter system kill session '237,12574';

 

语句把这个sid结束掉.要是结束不掉,出现ORA-00031: session marked for kill错误后.也就是说进程状态被置为"killed",但是锁定的资源很长时间没有被释放,这个时候怎么办呢,既然kill不掉sid,那我们试试把它的spid kill掉,执行下面的语句获得进程(线程)号

select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=237

 
然后再在操作系统上把这个spid kill掉.

你可能感兴趣的:(登录oracle资料库时很久无反应的问题处理一例)