in Oracle


Most people read the documentation on CONTROL_FILE_RECORD_KEEP_TIME and believe that this parameter *guarantees* that Oracle will retain backup records for that long. (Some do understand that backup records may be retained longer, depending on the availability of slots (or “records”) for the various types of metadata in the controlfile).

However, …. as you should know from real-world experience … there is always a “BUT”.

Please read Oracle Support Note “How to ensure that backup metadata is retained in the controlfile when setting a retention policy and an RMAN catalog is NOT used. (Doc ID 461125.1)” and Bug 6458068

Oracle may need to “grow” the controlfile when adding information about ArchiveLogs or BackupSets / BackupPieces.
An example is this set of entries that occurred when I had created very many archivelogs and backuppieces for them :

Trying to expand controlfile section 13 for Oracle Managed Files
Expanded controlfile section 13 from 200 to 400 records
Requested to grow by 200 records; added 9 blocks of records

To understand the contents of the controlfile see how this listing shows that I have space for 400 records of Backup Pieces and am currently using 232 records. :

SQL> select * from v$controlfile_record_section where type like '%BACKUP%' order by 1;

---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
BACKUP CORRUPTION 44 371 0 0 0 0
BACKUP DATAFILE 200 245 159 1 159 159
BACKUP PIECE 736 400 232 230 61 261
BACKUP REDOLOG 76 215 173 1 173 173
BACKUP SET 40 409 249 1 249 249
BACKUP SPFILE 124 131 36 1 36 36

6 rows selected.


However, if I start creating new Backup Pieces without deleting older ones (without Oracle auto-deleting older ones) and Oracle hits the allocation of 400 records, it may try to add new records. Oracle then prints a message (as shown above) into the alert.log. Oracle may overwrite records older than control_file_record_keep_time. If necesssary, it tries to expand the controlfile. If, however, there is not enough filesystem space (or space in the raw device or ASM DiskGroup) to expand the controlfile, it may have to ovewrite some records from the controlfile. If it has to overwrite records that are older than control_file_record_keep_time, it provides no warning. However, if it has to overwrite records that are not older than the control_file_record_keep_time, it *does* write a warning to the alert.log

I don’t want to violate the Oracle Support policy and quote from the Note and the Bug but I urge you to read both very carefully. The Note has a particular line about whether there is a relationship between the setting of the control_file_record_time and the Retention Policy. In the Bug, there is one particularly line about whether the algorithm to extend / reuse / purge records in the controlfile is or is not related to the Retention Policy. So it IS important to ensure that you have enough space for the controlfile to grow in case it needs to expand space for these records.

Also, remember that not all Retention Policies are defined in terms of days. Some may be defined in terms of REDUNDANCY (the *number* of Full / L0 backups that are not to be obsoleted). This does NOT relate to the number of days because Oracle can’t predict how many backups you run in a day / in a week / in a month. Take an organisation with a small database and runs 3 Full / L0 backups per day versus another with a very large database that runs Full / L0 backup only once a fortnight ! How many days of Full / L0 backups would each have to retain if the REDUNDANCY is set to, say, 3 ?