今天检查数据库中的备份输出脚本时,发现RMAN备份出现了错误。


通过清除racgimon以及racgmain check进程来尝试解决问题。




在上一篇文章中清除了大量的僵死进程,但是这个方法只能治标而不能治本。


除了操作系统中看到的大量racgmain check进程之外,数据库中还可以看到一些racgimon会话:


SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT TIME


 2  FROM V$SESSION


 3  WHERE PROGRAM LIKE 'racg%';


      SID USERNAME PROGRAM                      EVENT                                TIME


---------- -------- ---------------------------- ------------------------------ ----------


      123 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276138


      124 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276142


      130 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276123


      132 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276145


      147 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276145


      148 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276105


      150 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276111


      151 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276051


      156 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276123


      279 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276142


      284 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276138


      290 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276102


      297 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276138


      298 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276132


      306 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276105


      314 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client             0


      319 SYS      racgimon@ahrac1 (TNS V1-V3)  SQL*Net message from client        276145


已选择17行。


可以看到,除了其中一个之外,其他所有racgimon会话的等待时间都要比刚才清除的僵死进程时间要长,那么数据库现在共享资源被锁定的“元凶”很可能就是这些会话。但是由于对这个会话的任务不了解,而且kill这些会话的进程后果也不清楚,因此一直没有碰这些会话。经过前面的步骤,清除了大量的占用锁的会话以及处于等待的会话,问题仍然没有解决,说明刚才清除的会话都不是造成问题的根本所在。


为了避免清除掉这个racgimon进程,导致实例崩溃,在一个RAC测试环境尝试了一下杀掉racgimon会话对应的进程,发现实例并不会报错,而是随后自动启动了一个新的racgimon进程。


SQL> SELECT 'kill -9 ' || SPID


 2  FROM V$PROCESS


 3  WHERE ADDR IN


 4  (SELECT PADDR FROM V$SESSION


 5  WHERE PROGRAM LIKE 'racgimon%'


 6  AND SECONDS_IN_WAIT > 86400);


'KILL-9'||SPID


--------------------


kill -9 8042


kill -9 8219


kill -9 8221


kill -9 23136


kill -9 19091


kill -9 23140


kill -9 19441


kill -9 22653


kill -9 22655


kill -9 22686


kill -9 19406


kill -9 23171


kill -9 21666


kill -9 22004


kill -9 23134


kill -9 23169


已选择16行。


SQL> HOST


$ kill -9 8042


$ kill -9 8219


$ kill -9 8221


$ kill -9 23136


$ kill -9 19091


$ kill -9 23140


$ kill -9 19441


$ kill -9 22653


$ kill -9 22655


$ kill -9 22686


$ kill -9 19406


$ kill -9 23171


$ kill -9 21666


$ kill -9 22004


$ kill -9 23134


$ kill -9 23169


$ exit


在另一个实例上执行同样的操作:


SQL> SELECT SID, USERNAME, PROGRAM, EVENT, SECONDS_IN_WAIT TIME


 2  FROM V$SESSION


 3  WHERE PROGRAM LIKE 'racg%';


      SID USERNAME PROGRAM                        EVENT                                TIME


---------- -------- ------------------------------ ------------------------------ ----------


      113 SYS      racgimon@ahrac2 (TNS V1-V3)    SQL*Net message from client        277028


      142 SYS      racgimon@ahrac2 (TNS V1-V3)    SQL*Net message from client        276532


      197 SYS      racgimon@ahrac2 (TNS V1-V3)    SQL*Net message from client             3


      309 SYS      racgimon@ahrac2 (TNS V1-V3)    SQL*Net message from client        278230


      324 SYS      racgimon@ahrac2 (TNS V1-V3)    SQL*Net message from client        277631


      325 SYS      racgimon@ahrac2 (TNS V1-V3)    SQL*Net message from client        276592


已选择6行。


SQL> SELECT 'kill -9 ' || SPID


 2  FROM V$PROCESS


 3  WHERE ADDR IN


 4  (SELECT PADDR FROM V$SESSION


 5  WHERE PROGRAM LIKE 'racgimon%'


 6  AND SECONDS_IN_WAIT > 86400);


'KILL-9'||SPID


--------------------


kill -9 10059


kill -9 10219


kill -9 4510


kill -9 9827


kill -9 10217


SQL> HOST


$ kill -9 10059


$ kill -9 10219


$ kill -9 4510


$ kill -9 9827


$ kill -9 10217


$ exit


问题仍然没有完全解决,看来只能将实例1上大量的racgmain check进程杀掉。


进程杀掉之后问题仍然没有解决,看来是数据库的状态存在问题了,现在唯一的方法就只能重启实例了,好在是RAC环境,可以先重启一个节点,然后再重启另一个。


没想到问题远比我想象的还要复杂,实例1通过svrctl命令关闭数据库没有相应,随后使用SHUTDOWN IMMEDIATE,也没有响应,最终导致所有的用户都无法登陆到实例,但是数据库并没有关闭,后台日志显示:


Wed May 27 12:25:13 2009


Starting background process EMN0


Wed May 27 12:27:13 2009


ERROR: Emon failed to start.


Shutting down instance: further logons disabled


Wed May 27 12:27:16 2009


ksvcreate: Process(m001) creation failed


Wed May 27 12:27:16 2009


Errors in file /opt/oracle/admin/tradedb/bdump/tradedb1_pmon_7173.trc:


ORA-00443: background process "EMN0" did not start


Wed May 27 12:27:19 2009


ksvcreate: Process(m001) creation failed


Wed May 27 12:28:19 2009


ksvcreate: Process(m001) creation failed


Wed May 27 12:29:19 2009


ksvcreate: Process(m001) creation failed


Wed May 27 12:30:19 2009


ksvcreate: Process(m001) creation failed


只好通过操作系统kill进程的方式,杀掉ORACLE进程,这是实例1关闭,但是实例2仍然启动,在实例2节点上执行rman错误依旧,看来必须重启整个数据库才能解决问题。


在实例2上使用SHUTDOWN ABORT:


bash-3.00$ sqlplus "/ as sysdba"


SQL*Plus: Release10.2.0.3.0 - Production on星期三5月27 12:45:56 2009


Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.




连接到:


Oracle Database10gEnterprise Edition Release10.2.0.3.0 - 64bit Production


With the Partitioning, Real Application Clusters, OLAP and Data Mining options


SQL> shutdown abort


ORACLE例程已经关闭。


数据库的状态明显不对,显然是数据库或者是cluster状态不正常造成的,为了彻底的解决问题,只好将cluster一起重启,关闭cluster时发现关闭进程居然也hang住了:


# /etc/init.d/init.crs stop


Shutting down Oracle Cluster Ready Services (CRS):


没有别的办法,只有通过KILL进程的方法来杀掉CRS进程,由于CLUSTER进程被异常关闭,服务器自动重启:


# May 27 13:01:23 ahrac1 root: [ID 702911 user.alert] Oracle CSSD failure.  Rebooting for cluster integrity.


既然节点1已经重启,节点2上的cluster状态也是不对的,不如将节点2上的crs也重启:


# /etc/init.d/init.crs stop


Shutting down Oracle Cluster Ready Services (CRS):


May 27 12:48:03.461 | INF | daemon shutting down


同样的问题出现,关闭CLUSTER时被挂起。


只好再次采用kill进程的方法,节点2也进行了重启。


两个节点全部重启后,最不幸的事情发生了,节点1没有完成启动,随后通过ping可以看到节点1处于活动状态,但是由于网络服务没有启动,导致节点1无法正常登陆。


节点2虽然可以顺利启动,但是尝试执行/etc/init.d/init.crs start命令启动cluster时发现错误信息:


bash-3.00# /etc/init.d/init.crs start


Startup will be queued to init within 30 seconds.


bash-3.00#


bash-3.00# ps -ef|grep ora


 oracle  2177  2170   0 13:11:48 ?           0:00 /usr/lib/ssh/sshd


 oracle  2179  2177   0 13:11:48 pts/1       0:00 -sh


   root  2713  2435   0 13:14:10 pts/1       0:00 grep ora


bash-3.00# ps -ef|grep ora


 oracle  2823  2820   0 13:14:13 ?           0:00 /opt/oracle/product/10.2/crs/bin/crsctl.bin check boot


 oracle  2820  2727   0 13:14:13 ?           0:00 sh -c /opt/oracle/product/10.2/crs/bin/crsctl check boot > /tmp/crsctl.2727


 oracle  2177  2170   0 13:11:48 ?           0:00 /usr/lib/ssh/sshd


 oracle  2822  2821   0 13:14:13 ?           0:00 /opt/oracle/product/10.2/crs/bin/crsctl.bin check boot


 oracle  2179  2177   0 13:11:48 pts/1       0:00 -sh


 oracle  2821  2714   0 13:14:13 ?           0:00 sh -c /opt/oracle/product/10.2/crs/bin/crsctl check boot > /tmp/crsctl.2714


 oracle  2819  2718   0 13:14:13 ?           0:00 sh -c /opt/oracle/product/10.2/crs/bin/crsctl check boot > /tmp/crsctl.2718


 oracle  2824  2819   0 13:14:13 ?           0:00 /opt/oracle/product/10.2/crs/bin/crsctl.bin check boot


   root  2832  2435   0 13:14:15 pts/1       0:00 grep ora


bash-3.00# ps -ef|grep ora


 oracle  2177  2170   0 13:11:48 ?           0:00 /usr/lib/ssh/sshd


 oracle  2179  2177   0 13:11:48 pts/1       0:00 -sh


   root  2840  2435   0 13:14:17 pts/1       0:00 grep ora


检查后台进程,发现CLUSTER相关进程并没有启动,检查/tmp目录下的crsctl.2714文件,发现错误信息:


bash-3.00# more /tmp/crsctl.2714


OCR initialization failed accessing OCR device: PROC-26: Error while accessing the physical storage Operating System error [No such device or address] [6]




但是这次等待了将近30分钟,节点2仍然无法访问OCR设备,看来问题越来越复杂了。


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html