Oracle中:已请求写入 SPFILE, 但是在启动时未指定 SPFILE

来源:互联网 发布:破解大陆封锁网络 编辑:程序博客网 时间:2024/06/05 18:45

今天在优化数据库的过程中,做了一个意外操作,最终导致出现:“已请求写入SPFILE,但是在启动时未指定SPFILE”的错误。那么应该如何解决呢?

由于在做操作之前已经将SPFILE进行了备份,备份命令采用了create pfile from spfile;
出现这个错误时,执行了一下show parameter spfile;结果发现value字段值为空或者如下:
SQL> show parameters spfile;

NAME                            TYPE
----------------------------------------------------------
VALUE
------------------------------
spfile                          string

正常情况下应该显示:
SQL> show parameters spfile;

NAME                            TYPE       VALUE
------------------------------------ -----------------------------------------
spfile                          string     D:/ORACLE/PRODUCT/10.2.0/DB_1/
                                         DATABASE/SPFILECW.ORA
那么出现这个问题我们应该如何解决呢?
解决方法如下:
一、确保D:/oracle/product/10.2.0/db_1/dbs下没有与SPFILE字眼相关的文件,如果有的话,将其备份到其他位置。
二、执行create spfile frompfile;
三、执行 shutdownimmediate;
四、执行startup命令
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  612368384bytes
Fixed Size               1332348 bytes
Variable Size           229288836 bytes
Database Buffers         377487360bytes
Redo Buffers              4259840bytes
数据库装载完毕。
数据库已经打开。
五、执行show parametersspfile
SQL> show parameters spfile;

NAME                            TYPE       VALUE
------------------------------------ -----------------------------------------
spfile                          string     D:/ORACLE/PRODUCT/10.2.0/DB_1/
                                         DATABASE/SPFILECW.ORA



由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 文件,是一个纯二进制的配置文件,千万不要用文本编辑器来修改它!

原创粉丝点击