Oracle Controlfile 控制文件详解  

Oracle Controlfile控制文件

  • 包含物理数据库结构信息
  • 多路复用以免遗失
  • 在挂载mount阶段读取
  当您启动数据库实例和挂载数据库时,就会读取控制文件。而控制文件中的项目则指定了构成数据库的物理文件。 当您将其他文件加入到数据库时,会自动更新控制文件。 您必须在CONTROL_FILES初始化参数中指定控制文件的位置。 为了避免数据库因为遗失控制文件而失败,您必须【多路复用(multiplex)】控制文件。在初始化参数中指定多个文档,就可以让Oracle数据库保有控制文件的多个副本。 您可以存取数据库中控制文件的相关信息,只要在Enterprise Manager的【服务器(Server)】页面【存储(Storage)】区中按一下【控制文件(Controlfiles)】链接。在【控制文件(Controlfiles General)】页面中会显示数据库控制文件的名称与位置。另外,【高级(Advanced)】页面中会提供建立控制文件和数据库识别的相关信息。而【记录文档段(Record Section)】页面则显示控制文件中项目的相关信息。  

打开数据库与控制文件

  当数据库从关闭阶段转到完全打开阶段时,数据库会执行内部一致性检查。这些阶段包括:
  • NOMOUNT:实例要达到 NOMOUNT(又称 STARTED)状态,就必须读取初始化参数文件。实例进入 NOMOUNT 状态时,不会检查任何数据库文件。
  • MOUNT:实例进入 MOUNT 状态时,会检查初始化参数文件中列出的所有控制文件是否都存在且已同步。即使有一个控制文件缺失或损坏,实例也会向管理员返回错误(指明缺失了控制文件)并保持在 NOMOUNT 状态。
  • OPEN:实例从 MOUNT 状态转到 OPEN 状态时,它会:- 检查控制文件知道的所有重做日志组是否都至少有一个成员。任何缺失的成员都会记录在预警日志中。
 

丢失了控制文件

执行以下步骤可在丢失了控制文件后进行恢复(只要至少保留了一个控制文件):
  1. 如果实例尚未失败,可使用 SHUTDOWN ABORT 关闭实例。
  2. 将剩余的一个控制文件复制到缺失文件的位置。如果介质故障是由于丢失了磁盘驱动器或控制器而造成的,则将剩余的一个控制文件复制到其它某个位置,然后通过更新实例的参数文件来指向新位置。也可从初始化参数文件中删除对缺失的控制文件的引用。记住,Oracle 建议在任何时间至少要保留两个控制文件。
  3. 启动实例。
 

维护控制文件

1 现有控制文件的位置及其名称是什么 提示 查询动态性能视图 V$CONTROLFILE 或 V$PARAMETER或者执行 SHOW PARAMETER 命令以显示控制文件的名称和位置 2 试着在无任何控制文件的情况下启动数据库 可以通过更改参数文件中的控制文件名称或只是更改控制文件名来模拟此操作 发生了什么提示 该问题没有提示 3 使用 DISK2 目录对现有的控制文件进行多元备份 并将新的控制文件命名为control02.con 确保 Oracle 服务器可以写入新的控制文件 例如 在UNIX 上使用 chmod 660 命令 确认两个控制文件都在使用   提示 关闭数据库 将现有的控制文件复制到 DISK2 目录下名为 control02.con 的新文件中 在 UNIX 上使用命令 chmod 660 修改参数文件以包含新文件名 启动数据库 查询动态性能视图 V$CONTROLFILE 或 V$PARAMETER 或使用 SHOW PARAMETER 命令确认两个控制文件都在使用    

控制文件的使用

数据库的控制文件是成功启动和操作数据库所必需的小型二进制文件 每个控制文件只与一个 Oracle 数据库相关联。因为 Oracle 服务器在数据库使用的过程中会不断更新控制文件 所以控制文件必须在数据库打开时随时都可供写入 只有 Oracle 服务器能修改控制文件中的信息 DBA 或最终用户不能编辑控制文件。如果由于某些原因控制文件无法访问 则数据库将无法正确运行。 如果数据库控制文件的所有副本都丢失 则必须先恢复数据库 然后才能将其打开。 控制文件内容
  • 数据库名称取自初始化参数 DB_NAME 所指定的名称或 CREATE DATABASE 语句中所用的名称
  • 当创建数据库时会记录数据库标识
  • 当创建数据库时 还记录创建数据库的时间戳
  • 当在数据库中添加 重命名或删除数据文件或重做日志时 会更新相关数据文件和联机重做日志文件的名称和位置
  • 当添加或删除表空间时会更新表空间信息
  • 在日志切换过程中会记录日志历史信息
  • 归档日志的位置和状态会在归档时记录
  • 备份的位置和状态由恢复管理器实用程序记录
  • 在进行日志切换时记录当前日志序列号
  • 在建立检查点时记录检查点信息
控制文件由以下两种类型的部分组成
  • 可重用
  • 不可重用
可重用部分存储恢复管理器的信息 如备份数据文件名和备份重做日志文件 名 只有恢复管理器能够以循环方式重复使用该部分  

多路复用控制文件

与联机重做日志文件相同 Oracle 允许同时打开并写入多个相同的控制文件 可以使用初始化参数 CONTROL_FILES 指定多达八个完全限定的控制文件名 称 Oracle 服务器在例程启动时创建和维护本参数中所列的全部文件 可以通过以下方法多路复用控制文件
  • 创建数据库时创建多个控制文件
  • 创建数据库后添加控制文件
随数据库创建控制文件 创建多个控制文件 数据库创建控制文件 最简便的方法是 在创建数据库时 将控制文件的名称包括在 CONTROL_FILES 初始化参数中 CONTROL_FILES = (/DISK1/control01.con,/DISK2/control02.con) Oracle 服务器将创建该参数中列出的全部控制文件 在此参数中指定的文件名 应当包括完整的路径名 文件名规范与操作系统有关 如何添加控制文件 添加控制文件或更改控制文件的 如何添加控制文件 编号或位置
  1. 关闭数据库
  2. 使用操作系统命令复制当前的控制文件
  3. 将新的控制文件名添加到 CONTROL_FILES 参数中
  4. 启动数据库
控制文件的原则 • 您应该: – 对控制文件进行多元备份 – 在 CONTROL_FILES 中包括完整的路径名 – 更改数据库结构后备份控制文件 • 控制文件: – 大小由 CREATE DATABASE 关键字决定 – 具有可重用部分, Recovery Manager 的更新使之 可以扩展 多路复用的目的 若要防止控制文件的单点故障 我们强烈建议您多路复用控制文件 在不同的 物理磁盘上存储副本 如果某控制文件丢失 则使用该控制文件的副本重新启动例程 如果在不同磁盘上有当前控制文件的多个副本 则无须恢复数据库即可方便地 启动例程 CREATE DATABASE 关键字 在创建数据库过程中指定的关键字会影响控制文件的大小 当参数的值较大 时 这一点尤其明显 可能需要重新创建控制文件以更改一个或多个数据库限 制参数 该操作有可能增加或减小控制文件的大小 CREATE DATABASE 或 CREATE CONTROLFILE 命令中的下列关键字影响控 制文件的大小 • MAXLOGFILES • MAXLOGMEMBERS • MAXLOGHISTORY • MAXDATAFILES • MAXINSTANCES 必须创建新的控制文件 才可更改这些关键字所创建的空间大小 可重用部分可以扩展 当使用恢复管理器时 控制文件的可重用部分可以基于恢复管理器所要求的条 目数进行扩展 更改数据库结构后备份 由于控制文件记录数据库的物理结构 所以在更改数据库的物理结构后应当立 即备份控制文件 获取关于控制文件的信息 若要获得控制文件的位置和名称 请使用动态性能视图 V$CONTROLFILE SQL> SELECT name FROM v$controlfile; NAME ----------------------- /DISK1/control01.con /DISK2/control02.con 2 rows selected. 也可以使用 V$PARAMETER 视图 但是因为列长度的原因 控制文件名称可 能会被截断 若要获得控制文件不同部分的信息 查询 V$CONTROLFILE_RECORD_SECTION 动态性能视图 SQL> SELECT type, record_size, records_total, records_used 2 FROM v$controlfile_record_section 3 WHERE type='DATAFILE’; TYPE RECORD_SIZ RECORDS_TO RECORDS_US ------------- ---------- ---------- ---------- DATAFILE 180 30 4 1 row selected. RECORDS_TO 列指定分配给某特殊部分的记录数 例如 在我们的示例中您可以看到数据文件的最大数为 30 该数由 CREATE DATABASE 命令中的MAXDATAFILES 参数确定 其它几个动态性能视图中的信息从控制文件获取 • V$BACKUP • V$DATAFILE • V$TEMPFILE • V$TABLESPACE • V$ARCHIVE • V$LOG • V$LOGFILE • V$LOGHIST • V$ARCHIVED_LOG • V$DATEBASE • 其它 快速参考 上下文 参考 初始化参数 CONTROL_FILES 动态性能视图 V$CONTROLFILE V$CONTROLFILE_RECORD_SECTION V$PARAMETER 数据字典视图 无 命令 无 程序包过程和打包函数 无