控制文件包含了以下信息:
数据库名称
数据库创建的时间戳
相关的数据文件、重演日志文件的名称和位置
表空间信息
数据文件脱机范围
日志历史
归档日志信息
备份组和备份块信息
备份数据文件和重演日志信息
数据文件拷贝信息
当前日志序列数
检查点(checkpoint)信息
数据库名称和时间戳源自数据库创建之时,数据库名称或是来自DB_NAME初始化从参数,或者来自Cteate Database语句使用的名称。
每当数据文件或重演日志文件被添加内容、重新命名或者直接从数据库删除时,控制文件都要进行更新以反应物理结构的变化。记录下这些变化后,Oracle就可以:
在数据库启动的时候,能够确定并打开数据文件和重演日子文件。
在必须要恢复数据库的时候,能够确定哪些文件是必须的、哪些文件是可用的。
PS:如果数据库的物理结构发生了改变(使用了Alert Database语句),用户应该立刻备份控制文件。
控制文件还记录了关于检查点的信息。每3秒,检查点进程(CKPT)就会在控制文件里记录重演日志文件的检查点位置信息。这些信息用于数据库的恢复过程,告诉数据库在这一点之前的已经记录下的重演条目不必进行恢复,因为它们已经被写入数据文件了。
由于控制文件对数据库的至关重要,所以联机存储着多个副本。这些文件一般存储在各个不同的磁盘上,以便将因磁盘试下哦引起的潜在危险降至最低程度。Oracle支持对同一个数据库并发的打开、书写多个相同的控制文件。通过为一个数据库在不同的磁盘上保存多个控制文件,可以幼小的降低对于控制文件可能发生的单点失败。
例如,包含一个控制文件的磁盘崩溃了,如果Oracle试图访问这个被破坏的文件,当前实例就会失败,但是如果在不同的磁盘上保存了当前控制文件的复件,就可以重启一个实例而无需进行数据库恢复。
如果一个数据库所有的控制文件在操作的时候都丢失了,那么数据库实例就会失败,必须要进行介质恢复(media recover)。
但是介质恢复必须要使用一个稍微旧一点的控制文件的备份,因为当前的控制文件备份不可用。
所以为了保护控制文件,必须要注意一下几个方面:
每一个数据库都要使用多路复制的控制文件;
把每一个控制文件的复件保存在不同的物理磁盘上;
使用操作系统的镜像机制;
监控备份;
在SQL*PLUS中查询控制文件
select name from V$control_file;。
全部