oracle数据库由于服务器异常重启而宕机,重启数据库后,发现远程连接无法连接
报错如下:
ORA-01034 - Oracle not available
ORA-27101 - shared memory realm does not exist
以前遇到过类似的情况,多是由于之前oracle使用的共享内存没有正常释放,重启过数据库后即可。
这一次处理起来便是直接重启数据库,然后悲剧的发现还是报错如上。
查看监听,发现也能捕获到实例信息,觉得很奇怪。
后来到$ORACLE_HOME/dbs下面查看spfile文件,发现竟然有两个spfile,分别是实例名大写和小写,
当前默认是大写的,于是export为小写,发现数据库依然能够启动起来,但是不是旧库(该数据库做过迁移)
于是有了头绪,再次观察lsnrctl status输出信息,发现确实有问题了,实例信息捕获到的是小写的实例名。。。
我将listener.ora中的sid改成大写后。。。应用重启正常,远程可以连接。
问题分析推理:
首先由于存在一个小写的实例名,并且该实例是静态注册的方式,导致监听启动起来便能看到该小写实例的信息,从而误导了我,以为监听是正常的,捕获到了数据库的信息。其实不然,另一方面,由于大写的实例采用的是动态注册的方式,oracle异常停掉后没有找到该实例的注册信息。。