12c rac ORA-19809: 超出了恢复文件数的限制 ORA-19804: 无法回收 182452224 字节磁盘空间 (从 19368247296 字节限制中)

现象:查看集群数据库状态,发现归档挂起

[oracle@jydb2 ~]$ srvctl status database -d orcl -v
实例 racdb11 正在节点 jydb1 上运行。实例状态: Stuck Archiver。
实例 racdb12 正在节点 jydb2 上运行。实例状态: Stuck Archiver。

查看日志

[oracle@jydb2 ~]$ tail  -n30 /u01/app/oracle/diag/rdbms/orcl/racdb12/trace/alert_racdb12.log 
************************************************************************
You have following choices to free up space from 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.
************************************************************************
2018-08-09T11:02:25.793556+08:00
Errors in file /u01/app/oracle/diag/rdbms/orcl/racdb12/trace/racdb12_arc1_17738.trc:
ORA-19809: 超出了恢复文件数的限制
ORA-19804: 无法回收 182452224 字节磁盘空间 (从 19368247296 字节限制中)
ARC1: Error 19809 Creating archive log file to '+FRA'

查看空间使用情况

[oracle@jydb1 ~]$ sqlplus  / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on 星期三 8月 8 14:37:03 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


连接到: 
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> set linesize 100
SQL> set pages 100
SQL> show parameter db_recovery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +FRA
db_recovery_file_dest_size           big integer 18471M
SQL> select sum(percent_space_used) from v$flash_recovery_area_usage;

SUM(PERCENT_SPACE_USED)
-----------------------
                  99.37

查看asm磁盘组磁盘空间使用情况

[root@jydb1 rlwrap-0.37]# su - grid
[grid@jydb1 ~]$ asmcmd
ASMCMD> lsdg
State    Type    Rebal  Sector  Logical_Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512             512   4096  4194304     20480     9456                0            9456              0             N  DATA/
MOUNTED  EXTERN  N         512             512   4096  4194304     20480     1776                0            1776              0             N  FRA/
MOUNTED  EXTERN  N         512             512   4096  4194304     51200    15796                0           15796              0             N  MGMT/
MOUNTED  NORMAL  N         512             512   4096  4194304      3072     2204             1024             590              0             Y  OCR/

db_recovery_file_dest_size已使用完,flash recovery area闪回恢复区空间满,无法再归档。

解决办法:
1.将归档设置到其他目录,修改alter system set log_archive_dest = 其他路径
2.转移或者删除闪回恢复区里的归档日志。
3.增大闪回恢复区。

如果RMAN未使用恢复目录,或是恢复目录与目标数据库在同一数据库下,由于目标数据库实例无法正常启动,所以只能查看参数文件或是启动日志来确定闪回恢复区大小及位置。RMAN也连接不到目标数据库来删除归档日志以释放空间。

适合我的方案:在RMAN下删除目标数据库中过期的或是删除指定时间之前的归档日志。

[oracle@jydb2 ~]$ rman target=sys/*****@orcl nocatalog

恢复管理器: Release 12.2.0.1.0 - Production on 星期四 8月 9 11:30:54 2018

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

已连接到目标数据库: ORCL (DBID=1508459345)
使用目标数据库控制文件替代恢复目录


RMAN>crosscheck archivelog all;   -- 运行这个命令可以把无效的expired的archivelog标出来。
RMAN> delete expired archivelog all; ----删除过期的归档日志

释放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=160 设备类型=DISK
说明与资料档案库中的任何归档日志都不匹配 -----无过期日志可删除
RMAN> delete archivelog until time "sysdate-10"; --删除10天前的归档日志。或者:delete noprompt archivelog until time "sysdate - 10";
或者:
RMAN> delete archivelog until time "to_date('2018-08-01 23:59:59','yyyy-mm-dd hh24:mi:ss')"; --删除指定日期之前的所有归档日志。

验证

查看空间使用情况,看到已经恢复正常

SQL> select sum(percent_space_used) from v$flash_recovery_area_usage;

SUM(PERCENT_SPACE_USED)
-----------------------
                  11.48

数据库也恢复OPEN状态。

[oracle@jydb2 ~]$ srvctl status database -d orcl -v
实例 racdb11 正在节点 jydb1 上运行。实例状态: Open。
实例 racdb12 正在节点 jydb2 上运行。实例状态: Open。

进一步优化策略

指定retention的策略,使得archivelog不至于这样增加

RMAN> configure retention policy to recovery window of 7 days;

旧的 RMAN 配置参数:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
新的 RMAN 配置参数:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
已成功存储新的 RMAN 配置参数

你可能感兴趣的:(#,oracle)