再次认识control file
控制文件由一系列的段(section)组成组成,每一个段中记录一组关于数据库不同方面的信息。比如有跟踪数据文件的段,段中包含的记录用于跟踪数据文件。控制文件中包含了两类不同的记录:
1、循环可重用记录。
这些记录中包含的信息对于数据库来讲并不是关键的。因此如果需要可以被覆盖。当一个段中记录的信息已经满了的时候,要么扩大控制文件的大小以便写入新的记录,要么覆盖掉循环可重用的老记录。这些循环可重用的记录包括归档日志文件信息和rman 控制文件信息。如果你没有配置recovery catalog 那么控制文件对于备份和恢复来说至关重要,因为其中记录了rman 备份和恢复用的元数据。control_file_record_keep_time 初始化参数用来控制,控制文件中可重用记录保存的天数,默认值是7.该值为影响你的基于时间的备份保留策略和基于冗余数量的备份。可以根据自己的需要把该值设置的大一些。
SQL> show parameter control_file_record_keep_time
NAME TYPE VALUE
------------------------------------ ----------- ----------------------
control_file_record_keep_time integer 7
该参数不是万能的,如果一条新的纪录需要添加到可重用段中,如果段中的纪录还没有老化,将会扩展可重用段。如果可重用段中纪录的可重用纪录已经超过了UB4MAXVAL,的限制控制文件将会”无情“的覆盖掉那些没有老化的可重用纪录。
二、非循环可重用记录。
这些不可重用的记录,对于oracle 来说是至关重要的,所以不能重用。这部分信息包括表空间,数据文件,在线重做日志文件的记录等,控制文件不会重用这些记录除非这些记录所描述的对象已经被删除了。
如果需要查询没有控制文件段的信息可以使用这个视图:
V$CONTROLFILE_RECORD_SECTION 重要的列是records_total,records_used.
控制文件的大小是由什么决定的?
我认为这个问题是比较复杂的。我认为控制文件并不能无限的扩大,因为”领导层“太庞大了会导致oracle 花费很多开销来读取维护控制文件。这一点oracle肯定是知道的。控制文件的大小由创建数据库时候的:maxlogfiles,maxlogmembers,maxloghisory,
maxinstances,control_file_record_keep_time 和那个UB4MAXVAL 上限值。确定控制文件的副本数量及其位置:
SQL> show parameter control_files;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string /opt/oracle11g/oradata/oracl/c
ontrol.ctl, /opt/oracle11g/ora
data/oracl/control02.ctl, /hom
e/oracle/backup/control03.ctl
oracle 建议在不同的磁盘上面维护多份的控制文件,以保护”领导“的安全,提高可用性。确定控制文件的大小的确定:
SQL> select distinct block_size,file_size_blks
2 from V$controlfile;
BLOCK_SIZE FILE_SIZE_BLKS
---------- --------------
16384 596
block_size 指控制文件的block 大小。file_size_blks 是按照控制文件的block 数量来计算。