解决ORA-01034/ORA-27101

解决ORA-01034/ORA-27101

问题描述
=======
在试图启动数据库的时候,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设置不正确时,全没有发生

ORA-27101。


你可能感兴趣的:(解决ORA-01034/ORA-27101)