2008年(105)
分类: Oracle
2008-06-17 18:13:24
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.
这段话的意思是说: control_file_record_keep_time表示控制文件里可重复使用的记录所能保存的最小天数。如果新增加一条记录到控制文件可以重复使用的部分,这时最老的记录尚没有超出最小保留天数,那么记录将控制文件的这一部分将扩展。如果将该参数设置为0,那么控制文件可以重复使用的部分将永远不会扩展。
注意,这个参数只应用于控制文件中可循环利用的部分,如归档日志文件,各种备份记录。不应用于诸如数据文件,表空间,重做线程等,这些内容只有当其从对应的表空间中删除后才能重用。
可重用的部分包括如下几种类型(可以通过查询视图$contofile_record_section得到):
ARCHIVED LOG
BACKUP CORRUPTION
BACKUP DATAFILE
BACKUP PIECE
BACKUP REDO LOG
BACKUP SET
COPY CORRUPTION
DATAFILE COPY
DELETED OBJECT
LOGHISTORY
OFFLINE RANGE
而MAXLOGHISTORY参数,其意义在于限制控制文件里和通过v$log_history视图的归档日志文件数目。归档日志最多维持在MAXLOGHISTORY所设置的数目。如果超过这个数目,将从头覆盖以前的归档日志文件项。
最终,当归档日志数目超过MAXLOGHISTORY所设定的值时,v$log_history中的所有项都将被覆盖。
当创建控制文件时,MAXLOGHISTORY的决定为归档日志信息分配多大的空间。MAXLOGHISTORY并不动态增加。当日志归档时,该归档文件的信息将被更新到控制文件。只有在如下情况下,才覆盖原来的项:
控制文件中该区域所有项都被使用并且有一项超出了control_file_record_keep_time设定的时间
当使用RMAN目录时,control_file_record_keep_time保存的时间不能比同步目录的时间间隔短。换句话说,如果每天备份一次,那么controlfile_record_keep_time不能少于1。
如果不使用RMAN目录,应该设置control_file_record_keep_time为你需要往后恢复的最大天数。
在Oracle 7中,将新归档日志记录记录到v$log_histroy中。当达到MAXLOGHISTORY的极限时,插入新记录,同时覆盖最老的记录。在8.0版本后,v$log_history视图被v$archived_log取代了,并且maxloghistory不限制能够插入到v$ archived_log中的记录数。
有人问:为什么我在创建控制文件时指定的MAXLOGHISTORY没有起作用?
例如,创建控制文件时,设定MAXLOGHISTORY参数为100,控制文件的
Log History区域将创建227个记录。这是一个可预料到的结果。
创建控制文件时,每个部分分配规定的大小和空间。每个部分的空间分配不是依据记录数,而是根据Oracle的块。控制文件中,每个部分的单条记录大小是固定的,都是36字节。因此,100个记录(MAXLOGHISTORY)需要3600个字节。依据Oracle的块大小————控制文件中设置的 db_lock_size,控制文件块大小也是DB_BLOCK_SIZE参数。特定数目的块将为Log History部分分配。例如,如果DB_BLOCK_SIZE为8192,那么一个块就足够了。在这个块中,我们有8192/36,大约227个记录。如果DB_BLOCK_SIZE 为2048,那么将分配2个快,但是只创建113个记录。
MAXLOGHISTORY的最大值可以设置为65535。不得超过这个数。