必须先开启归档模式、配置db_recovery_file_dest为本地路径或asm磁盘组并重启生效,再执行alter database flashback on,否则报ora-38706或ora-38729;同时需清空log_archive_dest_1并设为use_db_recovery_file_dest以确保归档日志写入fra。
必须先开归档、设fra路径并重启,再执行alter database flashback on,否则直接报ora-38706/ora-38729。
确认数据库已启用归档模式
闪回数据库依赖介质恢复能力,未开归档就无法启用。执行ARCHIVE LOG LIST,输出中必须含Database log mode: Archive Mode。若显示No Archive Mode:
- 必须停库:
SHUTDOWN IMMEDIATE→STARTUP MOUNT - 执行
ALTER DATABASE ARCHIVELOG(仅设LOG_ARCHIVE_START=TRUE无效,该参数在10g+已废弃) - 再
ALTER DATABASE OPEN
设置DB_RECOVERY_FILE_DEST并确保生效
这是硬性前提,不是可选项。路径必须是本地文件系统或ASM磁盘组,不能是NFS或远程挂载点;且SCOPE=BOTH不等于热生效,必须重启才起作用:
- 先设大小(建议≥数据库总数据量的30%):
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 20G SCOPE=BOTH - 再设路径(Linux示例):
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fast_recovery_area' SCOPE=BOTH - 立即重启:
SHUTDOWN IMMEDIATE→STARTUP - 验证:
SHOW PARAMETER db_recovery_file_dest,确认值非空,并检查路径属主、权限、剩余空间
清空LOG_ARCHIVE_DEST_1并强制归档进FRA
如果LOG_ARCHIVE_DEST_1指向非FRA路径,RMAN可能找不到归档日志,还原时报RMAN-06023;更严重的是,它会覆盖FRA的自动归档行为:
- 清空原配置:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = '' SCOPE=BOTH - 明确指定走FRA:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' SCOPE=BOTH - 确认归档格式含
%r(resetlogs ID):SHOW PARAMETER log_archive_format,应类似%t_%s_%r.dbf - 触发一次归档:
ALTER SYSTEM ARCHIVE CURRENT LOG,再查SELECT NAME FROM V$ARCHIVED_LOG WHERE ROWNUM ,确认路径落在<code>DB_RECOVERY_FILE_DEST下
执行ALTER DATABASE FLASHBACK ON并验证
这一步只能在MOUNT状态下完成,且前面所有条件都满足后才能成功:
-
SHUTDOWN IMMEDIATE→STARTUP MOUNT ALTER DATABASE FLASHBACK ONALTER DATABASE OPEN- 验证:
SELECT flashback_on FROM v$database,返回YES才算真正启用
注意:DB_FLASHBACK_RETENTION_TARGET(默认1440分钟)只影响闪回日志保留时长,但实际清理由FRA空间压力驱动,不受RMAN保留策略控制。最容易被忽略的是:路径没重启、归档没强制进FRA、或LOG_ARCHIVE_DEST_1残留旧值——这三个点任一出错,FLASHBACK DATABASE执行时必然报ORA-38729。











