问题

实例因错误 16038 而终止,因为它无法在 FRA 中存档日志:

ORA-19815: WARNING: db_recovery_file_dest_size of 99614720000 bytes is 100.00% used, and has 0 remaining bytes available. 
Sat Mar 8 00:57:07 2008 

You have following choices to free up space from flash recovery area: 
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard, then consider changing RMAN ARCHIVELOG DELETION POLICY. 
2. Back up files to tertiary device such as tape using RMAN BACKUP RECOVERY AREA command. 
3. Add disk space and increase db_recovery_file_dest_size parameter to reflect the new space. 
4. Delete unnecessary files using RMAN DELETE command. If an operating system command was used to delete files, then use RMAN CROSSCHECK and DELETE EXPIRED commands. 

Sat Mar 8 00:57:07 2008 
Errors in file /usr/oracle/admin/ORAPTCMK/bdump/oraptcmk1_arc0_623454.trc: 
ORA-19809: limit exceeded for recovery files 
ORA-19804: cannot reclaim 308281344 bytes disk space from 99614720000 limit 
Sat Mar 8 00:57:07 2008 
ARC0: Error 19809 Creating archive log file to '+DATA' 
Sat Mar 8 00:57:07 2008 
Errors in file /usr/oracle/admin/ORAPTCMK/udump/oraptcmk1_ora_680508.trc: 
ORA-16038: log 17 sequence# 34003 cannot be archived 
ORA-19809: limit exceeded for recovery files 
ORA-00312: online log 17 thread 1: '+DATA/oraptcmk/onlinelog/redolog171.log' 
ORA-00312: online log 17 thread 1: '+FLRC/oraptcmk/onlinelog/redolog172.log' 
Sat Mar 8 00:57:07 2008 
USER: terminating instance due to error 16038
更多: zhilu jiaocheng

解决方案

默认存档日志目标设置为闪回恢复区,FRA 使用率为 100%。
没有空间来创建另外的归档日志。
如果数据库已启动并正在运行,并且 FRA 的存档日志目标已满,那么也会发生类似的情况,然后数据库将挂起。

由于 FRA 空间压力导致存档卡住的其他类似问题是

  • 数据库挂起
  • 用户无法连接到数据库
  • 无法打开数据库
  • alert.log 文件中的 FRA 空间相关错误 (ORA-19809)

在 Flash Recovery Area 中腾出更多空间或者将存档日志目标更改为 Flash Recovery Area 外部。
默认情况下,如果未设置特定 log_archive_dest_n 参数且启用快速恢复区,则在 FRA 中创建存档日志。

SQL>  show parameter db_recovery_file_dest 
NAME                            VALUE 
----------------------       -------------------------- 
db_recovery_file_dest        E:\oracle\product.2.0\flash_recovery_area 
db_recovery_file_dest_size   2G
SQL> archive log list; 
Database log mode              Archive Mode 
Automatic archival             Enabled 
Archive destination            USE_DB_RECOVERY_FILE_DEST 
Oldest online log sequence     174 
Next log sequence to archive   176 
Current log sequence           176

如果我们使用 RMAN 进行数据库备份,请检查 FRA 中的空间分布。
例如:

SQL>select file_type, percent_space_used as used,percent_space_reclaimable as reclaimable, 
    number_of_files as "number" from v$flash_recovery_area_usage; 

    FILE_TYPE          USED RECLAIMABLE     number 
    ------------ ---------- ----------- ---------- 
    CONTROLFILE           0           0          0 
    ONLINELOG             0           0          0 
    ARCHIVELOG        89.94           0         53 
    BACKUPPIECE        9.51           0         11 
    IMAGECOPY             0           0          0 
    FLASHBACKLOG          0           0          0

在上面的例子中,几乎所有的空间都被 Archivelogs 和备份片使用,没有空间可以回收。
在这种情况下,我们可以

  • 增加 FRA 大小
  • 将归档日志备份到不同位置
  • 如果可以选择磁带备份,则将 FRA 备份到磁带
  • 从 FRA 更改存档日志目标
  • 删除归档日志以腾出更多空间。 (应该是最后一个选项),如果是备用数据库,请确保这些日志已经应用于备用数据库

通常归档配置为FRA,用于归档日志文件的自动管理。
如果我们使用备用配置或者使用 RMAN 进行备份,这将非常有效,以便存档可以过时并从 FRA 自动清除。
如果我们不想利用 FRA 中的自动空间管理,我们可以为存档日志设置任何非 FRA 位置。
例如

设置归档日志目标:

SQL> alter system set log_archive_dest_1='LOCATION=E:\oracle\product' scope=both ;

取消 FRA 的默认设置:

SQL> alter system set log_archive_dest_10='' scope=both;
数据库因 ORA-19815. ORA-19809、ORA-16038 崩溃
日期:2020-09-17 00:11:47 来源:oir作者:oir