日期:2014-05-16  浏览次数:20491 次

(转)解决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/