数据库控制文件(control file)是一个二进制文件,供数据库启动及正常工作时使用。在数据库运行过程中,控制文件会频繁地被Oracle修改,因此数据库处于开启(open)状态时控制文件必须可写。如果控制文件因故不能访问,数据库 也将无法正常工作。每个控制文件(control file)只能供一个Oracle数据库使用。
控制文件的内容
控制文件(control file)中包含了其所属数据库的信息,实例(instance)在启动,及正常工作期间都需要存取这些信息。控制文件的内容只能由Oracle修改,数据库管理员员或用户都不应编辑控制文件。
控制文件(control file)中主要包含以下内容:
● 数据库名(database name)
● 数据库创建时的时间戳(timestamp)
● 属于此数据库的数据文件(datafile)及重做日志文件(redo log file)的
名称与存储位置
● 表空间(tablespace)信息
● 脱机(offline)的数据文件
● 日志历史信息
● 归档日志(archived log)信息
● 备份集(backup set)与备份块(backup piece)信息
● 数据文件与重做日志的备份信息
● 数据文件复制信息
● 当前的日志序列号(log sequence number)
● 检查点(checkpoint)信息
数据库名(database name)和数据库创建时间戳(timestamp)都来源于数据库创建过程。数据库名既可以来自 DB_NAME 初始化参数中的设定值,也可以来自 CREATE DATABASE 语句中的指定值。每当添加,重命名,或移除数据库中的数据文件(datafile)及重做日志文件(redo log file)时,控制文件(control file)就会被更新以反映这些数据库物理结构变化。进行这些记录的目的是:
● Oracle可以籍此在数据库启动(startup)时识别打开的数据文件和重做日志文件
● Oracle可以籍此在恢复数据库时识别当前可用及需要恢复的文件因此,用户每次更改数据库的物理结构后(使用 ALTER DATABASE 语
句),一定要及时备份控制文件(control file)。控制文件(control file)还被用于保存检查点(checkpoint)信息。每隔三秒钟,检查点进程(checkpoint process,CKPT)将会在控制文件中记录重做日志(redo log)检查点位置(checkpoint position)信息。当数据库恢复时,重做日志中此点之前的重做条目(redo entry)都无需恢复,因为这些数据已经被写入数据文件(datafile)中了。
多重控制文件
如同重做日志文件(redo log file)一样,Oracle也可以为一个数据库同时维护多个完全相同的控制文件(control file)。通过在不同磁盘上为一个数据库存储多重控制文件(multiple control file),可以有效地避免控制文件的单点脆弱性(single point of failure)。当一个包含控制文件的磁盘发生故障时,如果Oracle试图访问这个控制文件就会导致当前的实例(instance)出现故障。但如果其他磁盘中存在此控制文件的备份,实例可以被立即重新启动而无需进行数据库恢复。如果一个数据库的所有控制文件永久丢失了,那么实例将中止且需要进行介质恢复(media recovery)。如果没有当前控制文件(control file)的副本而必须使用较早的备份,那么介质恢复过程将会比较复杂。因此Oracle强烈建议用户遵循以下规则:
● 在每个数据库中使用多重控制文件(multiple control file)
● 将控制文件的副本存储在不同的物理磁盘上
● 使用操作系统的镜像功能(operating system mirroring)
● 监控备份工作