今天大黄蜂同学重启虚拟机之后再链接数据库就报了这个错,先查看了一下监听的状态
C:> lsnrctl status
... ...
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
监听中的服务并没有数据库实例orcl
,检查了一下listener.ora
文件,配置并没有问题,
怀疑是数据库启动时出了问题,导致监听并没有找到数据库服务,
为了连上数据库,在listener.ora
文件中强制添加orcl
的监听
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
# 以下是添加部分
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
)
然后重启监听,让监听可以识别orcl
服务
C:> lsnrctl stop
... ...
C:> lsnrctl start
... ...
服务 "ORCL" 包含 1 个实例。
实例 "ORCL", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
然后连接Oracle数据库,尝试重启数据库
C:> sqlplus sys/sys@127.0.0.1/orcl as sysdba
... ...
SQL> shutdown immediate;
ORA-01034 - Oracle not available
ORA-27101 - shared memory realm does not exist
网上大部分说是ORACL_HOME
或ORACLE_SID
问题,可惜并不适用,
后找到一篇说查看日志,日志路径位于ORACLE_HOME\database\ORADIM.LOG
,
日志中找到数据库启动时的报错信息如下:
Tue Jun 21 15:10:17 2016
D:\app\Administrator\product\11.2.0\dbhome_1\bin\oradim.exe -startup -sid orcl -usrpwd * -log oradim.log -nocheck 0
Tue Jun 21 15:10:33 2016
ORA-00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together
继续查询报错信息ORA-00847
,看起来是数据库系统参数设置的问题,先把pfile
导出看一下
SQL> create pfile from spfile;
创建了之后宝宝傻眼了,不在ORACLE_HOME/dbs
里啊!
后来经查才知原来Windows下pfile
的默认生成路径和linux下不一样,位于$ORACLE_BASE\admin\db_name\pfile
然后打开pfile
注释掉MEMORY_TARGET
参数的设置
...
# memory_target=898629632
...
然后从pfile
启动数据库,根据pfile
生成spfile
SQL> startup pfile='D:\app\Administrator\admin\orcl\pfile\init.ora.115201614250';
SQL> create spfile from pfile='D:\app\Administrator\admin\orcl\pfile\init.ora.115201614250';
然后便可以重启数据库了,最后将listener.ora
还原,重启服务器,再查看监听状态就可以看到orcl
服务正常了
C:> lsnrctl status
... ...
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ORCL" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
参考链接: