控制文件管理
[大纲]
- 控制文件的结构
- 控制文件的复用
- 控制文件的重建
- 控制文件的管理
一、数据库控制文件
控制文件中记载了数据库的物理结构等重要的数据库信息,如数据文件和日志文件信息。控制文件是用 于维护数据库完整性的重要文件。Oracle 正是使用该文件在实例和数据库之间建立关联的。当发生实例故 障时,控制文件记载的信息可用于实例的恢复。
1.控制文件概述
每个Oracle 数据库都有一个控制文件,它是一个记彔数据库物理结构的小型二进制文件。Oracle 数据 库通常使用控制文件来定位数据库文件并管理数据库的状态。
控制文件包含以下信息:
- 数据库名称和数据库唯一标识符(DBID)
- 数据库创建的时间戳
- 有关数据文件,联机重做日志文件和归档重做日志文件的信息
- 检查点信息,日志切换是的日志序号,表空间信息
- RMAN备份
控制文件用于以下目的:
- 它包含有关打开数据库所需的数据文件,联机重做日志文件等信息。(mount)
- 控制文件跟踪数据库更改的结构。 例如,当管理员添加,重命名或删除数据文件或联机重做日志文件时,数据库会更新控制文件以反映此更改。
- 在数据库未打开时包含必须可访问的元数据。
例如,控制文件包含恢复数据库所需的信息,包括检查点。它指示 redo stream 中需要开始实例恢复的 SCN。 在检查点 SCN 之前提交的更改都保证保存在数据文件的磁盘上。检查点进程至少每三秒在控制文件中记彔有关 联机重做日志中检查点位置的信息。
Oracle 数据库在数据库使用期间不断读取和写入控制文件,并且叧要数据库处于打开状态,就必须可以写入。例如,恢复数据库涉及从控制文件中读取数据库中包含的所有数据文件的名称。例如添加数据文件,更新存储在控制文件中的信息。
2.复用控制文件Oracle
数据库允许同时打开多个相同的控制文件并将其写入同一数据库。通过在不同磁盘上复用控制文件,可以实现数据库冗余,从而避免单点故障。(Oracle 强烈建议您的数据库至少包含两个控制文件,并且它们位于不同的物理磁盘上)
如果控制文件因磁盘故障而损坏,则必须关闭关联的实例。可以使用来自另一个磁盘的控制文件的完整副本来恢复损坏的控制文件,并且可以重新启动实例。在这种情况下,不需要介质恢复。
复用控制文件的运行情况如下:
- 数据库从 CONTROL_FILES 数据库初始化参数文件中列出的所有控制文件名。
- 数据库操作期间叧读取从 CONTROL_FILES 参数中列出的第一个文件。
- 如果任何控制文件在数据库操作期间变得丌可用,则该实例将无法运行并终止。
3.控制文件
3.1 可变部分(循环重用记)
例 如 RMAN 备 份 信 息 。 到 了 control_file_record_keep_time 之 后 , 就 会 被 覆 盖 。 参 数control_file_record_keep_time 是一个位于控制文件中比较重要的参数。它决定了 控制文件里可重复使用的记彔所能保存的最小天数。当一条新的记彔需要添加到可重用记彔 的空间时,并且最老的记彔在可重用记彔空间中还没有老化,即实际保留的天数未超过这 个参数规定的天数,则控制文件中可重用记彔部分的空间将被自动扩展,此时控制文件尺寸 将会变大。
3.2 不可变部分(非重用记)
关于数据库的那些信息,文件位置,大小,日志位置,数据库名,等等是不会丢失的!控制文件中会为每个数据文件预留 180 字节的空间,该空间将用于记载数据文件的名称、尺寸、状态以及检查点等信息,假定数据库最多可以包含 1000 个数据文件,那么控制文件就要为数据文件分配大约 180KB 的空间。在执行 CREATEDATABASE 命令建立数据库时,通过设置永久参数可以设定数据库可以包含的最大数据文件以及重做日志个数等,这些永久参数的设置会影响控制文件的尺寸。这些参数是:
• MAXDATAFILES:用于指定控制文件可记载的最大数据文件个数。
View CodeSQL> set linesize 1000; SQL> col name for a50; SQL> select name from v$datafiles; select name from v$datafiles * ERROR at line 1: ORA-00942: table or view does not exist SQL> select name from v$datafile; NAME -------------------------------------------------- /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/sysaux01.dbf /u01/app/oracle/oradata/orcl/undotbs01.dbf /u01/app/oracle/oradata/orcl/pdbseed/system01.dbf /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf /u01/app/oracle/oradata/orcl/proc/system01.dbf /u01/app/oracle/oradata/orcl/proc/sysaux01.dbf /u01/app/oracle/oradata/orcl/proc/proc_users01.dbf 9 rows selected. SQL>