This page looks best with JavaScript enabled

Archivelog Deletion Policy Changes Don't Always Take Immediate Effect.

 ·  ☕ 4 min read

    The standby database had the RMAN archivelog deletion policy set to ‘NONE’ instead of being ‘APPLIED ON ALL STANDBY’ and the FRA filled up to within an inch of its life, or 99% of its allocated quota! Not a major problem as this database was not in production, but still, an alert is an alert and has to be dealt with. However, things did not go quite as expected.

    First things first, check the archivelog deletion policy on the standby database:

    $ rman target / catalog user/password@catalog
    
    RMAN> show archivelog deletion policy;
    RMAN configuration parameters for database with db_unique_name xxxxxxxx are:
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
    
    RMAN> configure archivelog deletion policy to applied on all standby;
    
    old RMAN configuration parameters:
    CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
    new RMAN configuration parameters:
    CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
    new RMAN configuration parameters are successfully stored
    
    RMAN> exit 
    

    As the FRA was currently at 99% usage, I expected Oracle to start clearing out archived logs that had been applied on the standby, in other words, the vast majority of them, Strangely, this didn’t happen. Never mind, sometimes you have to encourage Oracle by transporting a new archived log from the primary, which usually kicks off the tidy up process. Let’s do that, on the primary database.

    1
    
    $ sqlplus / as sysdba
    
    1
    2
    3
    4
    
    SQL> alter system archive log current;
    System altered.
    
    SQL> exit
    

    Back on the standby database, tailing the alert log shows that the new archived log had arrived and been applied, but still no deletions. Hmmm, maybe a little more encouragement is required.

    1
    
    $ sqlplus / as sysdba
    
    1
    2
    3
    4
    5
    6
    
    SQL> show parameter recovery_file_dest
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_recovery_file_dest                string      +FRA
    db_recovery_file_dest_size           big integer 40G
    

    So, we have a quota of 40gb in the FRA for this standby, it’s not yet in production, so that’s a reasonable quota. How much is actually used? We know it’s a lot - 99% - from the alert that started all this off, but let’s check anyway.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    SQL> set lines 300 pages 300 numw 15 trimspool on
    
    SQL> col name format a10
    SQL> col space_limit format 999,999,999,999
    SQL> col space_used format 999,999,999,999
    SQL> col space_reclaimable format 999,999,999,999
    SQL> col number_of_files format 9,999,999
    
    SQL> select * from v$recovery_file_dest;
    
    NAME            SPACE_LIMIT       SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES          CON_ID
    ---------- ---------------- ---------------- ----------------- --------------- ---------------
    +FRA         42,949,672,960   42,652,925,952    42,633,003,008           1,313               0
    

    Pretty much, all of it, as expected. What makes up the usage? Is it all archived logs or could there be restore points and/or flashback logs as well.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    SQL> col percent_space_used format 990.00
    SQL> col percent_space_reclaimable format 990.00
    
    SQL> select * from v$flash_recovery_area_usage;
    
    FILE_TYPE               PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES          CON_ID
    ----------------------- ------------------ ------------------------- --------------- ---------------
    CONTROL FILE                          0.00                      0.00               0               0
    REDO LOG                              0.00                      0.00               0               0
    ARCHIVED LOG                         99.31                     99.26           1,313               0
    BACKUP PIECE                          0.00                      0.00               0               0
    IMAGE COPY                            0.00                      0.00               0               0
    FLASHBACK LOG                         0.00                      0.00               0               0
    FOREIGN ARCHIVED LOG                  0.00                      0.00               0               0
    AUXILIARY DATAFILE COPY               0.00                      0.00               0               0
    

    In this case, it’s definitely archived logs and the vast majority can be reclaimed. Time to get rid! We know that gentle persuasion didn’t have any effect, so let’s increase the pressure a little:

    1
    2
    
    SQL> alter system set db_recovery_file_dest_size = 35g scope=memory;
    System altered.
    

    And tailing the alert log, in another session, shows that things are finally happening.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Fri Dec 11 14:03:13 2015
    ALTER SYSTEM SET db_recovery_file_dest_size=35G SCOPE=MEMORY;
    Fri Dec 11 14:03:13 2015
    Deleted Oracle managed file +FRA/xxxxxxxx/ARCHIVELOG/2015_09_29/thread_1_seq_70.835.891673917
    Deleted Oracle managed file +FRA/xxxxxxxx/ARCHIVELOG/2015_09_29/thread_1_seq_71.750.891675635
    Deleted Oracle managed file +FRA/xxxxxxxx/ARCHIVELOG/2015_09_29/thread_1_seq_72.751.891675635
    Deleted Oracle managed file +FRA/xxxxxxxx/ARCHIVELOG/2015_09_29/thread_1_seq_73.752.891675639
    Deleted Oracle managed file +FRA/xxxxxxxx/ARCHIVELOG/2015_09_29/thread_1_seq_74.754.891680149
    ...
    

    A few more gentle reductions, to avoid completely hanging things up, and we were eventually right down at 2gb FRA quota. Finally, I reset the quota back to the original 40gb and checked again:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    SQL> alter system set db_recovery_file_dest_size = 40g scope=memory;
    System altered.
    
    SQL> select * from v$recovery_file_dest;
    
    NAME            SPACE_LIMIT       SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES          CON_ID
    ---------- ---------------- ---------------- ----------------- --------------- ---------------
    +FRA         42,949,672,960    2,112,880,640     2,092,957,696              61               0
    
    SQL> select * from v$flash_recovery_area_usage;
    
    FILE_TYPE               PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES          CON_ID
    ----------------------- ------------------ ------------------------- --------------- ---------------
    CONTROL FILE                          0.00                      0.00               0               0
    REDO LOG                              0.00                      0.00               0               0
    ARCHIVED LOG                          4.92                      4.87              61               0
    BACKUP PIECE                          0.00                      0.00               0               0
    IMAGE COPY                            0.00                      0.00               0               0
    FLASHBACK LOG                         0.00                      0.00               0               0
    FOREIGN ARCHIVED LOG                  0.00                      0.00               0               0
    AUXILIARY DATAFILE COPY               0.00                      0.00               0               0
    

    Job done. With a little encouragement!

    Share on

    Norman Dunbar
    WRITTEN BY
    Norman Dunbar
    Oracle DBA & developer. (Retired). Now a published book author!