跳转到主内容
极星编程网:以代码为星,赴技术山海!

Oracle 12c备库进程MRP0异常关闭怎么办_查看Trace文件并重新启动应用

MRP0异常关闭需先查trace定位根因,常见ORA-01111/01110/01157表明存在UNNAMED占位文件;确认v$datafile中UNNAMED条目后,根据是否需保留数据选择CREATE DATAFILE或OFFLINE DROP修复,并确保standby_file_management=AUTO、db_file_name_convert配置完整。
mrp0
进程异常关闭不是“重启就能好”的问题,直接执行
alter database recover managed standby database disconnect from session
很可能秒退,根本起不来——因为底层文件状态已损坏,强行启动只会重复报错。 查
MRP0
的 trace 文件定位真实错误点
MRP0
崩溃时写的 trace 文件(路径在告警日志开头的
Errors in file ...
行里)比 alertlog 更细,能暴露具体卡在哪一步。常见关键线索包括: - 出现
ORA-01111
、
ORA-01110
、
ORA-01157
组合:说明控制文件里存在
UNNAMED
占位文件,但磁盘上没对应物理文件 - 出现
ORA-27040
或
ORA-19502
:指向实际写文件失败,大概率是目录不存在、权限不对或 ASM diskgroup 未挂载 - 出现
ORA-16055
或反复
FAL request failed
:说明归档有 gap,MRP 被阻塞在等缺失日志,不是文件问题而是传输断了 别只扫一眼 trace 就关掉——重点看最后 20 行的 call stack,找第一个非 ORA-00600 的错误,那才是根因。 确认
v$datafile
中是否存在
UNNAMED
条目
UNNAMED
是症状,不是原因。先验证它是否真实存在: - 在备库 mount 状态下运行:
SELECT file#, name FROM v$datafile WHERE name LIKE '%UNNAMED%';
- 如果返回结果不为空(如
/u01/app/oracle/product/12.1.0/dbhome_1/dbs/UNNAMED00042
),说明控制文件已“登记”了一个无法访问的文件 - 此时
MRP0
必然起不来,因为 recovery 过程中会尝试打开这个文件,而它根本不存在 注意:
UNNAMED
条目不会自动消失,即使主库后来删掉了对应表空间——备库控制文件仍保留该记录,必须人工干预。 手动修复
UNNAMED
文件的两种路径 修复方式取决于你能否在备库创建对应文件: - 如果磁盘空间、目录权限、ASM diskgroup 都 OK: 用
ALTER DATABASE CREATE DATAFILE '/path/to/UNNAMED00042' AS '/real/path/to/datafile01.dbf';
再执行
RECOVER DATABASE
让 MRP 从断点续应用 - 如果主库已删该表空间,且你确认备库不需要该数据: 先
ALTER DATABASE DATAFILE 42 OFFLINE DROP;
(42 是上面查出的
file#
) 再
ALTER DATABASE OPEN;
(此时数据库可读写,但该文件逻辑丢失) 后续若需完全清理,需重建控制文件或做完整恢复 切记:不要在 open 状态下直接删
UNNAMED
对应的控制文件条目——v$controlfile_record_section 不可直接修改,硬删会破坏控制文件结构。 oracle知识库 oracle知识库下载 下载 启动前务必检查
standby_file_management
和路径映射 很多
MRP0
反复崩溃,是因为参数没对齐: -
standby_file_management
必须为
AUTO
,否则新增文件不会自动创建 -
db_file_name_convert
必须覆盖主库所有数据文件路径,漏一条就可能生成
UNNAMED
- 检查
SELECT * FROM v$parameter WHERE name IN ('standby_file_management', 'db_file_name_convert');
- 若用 ASM,确认
db_create_file_dest
在备库指向有效的、已
MOUNTED
的 diskgroup 最易被忽略的是:RAC 环境下,
db_file_name_convert
必须在所有节点生效;哪怕一个实例没 reload,它的 LGWR 传过来的 redo 仍会触发备库文件创建失败。

相关文章