必须先开启归档模式,再设置DB_RECOVERY_FILE_DEST和大小,最后在MOUNT状态下执行ALTER DATABASE FLASHBACK ON;顺序错误将报ORA-38706/ORA-38707。
必须先开归档,再设闪回区路径和大小,最后才能启用 flashback database;顺序错一步,alter database flashback on 就会报 ora-38706 和 ora-38707。
确认并开启归档模式是前提
闪回数据库依赖归档日志机制,非归档模式下 FLASHBACK DATABASE 直接不可用。不能跳过这步,也不能在 open 状态下临时“凑合”。
- 执行
ARCHIVE LOG LIST查看当前状态;若显示Database log mode: No Archive Mode,说明未启用归档 - 必须按顺序执行:
SHUTDOWN IMMEDIATE→STARTUP MOUNT→ALTER DATABASE ARCHIVELOG→ALTER DATABASE OPEN - 11g 及以后版本允许在 open 状态下设置归档参数(如
log_archive_dest_1),但归档模式本身只能在 mount 下切换;否则报ORA-01126 - 建议显式设置归档路径,避免默认写入闪回区导致空间争抢:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/arch' SCOPE=SPFILE
设置 DB_RECOVERY_FILE_DEST 和 DB_RECOVERY_FILE_DEST_SIZE
这两个参数必须都非空且有效,FLASHBACK ON 才能成功。注意:先设 SIZE,再设 DEST,否则部分 11.2.0.x 版本会忽略路径。
-
DB_RECOVERY_FILE_DEST_SIZE必须大于 0,单位支持G、M,例如ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 10G SCOPE=BOTH -
DB_RECOVERY_FILE_DEST必须是 Oracle 进程有读写权限的本地目录(不支持 ASM 或远程 NFS);例如ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fast_recovery_area' SCOPE=BOTH - 目录需提前由
oracle用户创建并赋权:mkdir -p /u01/app/oracle/fast_recovery_area && chown oracle:oinstall /u01/app/oracle/fast_recovery_area - 修改后需重启实例(或至少
SHUTDOWN IMMEDIATE+STARTUP MOUNT)使参数生效;SCOPE=BOTH仅对内存+spfile 生效,但 11g R2 中某些 patch 版本要求 spfile 重启才真正加载
启用 FLASHBACK DATABASE 的正确时机与验证
不能在 open 状态下直接执行 ALTER DATABASE FLASHBACK ON —— 即使归档已开、参数已设,也大概率失败。11g 虽支持 open 下启用,但底层仍要求实例处于 mount 状态完成初始化。
- 执行顺序必须是:
SHUTDOWN IMMEDIATE→STARTUP MOUNT→ALTER DATABASE FLASHBACK ON→ALTER DATABASE OPEN - 启用后立即查:
SELECT FLASHBACK_ON FROM V$DATABASE,返回YES才算成功;若仍为NO,大概率是前两步某处参数未生效或目录无权限 - 可选但推荐:调整保留时间,默认 1440 分钟(1 天),如需 3 天则设
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET = 4320 SCOPE=BOTH - 首次启用后,Oracle 会开始写入闪回日志,但
V$FLASHBACK_DATABASE_LOG中的OLDEST_FLASHBACK_TIME可能延迟几分钟才更新,不必立刻查
常见卡点:ORA-00257、ORA-38706 和权限问题
这些错误几乎都指向同一个根源:闪回区不可写或未真正激活。别急着查文档,先盯住三件事。
-
ORA-00257(archiver error):归档日志写满闪回区,本质是DB_RECOVERY_FILE_DEST_SIZE设太小,或归档路径没改导致归档和闪回日志挤在一起;解决:增大 size 或把LOG_ARCHIVE_DEST_1指向独立路径 -
ORA-38706: Cannot enable FLASHBACK DATABASE logging+ORA-38707: Media recovery is not enabled:典型是归档没开,或开了但没重启生效;检查ARCHIVE LOG LIST输出是否含Automatic archival Enabled - 目录权限错误:即使
ls -ld看起来可写,也要确认 Oracle 进程 UID 确实是oracle,且 SELinux 或 ACL 未拦截;最简验证:su - oracle -c "touch /u01/app/oracle/fast_recovery_area/test" -
FLASHBACK_ON显示RESTORE POINT ONLY:说明只建了还原点但没开闪回功能,不是配置完成态
最关键的细节是:所有参数修改后,STARTUP MOUNT 阶段必须能看到 show parameter db_recovery_file_dest 返回非空值,且 select * from v$recovery_file_dest 能查出对应记录——这是 FLASHBACK ON 成功的前置信号,漏掉这个验证,后面八成要重来。


















