看了一下V$SESSION好多的BLOCKING_SESSION不为空,但是没有交叉的互锁。alert_log日志如下
Fri Jan 22 05:13:44 CST 2016
MMNL absent for 1203 secs; Foregrounds taking over
Fri Jan 22 05:40:55 CST 2016
>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=344
System State dumped to trace file /u01/app/oracle/admin/sid/udump/sid_ora_1938.trcumped to trace file /u01/app/oracle/admin/sid/udump/sid_ora_1938.trc
mmnl进程不存在了多少秒,前台接管了。mmnl进程是mmon进程一个分支,主要负责将sga的信息写入到表,该后台进程终止后,addm报告没有在产生,ADDM的数据依赖于awr报告以下时间点。具体罢工原因不明,年底了,没发奖金估计,哈哈
addm没有产生。
select *
from dba_advisor_log a
where a.task_name like '%ADDM%'
AND a.execution_start between
to_date('20160122 05:13:44', 'yyyymmdd hh24:mi:ss') and
to_date('20160122 08:13:44', 'yyyymmdd hh24:mi:ss');
这与下面的问题有没有直接联系?哈哈,看看这个wait too long,用脚想想有应该有关系的啦。到底是个什么关系嘞。好了,开始查资料吧
row cache enqueue lock,由于mmnl进程的终止,相关数据不能从内存写到磁盘,相关latch不能释放。latch锁是oracle3大锁类型的一种,一种内存保护的低级锁。
好了,由于进程终止,重启实例(有谁知道能不能不重启实例,直接重启相关进程的(后在20160128做一次实验是可以的,见文章结尾))好像事情进展总是不是那么的顺利,shutdown immediate条件反射型的敲完了回车之后,一想不对,重开了窗口准备执行abort。sys用户登陆报错
Connected. ERROR: ORA-01012: not logged on。
网络资料给的是杀掉数据库写进程,为什么不是lgwr或者其他进程嘞,反正都准备abort关实例了,想想杀个dbwr后台进程也就无所谓了(哎,慎用)
ps -ef |grep ora_dbw0_
kill -9 XXXX
startup。好了这才是问题的刚刚开始
ORA-01102: cannot mount database in EXCLUSIVE mode。
这个问题想都没有想 $ORACLE_HOME/dbs下的lksid文件,删了。
alter database mount;
alter database open;报错,abort是不会对数据有什么损坏的,最多也就是实例恢复,所以这应该是kill dbw进程时对文件造成的损坏。无法对数据文件加锁保护。看了ora_dbw0_XXX.trc,没办法,手工恢复吧。
ORA-01157: cannot identify/lock data file 24 - see DBWR trace file
ORA-01110: data file 24: '/u01/app/oracle/oradata/sid_09.dbf'
alter database datafile 24 offline;
启动rman
restore datafile 24;报错继续, error in creating database file关注这点就行了。文件已存在。删除了该文件。
creating datafile fno=24 name=/u01/app/oracle/oradata/sid_09.dbf
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 01/22/2016 09:53:41
ORA-01119: error in creating database file '/u01/app/oracle/oradata/sid_09.dbf'
ORA-27086: unable to lock file - already in use
Linux-x86_64 Error: 11: Resource temporarily unavailable
Additional information: 8
Additional information: 3604;
recover datafile 24;
alter database datafile 24 online; 将数据文件重新连机。
打开实例
alter database open;
-- 20160128
有时间的情况下做一次实验,对于mmnl这个非oracle5大核心进程的(诸如你杀了dbw进程,oracle不会自动给你重启的,实例直接关了都),杀了该进程,一段时间后,oracle会自动重启该进程,应该是pmon进程在管理该进程,那么前提就必须是pmon这个进程是正常的情况下才可以