`
liwenshui322
  • 浏览: 511252 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)解决ORA-27100 shared memory realm already exists错误

 
阅读更多

如何解决ORA-27100 shared memory realm already exists错误 
这个错误的字面意思是:共享内存领域已经存在。
这个错误一般是在你发布STARTUP的时候碰上的。

具体操作步骤如下:
C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 5月 22 10:09:13 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已连接到空闲例程。

select lower(user) || '@' || substr( global_name, 1,
*
第 1 行出现错误:
ORA-01034: ORACLE not available


idle> startup pfile='c:\init.ora'
ORA-27100: shared memory realm already exists
idle> ;
  1  select lower(user) || '@' || substr( global_name, 1,
  2  decode( dot, 0, length(global_name), dot-1) ) global_name
  3* from (select global_name, instr(global_name,'.') dot from global_name )
idle> startup pfile='c:\init.ora';
ORA-27100: shared memory realm already exists
idle> quit
已断开连接

C:\Documents and Settings\Administrator>net stop oracleserviceorcl
OracleServiceORCL 服务正在停止.
OracleServiceORCL 服务已成功停止。


C:\Documents and Settings\Administrator>net start oracleserviceorcl
OracleServiceORCL 服务正在启动 .
OracleServiceORCL 服务已经启动成功。


C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 5月 22 10:11:34 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已连接到空闲例程。

select lower(user) || '@' || substr( global_name, 1,
*
第 1 行出现错误:
ORA-01034: ORACLE not available

--删除原来的spfileorcl.ora文件,可先备份起来
idle> startup pfile='c:\init.ora';
ORACLE 例程已经启动。

Total System Global Area  591396864 bytes
Fixed Size                  1250308 bytes
Variable Size             163580924 bytes
Database Buffers          419430400 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
数据库已经打开。
idle> show parameter sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 564M
sga_target                           big integer 564M
idle> create spfile from pfile='c:\init.ora';

文件已创建。

idle> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
idle> startup
ORACLE 例程已经启动。

Total System Global Area  591396864 bytes
Fixed Size                  1250308 bytes
Variable Size             163580924 bytes
Database Buffers          419430400 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
数据库已经打开。
idle> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      F:\ORACLE\PRODUCT\10.2.0\DB_1\
                                                 DATABASE\SPFILEORCL.ORA
idle> select open_mode from v$instance;
select open_mode from v$instance
       *
第 1 行出现错误:
ORA-00904: "OPEN_MODE": 标识符无效


idle> select open_mode from v$database;

OPEN_MODE
----------
READ WRITE

idle>
错误原因:发生这样的错误,往往是在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)。 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics