flash_recovery_area满的解决办法

时间:2022-12-27 16:23:21
1、oracle启动报错

ORA-16014: log 3 sequence# 82 not archived, no available destinations
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/hxy/redo03.log'


这是由于Flash Recovery Area空间不足导致数据库不能打开,解决办法如下


一、改变数据状态到mount,

SQL>alter database mount



二、查看Flash Recovery Area空间的使用状态


SQL> show parameter db_recovery_file


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string            /db/oracle/flash_recovery_area
db_recovery_file_dest_size       big integer   2G
 
当我们将数据库的模式修改为归档模式的时候,如果没有指定归档目录,默认的归档文件就会放到Flash Recovery Area的目录,但是这个目录是有大小限制的,如果超过了这个大小,就会导致2个问题,一是不能完成归档,二是,在出现问题后,如果此时重启数据库,那么数据库就无法正常启动。

三、这个问题有3个解决办法,(1)扩大Flash Recovery Area的容量(2)删除不用的归档日志文件(3)指定归档日志文件到其他目录

(1)扩大Flash Recovery Area容量治标不治本

SQL> alter system set db_recovery_file_dest_size=3G scope=both;      #增加容量

SQL> show parameter db_recovery_file                                                         

#查看是否增加

SQL> select * from v$flash_recovery_area_usage                                       #检查
Flash Recovery Area使用状况


计算flash recovery area已经占用的空间: 

SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage; 

(3)删除不用的归档日志文件
先到/db/oracle/flash_recovery_area目录下删除不用的归档文件
但是还要到数据库里删除一下,要不然数据库不认,再启动会报下面的错误
ORA-16038: log 3 sequence# 82 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/hxy/redo03.log'

进入RMAN
  rman 
  RMAN> connect target / 
  RMAN> crosscheck archivelog all; 
  RMAN> delete expired archivelog all; 
或者 RMAN>delete obsolete; 
         RMAN>crosscheck backupset; 
         RMAN> delete expired backupset;
   RMAN>exit 
然后再次启动数据库,问题解决
(3)指定归档日志文件到其他目录
推荐使用这个办法 alter system set log_archive_dest_1='location=/db/oracle/oradata/archive_log'