ORA-19815: WARNING: db_recovery_file_dest_size闪回区爆满问题处理

2021-10-24

问题描述:有一个数据库起不来了,根据层层排查,是因为归档设置在了闪回区,文件的大小已经超出了闪回区限制。最后直接给数据库拖挂

环境:windows server2012 , oracle 19c,单机

 

1.sqlplus 连接到空闲实例,发现数据库已经挂掉,直接startup 数据,只能到mount状态

 

 

 

2.hang住一会开始报错

ORA-16038: log 2 sequence# 1325 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: 'O:\ORACLE_DATA\SYNVNACDB\REDOo2.LOG'
ORA-00312: online log 2 thread 1: 'F:\FAST_RECOVERY_AREA\SYNVNACDB\REDOo2.LOG'

 

 

 

 

3. 日志组log 2 ,序列号为sequence #1325 号日志不能被归档,后面是有查到原因是因为归档在闪回区,这里无法被归档,前期我们还没有查到是这个原因,只能清理日志组,来处理当前不能被归档的日志

这个时候数据库是可以启动到mount状态的,在mount状态下操作

SQL> startup mount;

查看v$log日志视图
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 1327 YES INACTIVE
2 1325 NO CURRENT
3 1326 YES INACTIVE

可以知道,该组1是非当前状态,而且已经归档。

3、先清理没有被归档的日志,这里清理了有问题的log2,所幸清理完数据库可以open了
SQL>alter database clear unarchived logfile group 2;

如果不成功过,用CLEAR命令重建该日志文件
SQL>alter database clear logfile group 3;

4、打开数据库,重新备份数据库
SQL>alter database open;

5、重启数据库来验证是否存在问题
SQL>shutdown immediate
SQL>startup

 

4.重启完数据库可以正常起来了,但是在切换归档的时候又出现了报错,切换归档时一直卡着,到后台看alert日志发现了如下报错

 

 

 

ORA-19815: WARNING: db_recovery_file_dest_size of 73014444032 bytes is 100.00% used

 

发现其最终原因还是归档设置在了闪回区内,闪回区目前大小为70G,调整方法为可以在闪回区内删除一下旧的归档,或者在线扩大一下闪回区的大小,我们盘符的空间充足,两种方式同步进行

解决方式:

alter system set db_recovery_file_dest_size=100G scope=both;

手动删除了一些归档文件,去切换归档还是没有成功,应该是数据库内存还是认为空间不够。在线扩充闪回,扩充完成,归档就立马切换成功

 

5.全部做完一定要做一次数据库的全备,如果归档设置在闪回区内,一定要加强对闪回区的空间监控。

查看闪回区的使用情况

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