跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

如何恢复丢失的SPFILE_从内存或PFILE重建服务器参数文件

能,但仅限实例当前运行且所有参数均为动态生效或虽静态但未重启;若用PFILE启动或部分参数未显式设置,则生成的SPFILE缺失关键启动参数,重启将失败。 SPFILE 丢失后,
CREATE SPFILE FROM MEMORY
能用吗? 能,但仅限实例当前正在运行、且所有参数都是动态生效(或虽静态但未重启)的状态。oracle 启动后会把 spfile 内容加载进内存,后续所有
alter system set ... scope=both
操作也同步更新内存和磁盘 spfile;但如果只用了
scope=memory
或实例曾用 pfile 启动过,内存里的值就可能不完整。
CREATE SPFILE FROM MEMORY
不会还原那些只在原始 SPFILE 里存在、但从未被显式修改过的默认参数(比如
db_name
、
control_files
这类启动必需项,它们必须靠 PFILE 显式提供) 如果实例是用 PFILE 启动的,
CREATE SPFILE FROM MEMORY
生成的 SPFILE 会缺失关键静态参数,下次重启直接失败 执行前先确认:
SHOW PARAMETER spfile
返回非空值,才说明当前确实是 SPFILE 启动的 没有 SPFILE 也没留备份,怎么从
V$SPPARAMETER
拼出可用 PFILE?
V$SPPARAMETER
记录了 SPFILE 中所有参数的实际值(包括被注释掉的),但它不保留顺序、注释、空行,也不区分哪些是 Oracle 自动添加的(如
__db_cache_size
)。直接导出它生成的文本不能直接当 PFILE 用。 先过滤出真正需要的参数:
SELECT name, value FROM V$SPPARAMETER WHERE isspecified = 'TRUE'
—— 只取用户显式设置过的项 必须手动补上
db_name
、
db_domain
、
control_files
、
sga_target
或
memory_target
等启动强依赖项(
V$SPPARAMETER
里可能为空或为默认值,但 PFILE 里不能缺) 遇到带双下划线的隐含参数(如
__shared_pool_size
),一律删掉 —— 它们由 Oracle 自动计算,写进 PFILE 会导致启动报错
ORA-00100
或忽略 示例片段(注意等号前后无空格,路径用单引号):
db_name='ORCL' control_files='/u01/app/oracle/oradata/ORCL/control01.ctl' sga_target=2G processes=300
用
CREATE PFILE FROM SPFILE
失败,提示
ORA-01565
怎么办?
ORA-01565
表示 Oracle 找不到 SPFILE 文件本身,不是权限或路径问题,而是 SPFILE 真的不存在或路径被改过。这时候不能硬试命令,得先定位真实路径。 查
V$PARAMETER
:
SELECT value FROM V$PARAMETER WHERE name = 'spfile'
—— 如果返回 NULL,说明实例根本没从 SPFILE 启动 检查传统位置:
$ORACLE_HOME/dbs/spfile.ora
(Linux/Unix)或
%ORACLE_HOME%\database\spfile.ora
(Windows),但注意 SID 大小写和是否用了 ASM(ASM 上的 SPFILE 路径在
+DATA/ORCL/PARAMETERFILE/spfile.272.123456789
这类格式) 如果 SPFILE 在 ASM,又没开 ASM 实例,
CREATE PFILE FROM SPFILE
必然失败;此时只能连上 ASM 实例,用
ASMCMD
的
cp
命令先把 SPFILE 拷贝到文件系统再操作 重建 SPFILE 后,为什么重启还是报
ORA-01078
和 LRM-00109?
ORA-01078
+
LRM-00109
组合,基本等于“Oracle 找到了 PFILE/SPFILE,但里面某个参数语法错了,或者值非法”。最常见的是:
control_files
路径写错,比如多了一个斜杠
'/u01//oradata/ORCL/control01.ctl'
,或者路径不存在且没创建目录 数值型参数用了字母,比如
processes=300a
(粘贴时带了隐藏字符) 单引号没闭合,尤其在 Windows 路径里混用反斜杠和单引号时容易漏掉:正确是
'C:\app\oracle\oradata\ORCL\control01.ctl'
,错误是
'C:\app\oracle\oradata\ORCL\control01.ctl
使用了只在高版本支持的参数(如
enable_pluggable_database=TRUE
),但在 11g 实例里启动 重建后的 SPFILE 无法直接编辑,所以务必先用
CREATE PFILE FROM SPFILE
导出一份文本,人工检查后再重创建。这一步跳不过。

相关文章