今天开启oracle服务登陆oracle数据库输入用户名和密码莫名其妙的报错:
ORA_01034:ORACLE not available
ORA_27101:shared memory realm does not exist
如图所示Sqlplus连接时出现这个错误;在网上查了一下出现ORA-01034和ORA-27101的原因是多方面的:主要是oracle当前的服务不可用,shared memory realm does not exist,是因为oracle没有启动或没有正常启动,共享内存并没有分配给当前实例.所以,通过设置实例名,再用操作系统身份验证的方式,启动数据库。这样数据库就正常启动了,就不会报ORA-01034和ORA-27101两个启动异常了。
还有就是可能是登录数据库后,不正常的退出,比如直接关掉窗口,而这时数据库里有未完成的动作,再次登录时就会提示“insufficient privileges”的报错,SQL>shutdown immediate; SQL>startup;就恢复正常了。
比较一下启动和没启动的内存大小:查看任务管理器下oracle.exe所占内存,正常oracle.exe所占内存如下:
当oracle.exe所占内存为几十兆说明Oracle数据库没有启动:
解决步骤:
1.先看oracle的监听和oracle的服务是否都启动了。启动oracle监听:cmd命令行窗口下,输入lsnrctl start,回车即启动监听。
2 查看oracle的sid叫什么,比如创建数据库的时候,实例名叫“orcl”,那么先手工设置一下oralce的orcl,cmd命令窗口中,set ORACLE_SID=orcl.
3.进入SQL:输入sqlplus /nolog 回车或者输入 conn / as sysdba;回车
提示:SQL> conn sys/123456 as sysdba
已连接到空闲例程。
4.再输入startup,回车.这步是启动oracle服务。如果startup启动被告知已经启动了,可以先输入shutdown immediate;等shutdown结束之后,再输入startup。
到这里之后又报错:
SQL> startup
ORA-00119: invalid specification for system parameter LOCAL_LISTENE
ORA-00132: syntax error or unresolved network name 'LISTENER_ORCL'
alert log 中的错误如下:
USER (ospid: 17619): terminating the instance due to error 119
Instance terminated by USER, pid = 17619
5.这个报错是因为检查$ORACLE_HOME/network/admin/tnsnames.ora中的network name,发现没有LISTENER_ORC的监听名。
将本机的tnsnames.ora中的network name修改为LISTENER_ORCL,重启解决。
LISTENER_ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
6.成功:
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 2566914048 bytes
Fixed Size 3048920 bytes
Variable Size 671091240 bytes
Database Buffers 1879048192 bytes
Redo Buffers 13725696 bytes
数据库装载完毕。
数据库已经打开。