fra是rman备份、归档管理及flashback database的硬性依赖,未配置或配置错误将导致ora-38729和ora-19809等错误;必须正确设置db_recovery_file_dest(本地asm或文件系统路径)与db_recovery_file_dest_size(且后者须先于前者设置),并确保log_archive_dest_1指向use_db_recovery_file_dest,同时配置archivelog deletion policy以支持自动清理。
fra 不是“建议用”,而是 rman 备份、归档日志管理、flashback database 的硬性依赖——不配 fra,这些功能要么失效,要么出错。
ORA-38729 和 ORA-19809 都指向同一个根因:FRA 没配或配错
执行 FLASHBACK DATABASE TO TIMESTAMP 报 ORA-38729: not enough flashback database log data,不是时间点太老,而是根本没生成闪回日志;RMAN 备份时突然失败报 ORA-19809: limit exceeded for recovery files,也不是磁盘真满了,而是 DB_RECOVERY_FILE_DEST_SIZE 配额耗尽。这两个错误背后,90% 是因为:
-
DB_RECOVERY_FILE_DEST未设置,或设成了 NFS/远程路径(Oracle 明确拒绝) - 先设了
DB_RECOVERY_FILE_DEST,但漏设DB_RECOVERY_FILE_DEST_SIZE,数据库启动直接报ORA-19802 - 设置了参数但没重启数据库(
SCOPE=SPFILE后必须SHUTDOWN IMMEDIATE+STARTUP)
归档日志不进 FRA,RMAN 就找不到它
仅执行 ARCHIVE LOG LIST 看到 “Archive Mode” 不代表归档就安全了。如果 LOG_ARCHIVE_DEST_1 指向 /arch 这类外部路径,归档日志绕过 FRA,RMAN 备份时会因找不到归档而失败,报 RMAN-06023: no backup or copy of datafile found to restore。正确做法是:
- 清空旧值:
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:SHOW PARAMETER LOG_ARCHIVE_FORMAT,应类似%t_%s_%r.dbf(否则跨incarnation时归档冲突) - 立即执行
ALTER SYSTEM ARCHIVE LOG CURRENT,再查V$ARCHIVED_LOG.NAME是否落在DB_RECOVERY_FILE_DEST下
FRA 空间管理不是“配完就完事”,它分两层清理逻辑
很多人扩了 DB_RECOVERY_FILE_DEST_SIZE 还报错,是因为没理解 FRA 内部的清理机制:
-
RMAN RETENTION POLICY(如RECOVERY WINDOW OF 7 DAYS)只管backupsets和archived logs,不管flashback logs -
flashback logs的存留由 FRA 空间压力触发自动回收,不受CONFIGURE RETENTION POLICY控制 - 如果开了 DataGuard 但没配
ARCHIVELOG DELETION POLICY,主库会认为备库还需要所有归档,死扛不删,FRA 很快爆满 - 真正释放空间靠
CROSSCHECK BACKUP+DELETE OBSOLETE,不是扩大小就能腾出空间
最常被忽略的一点:FRA 路径必须本地化(ASM 或本地文件系统),且 DB_RECOVERY_FILE_DEST_SIZE 必须在 DB_RECOVERY_FILE_DEST 之前设置——顺序反了,数据库连启动都失败。











