
After the header block, all controlfile blocks occur in pairs. Two physical blocks represent each logical block. This is essentially to maintain the mechanism of controlfile transactions. Whenever a controlfile transaction is committed, the controlfile sequence number is incremented. This number is recorded with the block version bitmap and database information entry in the first record section of the controlfile. It is used in the cache header of each controlfile block in place of an SCN to detect possible split blocks from hot backups. It is also used in queries that perform multiple controlfile reads to ensure that a consistent snapshot of the controlfile has been seen. The controlfile transaction mechanism is not used for updates to the checkpoint heartbeat. Instead the size of the checkpoint progress record is overstated as half of the available space in a controlfile block, so that one physical block is allocated to the checkpoint progress record section per thread. Then, instead of using pairs of physical blocks to represent each logical block, each checkpoint progress record is maintained in its own physical block so that checkpoint heartbeat writes can be performed and committed atomically without affecting any other data. The View V$CONTROLFILE_RECORD_SECTION contains all the structures a control file has in it. To know the addresses of these structures the X$KCCRS columns can be mapped. The SQL is to be executed as SYS user only other wise table or view does not exist error may popup. Overwriting the information already contained in the controlfile reuses the space in the controlfiles and thus a bit of control can be exercised by the User. The particular initialization parameter ‘control_file_record_keep_time’ sets the minimum number of days that must have elapsed before a reusable controlfile record slot can be reused. If all the slots in a record section are in use and that number of days has not yet elapsed since the timestamp on the earliest entry, then Oracle dynamically expands the record section (and thus the controlfile too) to make more slots available, up to a maximum of 65535 slots per section, or the controlfile size limit.

(The controlfile size limit is based on the number of blocks that can be represented in the block version bitmap, and is thus most unlikely to be reached.) Informational “kccrsz” messages about the dynamic expansion of the controlfile (or the failure to do so) may be seen in the alert log file for the instance. The control_file_record_keep_time parameter can also be set to zero to prevent keep time related controlfile expansion, if it suits the requirements of maintenance of database.


Controlfile backups are advocated along with the datafiles only because the resizing takes place under the protection of CF enqueue. If an instance failure or a system failure occurs during that event of resizing the controlfiles may get corrupted. Oracle has three important structures that take care of the database. The Oracle Internals maintain the structural details of these structures. These structures are (1) datafiles (2) controlfiles and (3) redolog files.
