参数 CONTROL_FILE_RECORD_KE…

本文详细解析了Oracle数据库中control_file_record_keep_time和MAXLOGHISTORY两个关键参数的作用及应用场景,帮助理解控制文件中记录的管理和日志历史的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数 CONTROL_FILE_RECORD_KEEP_TIME 和MAXLOGHISOTRY

参数 control_file_record_keep_time 是一个位于控制文件中比较重要的参数之一。 它决定了控制文件里可重复使用的记录所能保存的最小天数。
当一条新的记录需要添加到可重用记录的空间时 ,并且最老的记录在可重用记录空间中还没有老化,即实际保留的天数未超过这个参数规定的天数,则控制文件中可重用 记录部分的空间将被自动扩展,此时控制文件尺寸将会变大。

一、control_file_record_keep_time 定义信息       

      1 . 参数的描述信息

              Property                          Description
              -----------------------------------------------------------
              Parameter type                Integer
              Default value                7 (days)                -- 缺省 值
              Modifiable                      ALTER SYSTEM        -- 使用ALTER SYSTEM 修改
              Range of values                0 to 365 (days)  -- 其 值 的范 围从 0-365
              Basic                              No
              ----------------------------------------------------------     

      2 . 官方定义
     
                      CONTROL_FILE_RECORD_KEEP_TIME specifies the minimum number of days before a reusable record in the control file
              can be reused. In the event a new record needs to be added to a reusable section and the oldest record has not
              aged enough, the record section expands. If this parameter is set to 0 , then reusable sections never expand ,
              and records are reused as needed.

              Note:
           
                      This parameter applies only to records in the control file that are circularly reusable (such as archive log
                        records and various backup records ). It does not apply to records such as datafile , tablespace , and redo
                        thread records , which are never reused unless the corresponding object is dropped from the tablespace.
 
      3 . 可重用的模块

              ARCHIVED LOG                                            BACKUP CORRUPTION
              BACKUP DATAFILE                                      BACKUP PIECE
              BACKUP REDO LOG                                      BACKUP SET
              COPY CORRUPTION                                      DATAFILE COPY
              DELETED OBJECT                                        LOGHISTORY
              OFFLINE RANGE                                         

二、MAXLOGHISOTRY

这个参数,咋一看,貌似眼熟的不得了。没错,在创建控制文件的时候被使用。

从字面上的意思来分析即可知,该参数用于控制日志历史记录 。即归档日志的记录数应在控制文件设定MAXLOGHISOTRY参数的范围之内 ,或者说 v$log_history 视图里所有归档 日志文件总数必须小于等于 MAXLOGHISOTRY 的设定值 。

一旦归档日志超过这个最大数目,且参数control_file_record_keep_time 设定的值在备份的保留策略之外,即可以被重用或老化,则从头覆盖以前的归档志文件项 。也即是 v$log_history 里的相应记录会被清除。

事实上,当在初始化控制文件的时候,设定MAXLOGHISOTRY的值来决定为保存归档日志记录信息分配多大的空间。该值设定之后,其分配的空间将不再动态扩展。我们知道RMAN备份恢复和日志归档时的信息都将存储在控制文件或恢复目录之中。既然已分配存储空间不能自动扩展,那新的归档信息该如何追加呢?即由参数control_file_record_keep_time中保留时间来确定是否将过时的信息给覆盖。

注:v$log_history在Oracle8i后由v$archived_log代替。并且maxloghistory不限制能够插入到v$archived_log中的记录数。

              SQL > select * from v$version;

              BANNER
              ----------------------------------------------------------------
              Oracle Database 10g Enterprise Edition Release 10.2 .0.4.0 - 64 bit
              PL / SQL Release 10.2 .0.4.0 - Production
              CORE        10.2 .0.4.0          Production
              TNS for Solaris: Version 10.2 .0.4.0 - Production
              NLSRTL Version 10.2 .0.4.0 - Production     

              --查看几个最大的MAX设置的值

              SQL > select TYPE,RECORDS_TOTAL from v$controlfile_record_section   
                    where type in ( 'REDO LOG' , 'DATAFILE' , 'CKPT PROG%' , 'REDO THREAD' , 'ARCHIVED LOG' );
     
              TYPE                                                  RECORDS_TOTAL
              ---------------------------- -------------
              REDO THREAD                                                                    --> MAXINSTANCES
              REDO LOG                                                                32          --> MAXLOGFILES  
              DATAFILE                                                              968          --> MAXDATAFILES
              ARCHIVED LOG                                                  83536          --> MAXLOGHISTORY

              -- 查看 ARCHIVED LOG 的明细 信息

              SQL > select * from v$controlfile_record_section where type like '%ARCHIVED LOG%' ;
             
              TYPE                                                  RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
              ---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
              ARCHIVED LOG                                                  584                  83536                83536              52748            52747          679267
             
              从上面的查询中可以看到为 MAXLOGHISTORY 分配的空间大小以及记录总数。
             
视图 v$archived_log 中记录的归档日志数

SQL > select count (*) from v$archived_log;

COUNT (*)
----------
83536

SQL > select min (FIRST_TIME), min (COMPLETION_TIME), max (FIRST_TIME), max (COMPLETION_TIME) from
  v$archived_log;

MIN (FIRST_TIME)        MIN (COMPLETION_TIME MAX (FIRST_TIME)        MAX (COMPLETION_TIME

------------------- ------------------- ------------------- -------------------

2011 - 04 - 24 12 : 59 : 01 2011 - 04 - 24 13 : 02 : 00 2011 - 06 - 05 23 : 00 : 49 2011 - 06 - 06 03 : 19 : 21

在使用RMAN备份且备份信息没有使用恢复目录的情况下,即使用控制文件来存储恢复信息。那么control_file_record_keep_time
中设定的值应当轻量级得大于应用所需备份保留的时间(基于时间的保留参数)。

假定使用控制文件保存备份恢复信息,每周进行一次全备,且备份保留恢复窗口为7天,则建议将control_file_record_keep_time
设置为10或14。

三、LogHistory超出MAXLOGHISTORY的情形

有些情况下,LogHistory超出MAXLOGHISTORY的情形,什么?LogHistory超出MAXLOGHISTORY?那不是会自动扩展吗?是的,正常
情况下应当扩展控制文件。LogHistory大于MAXLOGHISTORY而没有自动控制扩展的情形是存在的。产生该情况则是空间分配所引起的。

假定有下面的情形,创建控制文件时指定MAXLOGHISTORY的值为100,而LogHistory中则保留了227条记录。Why?
在创建控制文件时,会为每个部分分配相应的大小和空间。而每个部分的空间分配根据Oracle的块而不是依据当时设定的记录数。
在控制文件中,loghistory的单条记录大小通常是固定的,为36字节。因此,100个记录(MAXLOGHISTORY)需要3600个字节。控制文
件块的大小与数据块的大小一样,同样由db_block_size控制。因此特定数目的块将为LogHistory部分分配。例如,如果
DB_BLOCK_SIZE为8192,那么一个块就足够了。在这个块中,我们有8192/36,大约227个记录。如果DB_BLOCK_SIZE为2048,那么将分
配2个快,但是只创建113个记录。

转自:http://blog.youkuaiyun.com/robinson_0612/article/details/6530904
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值