今天在优化数据库的过程中,做了一个意外操作,最终导致出现:“已请求写入SPFILE,但是在启动时未指定SPFILE”的错误。那么应该如何解决呢?
由pfile创建spfile
2008年05月12日 星期一 下午 05:19
修改oracle数据库参数文件出错及解决办法
要修改系统参数utl_file_dir,因为没经验,查了数据库启动参数文件
show parameter spfile;
为%ORACLE_HOME%/DATABASE /SPFILE%ORACLE_SID%.ORA,所以直接用EditPlus修改了数据库启动的启动参数文件spfile,在其中增加了系统参数 utl_file_dir,可重启数据库后竟然无法启动数据库。原来是不能直接修改启动参数文件spfile的。
sql> shutdown immediate ;
通信通结束
重新启动机器
sql> startup ;
ORA-00600: internal error code, arguments: [733], [538970160], [pga heap], [], [
], [], [], []
错误说明:
ORA-00600: internal error code, arguments: [733], [538970160], [pga heap], [], [], [], [], []
The 733 argument shows that is essentially an out of memory condition, the second argument is
the amount of memory in bytes requested!
In short unless you actually have to use a server parameter file - think RAC, you may consider
the potential drawbacks to outweigh the advantages.
说明PGA heap 分配出错,需要 538970160 B 字节。
修改oracle数据库参数文件出错解决办法:
一、按需要修改pfile文件,并用该pfile文件启动数据库
(实际此后半句步骤可省,因为第二步由pfile创建spfile并不一定要启动数据库,只要登入sqlplus控制台即可)
修改D:/oracle/admin/zfmi/pfile/init.ora.2312322 为init.ora .
在数据库启动时,先指定用增加参数utl_file_dir后(我的目的是要在数据库启动时增加此参数)的pfile文件启动
sql> startup pfile =' D:/oracle/admin/zfmi/pfile/init.ora';
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
二、由pfile创建spfile:
sql>create spfile from pfile ;
ERROR 位于第 1 行:
ORA-01078: 处理系统参数失败
LRM-00109: could not open parameter file
'D:/ORACLE/ORA92/DATABASE/initZFMI.ORA'
原来默认在$oracle_home/database (unix 下是$oracle_home/dbs 下)下查找pfile ,将init.ora 拷贝到 D:/ORACLE/ORA92/DATABASE ,修改名字为initZFMI.ora
sql> create spfile from pfile ;
文件已创建。
三、重启数据库,默认用新生成的spfile文件启动,检验spfile参数
sql> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
sql> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string %ORACLE_HOME%DATABASESPFILE%
ORACLE_SID%.ORA
目前oralce 已经使用了spfile ,否则value 值是空。
附:pfile与spfile相关资料:
Oracle中pfile和spfile之间的联系与区别:
pfile:用于Oracle8i,在oracle9i中也可以用,以文本形式存在,可以用vi编辑器对其中参数进行修改。文件格式为initSID.ora;
spfile:用于oracle9i,以二进制文本形式存在,不能用vi编辑器对其中参数进行修改。文件格式为spfileSID.ora。
如果要对spfile文件进行修改,可以采用下面的SQL语言进行修改,此方法修改前提是该spfile中已经有此参数。如只是要修改数据库启动参数,则用此命令后重启数据库即可,无需由pfile生成spfile。
SQL> ALTER SYSTEM SET PARAMETER = 'VALUES';
如果不方便使用SQL语句进行操作,可以使用SQL语句:
SQL> CREATE SPFILE FROM PFILE;
此方法将二进制文本形式的spfile转换成
" 已请求写入SPFILE , 但是在启动时未 指定SPFILE" 的错误。
在网上找了下,大概的解决方法如下(以下内容是转的)
1、确定$ORACLE_HOME/dbs/下没有spfile文件,有的话改个名备份。
2、以sysdba用户启动数据库到任何状态(nomoutn、mount或open),执行create spfile from pfile。
2、shutdown immediate;
3、startup
结论是 log_archive_start 是一个静态参数,只能用spfile,而oracle中scope的默认值是both
Enter Manager Conso 在弹出的窗口中选择“独立启动”。然后以sysdba的身份登陆到oracle数据库,在例程|配置 的左下角有一个按钮,名字是“所有初始化参数……”,在这里能改的
如果在ORACLE_HOME/database目录里有一个SPFILE文 件,ORACLE将使用它来启动数据库,如果那个目录里没有spfile文件,oracle就会去寻找一个名为INIT.ORA文件。如果两个文件都不存 在,oracle将报错,并要求你用“pfile=”语句来给出一个初始化参数文件的存放位置
如果你准备用来启动某个数据库的spfile文件不是该数据库的默认spfile文件,就使用“spfile=spfile文件的存放位置”语句来把新的spfile文件的存放位置写入INIT.ORA。
下面是恢复启动库的办法:
pfile 所在位置 $ORACLE_HOME 下面的 admin/$ORACLE_SID/pfile 目录下。
比如我的:
/u01/app/oracle/product/10.2.0/db_1/admin/demo1/pfile/init.ora.1272006111935
------------------------------
SQL> startup pfile=pfile 路径
通过指定的 pfile 启动数据库实例
------------------------------
SQL> create spfile from pfile=pfile 路径
通过指定的 pfile 生成 spfile, spfile 的意思是 static pfile, spfile 文件,是一个纯二进制的配置文件,千万不要用文本编辑器来修改它!