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