如何解决ORA-27100 shared memory realm already exists错误

来源:互联网 发布:模糊图像处理算法 编辑:程序博客网 时间:2024/05/16 18:42
Author: Rainny
Date: 2009-4-1

这个错误的字面意思是:共享内存领域已经存在。
这个错误一般是在你发布STARTUP的时候碰上的。
错误原因:发生这样的错误,往往是在WINDOWS环境(但不是绝对,在LINUX和UNIX也会出现这种错误)。在WINDOWS环境中,ORACLE在WINDOWS的服务中有一个OracleServiceSID条目,要启动ORACLE,必须先启动WINDOWS的这个服务。但这个OracleServiceSID服务启动时,缺省是会启动ORACE实例和数据库(你可以用ORADIM这个实用工具去改这个缺省配置),ORACLE启动实例搜寻参数文件的顺序是这样的:
(1)优先顺序
– spfileSID.ora
– 缺省SPFILE
– initSID.ora
– 缺省PFILE
(2)指定的PFILE 可覆盖优先顺序
STARTUP PFILE = $ORACLE_HOME/dbs/initDBA1.ora
(3)PFILE 可指示要使用SPFILE(将下面的内容添加到PFILE文件中)
SPFILE = /database/startup/spfileDBA1.ora

SpfileSID,initSID以及缺省的SPFILE和PFILE的位置视操作系统而定,在LINUX和UNIX平台,这些文件位于$ORACLE_HOME/dbs 目录中,在WINDOWS平台,这些文件位于$ORACLE_HOME/database 目录中.安装完ORACLE数据库,在$ORACLE_HOME /admin/SID/pfile目录下有一个该数据库的INIT PFILE,里面包含了刚创建完数据库时的缺省配置。如果你不小心将ORACLE的实例参数改坏了,你可以COPY一份这个文件,将其重命名为initSID.ora,并用这个参数文件来启动ORACLE实例。
ORA-27100往往是你在不正确的更改了ORACLE实例参数后,并将其永久保存到SPFILE后,重启ORACLE服务时,ORACLE会以这个不正确的SPFILE来启动实例,虽然可能不会成功装载和打开数据库,但启动WINDOWS的服务:OracleServiceSID肯定会启动ORACLE实例,也就是说会分配SHARE MEMORY REALM(尽管ORACLE数据库没有启动),这时,你连接ORACLE,肯定是不成功的。当你试图用SQL PLUS登进去,发布STARUP时,ORA-27100就出来了。而当你发布SHUTDOWN时,因为ORACLE没有正确的启动,所以也不能成功关闭。
解决办法:将已破坏的spfileSID.ora从 $ORACLE_HOME/database或$ORACLE_HOME/dbs移除(为放心起见,最好先将其剪贴到另外一个地方,随便一个ORACLE启动时不会搜寻到的目录,如桌面或$ORACLE_HOME目录之外),重启WINDOWS的OracleServiceSID服务,然后,在SQLPLUS中,用先前COPY的那份initSID.ora启动ORACLE:
SQL>startup pfile=’$ORACLE_HOME /admin/SID/pfile/initSID.ora’;
成功启动后,将SPFILE用下面的命令恢复过来:
CREATE SPFILE FROM PFILE=’$ORACLE_HOME /admin/SID/pfile/initSID.ora’;

这相当于是将SPFILE的内容恢复到刚创建完ORACLE数据库时的缺省配置。你在创建完数据库后对SPFILE所做的修改会丢失。你必须重新启动ORACLE:
SQL>shutdown immediate;
SQL>startup;
这样以SPFILE启动ORACLE后,重新修改ORACLE的参数,将之前的修改重做一次(当然,你必须将之前的不正确的更改更正过来,否则,当你不正确的设置了ORACLE的参数后,又会破坏SPFILE)。
原创粉丝点击