具体报错场景说明:
oracle11g启动时采用的是指定pfile文件进行启动
SQL> startup pfile='/u01/oracle/interlib/initorcl.ora' mount;
ORACLE instance started.
Total System Global Area 1586708480 bytes
Fixed Size 2213736 bytes
Variable Size 922749080 bytes
Database Buffers 654311424 bytes
Redo Buffers 7434240 bytes
Database mounted.
修改系统参数cluster_database=false 出现的报错
SQL> alter system set cluster_database=false scope=spfile;
alter system set cluster_database=false scope=spfile
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE is in use
错误解释:
ORA-32001错误表示你尝试执行一个需要写入SPFILE(SPFILE是一个二进制文件,包含了数据库的启动配置参数)的操作,但是当前数据库没有在使用SPFILE。
解决方法:
1.如果你想要通过SPFILE来进行操作,你需要确保数据库启动时使用的是SPFILE。你可以通过查看数据库的初始化参数文件来确认是否在使用SPFILE,通过以下SQL查询:
SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type"
FROM v$parameter
WHERE name = 'spfile';
SQL> SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type"
2 FROM v$parameter
3 WHERE name = 'spfile';
Init F
------
PFILE
SQL>
查询结果显示'PFILE',表示当前数据库使用的是PFILE(文本参数文件)
2.如果你确实需要使用SPFILE,你可以将当前的PFILE转换成SPFILE。这可以通过以下命令完成:
CREATE SPFILE FROM PFILE;
下面是指定生成文件的具体位置和文件名称的sql指令
create SPFILE ='/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/spfileorcl.ora0929' from PFILE;
当然也可以不必指定 CREATE SPFILE FROM PFILE; 指令默认就会在dbs目录下生产一个dbs/spfileorcl.ora 文件来覆盖原来的dbs/spfileorcl.ora二进制文件
执行这个命令之后,PFILE会被转换成SPFILE,并且之后的数据库启动都会默认使用这个SPFILE。
3.如果你不想使用SPFILE,你可以直接使用PFILE启动数据库。在启动数据库时指定PFILE的路径。
比如采用下面的指令启动:
startup pfile='/u01/oracle/interlib/initorcl.ora' mount;
4.如果数据库已经使用SPFILE,但是文件损坏或丢失,你需要从备份中恢复SPFILE,或者按照上述步骤创建一个新的SPFILE。确保在执行任何操作前备份当前的配置文件,以防万一操作失败导致数据库无法启动
5.关闭和重新启动oracle11g 让其默认加载spfile文件启动
shutdown immediate;
startup mount;
想看当前启动中的数据库加载的spfile文件或者pfile文件具体路径可以使用以下命令查
1.查看spfile位置:(数据库使用的是spfile启动的)
SELECT
VALUE
FROM
V$PARAMETER
WHERE
NAME = 'spfile';
SQL> SELECT
2 VALUE
3 FROM
4 V$PARAMETER
5 WHERE
6 NAME = 'spfile';
VALUE
--------------------------------------------------------------------------------
/u01/oracle/tools/oracle11g/product/11.2.0/dbhome_1/dbs/spfileorcl.ora
2.查看pfile位置:(数据库使用的是spfile启动的话 是查看不到值的)
SELECT
VALUE
FROM
V$PARAMETER
WHERE
NAME = 'pfile';
SQL> SELECT
2 VALUE
3 FROM
4 V$PARAMETER
5 WHERE
6 NAME = 'pfile';
no rows selected
以上就是简单的分析过程,欢迎留言一起交流学习
var code = "693a8587-092c-4076-a895-8b8958b45167"