必须先启用归档模式、配置并重启生效DB_RECOVERY_FILE_DEST、清空LOG_ARCHIVE_DEST_1并设为USE_DB_RECOVERY_FILE_DEST,再在MOUNT状态下执行ALTER DATABASE FLASHBACK ON,否则报ORA-38706或ORA-38729。
确认归档模式是否已启用
没开归档,flashback database 直接报 ora-38729 或 ora-38706,不是警告,是硬性失败。执行 archive log list,输出里必须明确含 database log mode: archive mode 和 automatic archival: enabled。如果看到 no archive mode,别改参数 log_archive_start(10g+ 已废弃),必须停库:shutdown immediate → startup mount → alter database archivelog → alter database open。
设置并验证 DB_RECOVERY_FILE_DEST
这个路径就是闪回日志、归档日志、RMAN 备份的统一落盘区(FRA),不是可选项,是强制前提。路径必须是本地文件系统或 ASM 磁盘组,不能是 NFS、不能是远程挂载点。设完不重启,FLASHBACK DATABASE 仍会失败:
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 20G SCOPE=BOTHALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fast_recovery_area' SCOPE=BOTH- 立即执行
SHUTDOWN IMMEDIATE→STARTUP,否则参数不生效 - 重启后运行
SHOW PARAMETER db_recovery_file_dest,确认值非空;再检查该路径属主为oracle、权限为755、剩余空间 ≥ 数据库总数据量的 30%
强制归档日志写入 FRA
如果 LOG_ARCHIVE_DEST_1 指向了非 FRA 路径,RMAN 找不到归档日志,还原时报 RMAN-06023;更糟的是,它会覆盖 FRA 的自动归档逻辑,导致闪回日志缺失。必须清空并重定向:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = '' SCOPE=BOTHALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' SCOPE=BOTH- 确认
LOG_ARCHIVE_FORMAT含%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下
启用 FLASHBACK DATABASE 并验证
这一步只能在 MOUNT 状态下执行,且前面所有条件都满足后才能成功。漏掉任意一环,ALTER DATABASE FLASHBACK ON 都会报错:
SHUTDOWN IMMEDIATESTARTUP MOUNTALTER DATABASE FLASHBACK ONALTER DATABASE OPEN- 验证:
SELECT flashback_on FROM v$database,返回YES才算真正启用
注意:DB_FLASHBACK_RETENTION_TARGET(默认 1440 分钟)只影响保留窗口,不保证一定能回退到该时间点——FRA 空间压力大时,旧闪回日志会被自动清理,这是最容易被忽略的实际约束。











