控制文件和日志文件
1 数据库控制文件
控制文件中记载了数据库的物理结构等重要的数据库信息,如数据文件和日志文件信息。控制文件是用于维护数据库完整性的重要文件。Oracle正是使用该文件在实例和数据库之间建立关联的。当发生实例故障时, 控制文件记载的信息可用于实例的恢复。
1.1 控制文件概述
每个Oracle数据库都有一个控制文件,它是一个记录数据库物理结构的小型二进制文件。Oracle数据库通常使用控制文件来定位数据库文件并管理数据库的状态。
控制文件包含以下信息:
- 数据库名称和数据库唯一标识符(DBID)
- 数据库创建的时间戳
- 有关数据文件,联机重做日志文件和归档重做日志文件的信息
- 检查点信息,日志切换是的日志序号,表空间信息
- RMAN备份
控制文件用于以下目的:
- 它包含有关打开数据库所需的数据文件,联机重做日志文件等信息。(mount)
- 控制文件跟踪数据库更改的结构。
例如,当管理员添加,重命名或删除数据文件或联机重做日志文件时,数据库会更新控制文件以反映此更改。
- 在数据库未打开时包含必须可访问的元数据。
例如,控制文件包含恢复数据库所需的信息,包括检查点。它指示redo stream中需要开始实例恢复的SCN。在检查点SCN之前提交的更改都保证保存在数据文件的磁盘上。检查点进程至少每三秒在控制文件中记录有关联机重做日志中检查点位置的信息。
Oracle数据库在数据库使用期间不断读取和写入控制文件,并且只要数据库处于打开状态,就必须可以写入。例如,恢复数据库涉及从控制文件中读取数据库中包含的所有数据文件的名称。例如添加数据文件,更新存储在控制文件中的信息。
1.2 复用控制文件
Oracle数据库允许同时打开多个相同的控制文件并将其写入同一数据库。通过在不同磁盘上复用控制文件,可以实现数据库冗余,从而避免单点故障。
(Oracle强烈建议您的数据库至少包含两个控制文件,并且它们位于不同的物理磁盘上。)
如果控制文件因磁盘故障而损坏,则必须关闭关联的实例。可以使用来自另一个磁盘的控制文件的完整副本来恢复损坏的控制文件,并且可以重新启动实例。在这种情况下,不需要介质恢复。
复用控制文件的运行情况如下:
- 数据库从CONTROL_FILES数据库初始化参数文件中列出的所有控制文件名。
- 数据库操作期间只读取从CONTROL_FILES参数中列出的第一个文件。
- 如果任何控制文件在数据库操作期间变得不可用,则该实例将无法运行并中止。
1.3 控制文件结构
- 数据库名称或标识
- 数据库创建的时间信息
- 表空间的信息
- 数据文件和联机重做日志文件的名称、位置信息
- 联机重做日志文件的历史信息
- 发生归档时,归档日志文件的位置和状态
- 由 RMAN 记录的备份信息的位置和状态
- 发生日志切换时的日志序号(logsequencenumber)
- 发生检查点(checkpoint)时的检查点信息
可变部分(循环重用记录)
例如RMAN备份信息。到了control_file_record_keep_time之后,就会被覆盖。参数control_file_record_keep_time是一个位于控制文件中比较重要的参数。它决定了控制文件里可重复使用的记录所能保存的最小天数。当一条新的记录需要添加到可重用记录的空间时,并且最老的记录在可重用记录空间中还没有老化,即实际保留的天数未超过这个参数规定的天数,则控制文件中可重用记录部分的空间将被自动扩展,此时控制文件尺寸将会变大。
不可变部分(非重用记录)
关于数据库的那些信息,文件位置,大小,日志位置,数据库名,等等是不会丢失的!控制文件中会为每个数据文件预留180字节的空间,该空间将用于记载数据文件的名称、尺寸、状态以及检查点等信息,假定数据库最多可以包含1000个数据文件,那么控制文件就要为数据文件分配大约180KB的空间。在执行CREATE DATABASE命令建立数据库时,通过设置永久参数可以设定数据库可以包含的最大数据文件以及重做日志个数等,这些永久参数的设置会影响控制文件的尺寸。这些参数是:
- MAXDATAFILES:用于指定控制文件可记载的最大数据文件个数。
- MAXLOGFILES:用于指定数据库中重做日志组的最大个数。
- MAXLOGMEMBERS:用于指定每个日志组的最大日志成员个数。
- MAXLOGHISTORY:用于指定控制文件可记载日志历史的最大个数。
- MAXINSTANCES:用于指定可以同时访问数据库的最大实例个数。
控制文件相关视图
V$CONTROLFILE --实例中所有控制文件的名字及状态信息
V$CONTROLFILE_RECORD_SECTION --控制文件中记彔的部分信息
V$PARAMETER --所有参数的位置及状态信息
SYS@orcl>show parameter control;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7 -- 控制文件记录保留时间
control_files string /u01/app/oracle/oradata/orcl/c
ontrol01.ctl, /u01/app/oracle/
fast_recovery_area/orcl/contro
l02.ctl
control_management_pack_access string DIAGNOSTIC+TUNING
控制文件实验:
1 多路复用控制文件-增加控制文件 (实验前建议做一下环境快照)
实验步骤:
SYS@orcl>alter system set control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control_bak.ctl' scope=spfile; --增加一个新的控制文件
System altered.
SYS@orcl>shutdown immediate; -- 关机后再复制文件
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@orcl>!cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/</