SPFILE参数修改错误的解决办法 (在window 下oracle的ora-27100错误解決)
跟着eygle的 http://www.eygle.com/archives/2008/07/spfile_fault_correct.html
SPFILE参数修改错误的解决办法出现了问题。
1 首先先看一下原来的sga_max_size 的值:
sql>show parameter sga_max_size;
584 M
2 修改参数sga_max_size:
SQL> alter system set sga_max_size=5G scope=spfile;
System altered.
那么下次启动,如果内存不足,数据库是无法启动的:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-27102: out of memory
SQL> conn sys/ssssss as sysdba
已连接到空闲例程。
SQL> startup
ORA-27103: internal error
OSD-00005: ????????????
SQL>
3 在Linux下的情况:(这个我没有弄,直接copy)
在Unix、Linux上可以连接到数据库,创建pfile:
SQL> create pfile from spfile;
File created.
如果在Window上,你手上还没有任何可供参考的参数文件,那么很简单,用记事本(Notepad)编辑一个文件,包含如下两行:
[oracle@test126 dbs]$ cat initeygle.ora
SPFILE='/opt/oracle/product/10.2.0/dbs/spfileeygle.ora'
sga_max_size=1073741824
第一行指向SPFILE,第二行写上出错的参数,给一个正确的值。这个值在实例启动时会覆盖之前错误的设置。
然后就可以使用这个文件启动数据库实例了:
SQL> startup pfile=$ORACLE_HOME/dbs/initeygle.ora
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 1223540 bytes
Variable Size 918553740 bytes
Database Buffers 146800640 bytes
Redo Buffers 7163904 bytes
Database mounted.
Database opened.
4 如果在Windows上,你只能通过服务起停数据库,那么Oracle缺省的还是会寻找SPFILE,一个办法是将SPFILE改名。(实践)
比如将原来的SPFILEORCL.ora 重命名为spfileorcl2.ora. 然后启动的时候通过pfile 参数引用来启动。eygle 说,下次重启就不用指定pfile,我的是需要。
5 在使用的过程中我通过spfile 建pfile ,然后startup pfile ='....'; 来引用的:
SQL> CREATE PFILE='E:\oracle\product\10.2.0\db_1\dbs\PFILELJS.ORA' FROM SPFILE='
E:\oracle\product\10.2.0\db_1\dbs\SPFILEORCL.ORA';
文件已创建。
SQL> STARTUP PFILE='E:\oracle\product\10.2.0\db_1\dbs\PFILELJS.ORA'
ORA-27100: shared memory realm already exists
//这个错误的意思是实例共享内存的空间已经存在,但是实际上自己又没有启动数据库实例。网上都是说这样去做的,但是实际操作时这一步报错,网上都没有说
SQL> SHUTDOWN IMMEDIATE
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
SQL>//重复数次还是一样。
原因:
仔细分析一下,这是windows服务及oracle的问题,oracle在windows启动中如果由于sga_max_size的问题,实例不会启动成功,但是仍然会有一个错误的实例存在,shutdown
immediate及shutdown abort都关闭不了。由于缺省安装时,oracle在windows服务启动时会自动启动实例,所以每次启动服务都会自动用默认的错误的spfile启动实例,导至内存错误。
解决:
Administration Assistant for Windows NT修改数据库启动关闭选项
,启动windows服务的时候不启动实例,这个时候用stratup pfile='initXXXX.ora'的命令启动就没有问题(不行的话在控制台那边重启服务试试)
再次启动是时候还是需要指定pfile:
SQL> startup pfile=E:\oracle\product\10.2.0\db_1\dbs\pfileljs.ora
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250476 bytes
Variable Size 272632660 bytes
Database Buffers 331350016 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORA-27103: internal error
OSD-00005: ????????????
SQL> startup pfile=E:\oracle\product\10.2.0\db_1\dbs\pfileljs.ora;
ORA-27100: shared memory realm already exists
SQL> startup pfile=E:\oracle\product\10.2.0\db_1\dbs\pfileljs.ora;
ORA-03113: 通信通道的文件结束
SQL> connect sys/ssssss as sysdba
已连接到空闲例程。
SQL> startup pfile=E:\oracle\product\10.2.0\db_1\dbs\pfileljs.ora
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250476 bytes
Variable Size 272632660 bytes
Database Buffers 331350016 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
参考:http://blog.csdn.net/Johnson_Hong/archive/2009/03/03/3954646.aspx