一、现象

程序访问数据库报错ORA-00257: Archiver error. Connect AS SYSDBA only until resolved

提示数据库归档的时候报错。

二、排查过程

1.查看alert日志 ,默认目录在../Oracle/diag/rdbms/...下,有如下报错,提示闪回区超出系统设置的8G的容量。

ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 209715200 bytes disk space from 8657043456 bytes limit
ORA-19815: WARNING: db_recovery_file_dest_size of 8657043456 bytes is 100.00% used, and has 0 remaining bytes available.
 

由此可见归档日志应该是放在闪回区的,没有设置另外的目录存放。

2.定位闪回区的目录所在的位置

通过一下参数查找show parameter db_reco;

可以看到闪回区大小为8256M,目录/home/u01/app/oracle/fast_recovery_area

3.再看下闪回区的使用率SELECT * FROM V$RECOVERY_FILE_DEST;

接近满了。

4.再看下闪回区的占用比例

 select * from v$flash_recovery_area_usage;

archived log占用最高

4.清理闪回区--归档日志

两种方式:

(1)删除磁盘文件-rman回收空间

cd  /home/u01/app/oracle/fast_recovery_area

找到archivelog目录

rm -rf  文件夹,此步骤删除的文件实际在rman程序里并没有释放空间,需要登录rman

执行以下步骤:

crosscheck archivelog all;----检查归档文件的状态(检查控制文件和实际物理文件的差别)

delete expired archivelog all;---删除过期的归档日志(delete expired删除的是那些本来RMAN以为存在但是实际上在磁盘或者磁带上已经被删除了的信息,删除的只是RMAN资料库中的记录)

此时再查看闪回区的占用,已经减少了

(2)rman直接清理

delete archivelog until time 'sysdate-7'; ---删除截止到当前日期-7天前的所有archivelog

三、解决方案

1.增大闪回区大小或者修改归档日志路径

增大闪回区大小:

alter system set db_recovery_file_dest_size=80G  scope=both(增大内存和spfile的配置,需要重启生效)

alter system set db_recovery_file_dest_size=80G  (默认增大内存,需要后失效)

修改归档目录:

alter system set log_archive_dest_1='location=/data/arch'  scope=both;

2.定期删除归档日志

根据rman备份策略删除归档日志

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐