=======
在试图启动数据库的时候,Oracle报告下列错误:
ERROR:
ORA-27101 Shared memory realm does not exist
ORA-01034 ORACLE not available
基本解释
========
Error: ORA-27101
Text: shared memory realm does not exist
-------------------------------------------
Cause: Unable to locate shared memory realm
Action: Verify that the realm is Accessible
网上搜索解决办法:
===============
这个问题其实用一句话就可以说清楚:
ORACLE_HOME或者ORACLE_SID设置不正确。
在以前的版本中,如果ORACLE_SID不正确,一般都只提示ORA-01034。Oracle8.1.7 给出一个额外的信息:ORA-27101。
->如果是Unix,在Shell里把ORACLE_SID设置正确即可(注意大小写敏感的问题)。
此外,检查ORACLE_HOME环境变量。如何检查参考如下的命令:
% echo $ORACLE_SID
% ps -ef grep smon
->如果是Windows,一般都是因为系统中有多个实例造成的。
可以在命令行下C:\>set ORACLE_SID=DEMO
把这里的DEMO换为你相应的实例名。
如果还不行的话,检查注册表中的ORACLE_HOME。
此外,在Windows环境下有的时候连接不上远程的数据库,会报告如此的错误。
解决办法是把sqlnet.ora文件中的
SQLNET.AUTHENTICATION_SERVICES = (NTS) NTS换为NONE.
反思
====
呵呵,上边说的是头头是道,不可怀疑的样子。虽然觉得不可能是SID 和ORA_HOME的问题(因为以前一直好好的,总不能说是突然见SID不对了吧。最开始是以为总是断电导致系统失败,结果啊,不是,不过也可能有关系),可还是去查了一下。检查结果,和以前正常时没有什么区别,还是一样一样的!!到底是哪儿出错了呢?看那个提示:不能创建listener.log文件,没有足够的权限。
难到是谁改了权限?也不应该,去看看吧。突然想到,会不会是没有空间了,没有空间也可能会出现不能写入或创建文件?df救命来了,结果竟然发现 /oracle目录的空间已经使用了100%,怪不得啊。得,先把这个log文件删了吧。进入lsnrctl后stop/start后还是不行。难道还要重启?算了,reboot。重启之后,顺利启动oracle。
后记
====
有的时候不能光看错误提示所告诉你的原因。有时候原因很简单,但又可能被忽视,如"磁盘已满!"
*********************************************************************************************************************************
Oracle ORA-01034和ORA-27101错误的解决方法
当数据库关闭或者ORACLE_HOME、ORACLE_SID设置不正确时,用户登录会出现如下错误提示:
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does notexist
Linux Error: 2: No such file ordirectory
Process ID: 0
Session ID: 0 Serial number: 0
解决办法:
(1)如果是数据库已关闭,则只需要以管理员身份登录将数据库开启即可
[oracle@localhost ~]$ sqlplus / assysdba
SQL*Plus: Release 11.2.0.1.0 Production on Wed Dec7 19:11:23 2011
Copyright (c) 1982, 2009, Oracle. All rightsreserved.
Connected to an idle instance.
SQL>startup
ORACLE instance started.
Total System Global Area 836976640bytes
Fixed Size 1339740 bytes
Variable Size 490737316 bytes
Database Buffers 339738624 bytes
Redo Buffers 5160960 bytes
Database mounted.
Database opened.
SQL>(启动成功)
(2)如果是ORACLE_HOME或者ORACLE_SID设置不正确
首先检查两个变量的设置情况:
[oracle@localhost ~]$ echo $ORACLE_HOME
/opt/oracle/product/11.0.1/db_1
[oracle@localhost ~]$ echo $ORACLE_SID
orcl
[oracle@localhost ~]$
如果设置不正确则在当前用户的.bash_profile文件中进行修改
[oracle@localhost ~]$ vi .bash_profile
ORACLE_BASE=/opt/oracle/product/11.0.1
ORACLE_HOME=$ORACLE_BASE/db_1
ORACLE_SID=orcl
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export ORACLE_BASEORACLE_HOME ORACLE_SID PATH
修改完成后要加载.bash_profile,
[oracle@localhost ~]$ source.bash_profile
然后就可以访问数据库了。
说明:
针对 ORA-27101: shared memory realm does notexist是由于 数据库实例关闭或者ORACLE_HOME、ORACLE_SID设置不正确引起的说法,自己进行了如下实验:
1、数据库实例关闭时,以网络连接方式(即如sqlplus user/mima@IP地址/服务名(或是sid,看sqlnet文件支持的命名
法))访问数据库服务端,发现错误提示如下:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor.
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
或是
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID
注释:根据命名方法不同对应会出现上述两个不同的错误提示。
2、set oracle_sid=不存在的实例名,发现错误提示如下:
ORA-12560:TNS:protocol adapter error
ORA-12560: TNS: 协议适配器错误
注释:TNS说明是来自SQL*NET网络层的问题。
实验说明:当数据库实例关闭或者ORACLE_HOME、ORACLE_SID设置不正确时,全没有发生