资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
快速解决实时生产库中,包不能编译,死锁等问题1、使用 PLSQL 登陆该用户,执行如下 SQL,查看一下是否有 oracle 自己的进程.Select a.Username, a.SID, a.SERIAL# ,b.Sql_Text,c.spid From V$Session a, V$Sqlarea b,v$process cWhere a.Username Is Not NullAnd (a.Sql_Address = b.Address Or a.Prev_Sql_Addr = b.Address)and a.PADDR=c.ADDRand c.SPID in( select spid from v$session s,v$process pwhere s.paddr=p.addr and s.sid in(select sid from v$session_wait )2、如果没有 ORACLE 进程则执行Select kill -9 | spidFrom V$Session a, V$Sqlarea b,v$process cWhere a.Username Is Not NullAnd (a.Sql_Address = b.Address Or a.Prev_Sql_Addr = b.Address)and a.PADDR=c.ADDRand c.SPID in( select spid from v$session s,v$process pwhere s.paddr=p.addr and s.sid in(select sid from v$session_wait )3、先关掉系统使用的服务如 WEBSERVICE, 使用 telnet 工具或 SecureCRT 4.1 工具登陆到unix 中的 oracle 用户下,拷贝粘贴如下命令,如有双机,最好两个机器都执行一下该杀进程的命令.执行成功后则开始服务如(webservice),这样只快速解决由于包死锁带来的问题.备注:改涉及医保接口的表结构或编码医保接口相关包,最好能把 HIS 或接口 WEBSERVICE 停止后才进行修改,或晚上交易少的情况下进行变动By wat8/21/2009解决行锁select a.sql_text,b.sid,b.MACHINE,b.PROGRAM,b.serial# from v$sqlarea a,v$session b,v$locked_object c where a.address=b.sql_address and b.sid=c.SESSION_ID alter system kill session 180, 29757 ;查 SPIDselect a.spid,b.sid,b.serial#,b.username from v$process a,v$session b where a.addr=b.paddr and b.status=KILLEDselect spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=180用户 root 登陆后,进行 kill -9 spid;一些 ORACLE 中的进程被杀掉后,状态被置为killed,但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。但是 shutdown immediate 又怕可能进程杀不掉会一直停留在 shutdown immediate,直接 shutdown abort 又怕损坏数据库。 现在提供一种方法解决这种问题,那就是在 ORACLE 中杀不掉的,在 OS 一级再杀。 一些 ORACLE 中的进程被杀掉后,状态被置为killed,但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。但是 shutdown immediate 又怕可能进程杀不掉会一直停留在 shutdown immediate,直接 shutdown abort 又怕损坏数据库。 现在提供一种方法解决这种问题,那就是在 ORACLE 中杀不掉的,在 OS 一级再杀。 1.下面的语句用来查询哪些对象被锁: SELECT S.USERNAME,S.OSUSER,S.SID,S.SERIAL#,P.SPID FROM V$SESSION S,V$PROCESS P WHERE S.PADDR=P.ADDR AND S.USERNAME IS NOT NULL; 2.下面的语句用来杀死一个进程: alter system kill session sid,serial#; 【注】以上两步,可以通过 Oracle 的管理控制台来执行。 如果出现题目的错误,可以 select a.spid,b.sid,b.serial#,b.username from v$process a,v$session b where a.addr=b.paddr and b.status=KILLED ; 3.如果利用上面的命令杀死一个进程后,进程状态被置为killed,但是锁定的资源很长时间没有被释放,那么可以在 os 一级再杀死相应的进程(线程) ,首先执行下面的语句获得进程(线程)号: select spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=33 (33 就是上面的 sid) 4.在 OS 上杀死这个进程(线程): 1)在 unix 上,用 root 身份执行命令: #kill -9 12345(即第 3 步查询出的 spid) 2)在 windows(unix 也适用)用 orakill 杀死线程,orakill 是 oracle 提供的一个可执行命令,语法为: orakill sid thread 其中: sid:表示要杀死的进程属于的实例名 thread:是要杀掉的线程号,即第 3 步查询出的 spid。 例:c:orakill orcl 12345 Ps:这里要注意的是 kill OS 进程是在服务端操作,而不是你程序所在客户机。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号