Bootstrap

Oracle 深入学习 Part 6: Maintaining the Control File(控制文件的维护)

控制文件 control file是一种小型二进制文件,通常大小为几十MB。它定义了物理数据库的当前状态,记录数据库的结构和元数据信息。负责维护数据库的完整性,在数据库的启动、运行和恢复过程中起关键作用。

控制文件的特点

1. 一个控制文件对应一个数据库
  • 每个控制文件与其所属的数据库密切相关,用于记录该数据库的结构、状态等关键信息。

  • 数据库启动时,必须通过控制文件来确认其物理组成和状态。

2. 一个数据库可以有多个控制文件(多路复用)
  • 可以在参数文件中指定多个控制文件,数据库在写的时候会同时写这些控制文件 ,它们在内容上是一样的 所以在读的时候只会读第一个文件。

  • 如果有任何一个控制文件损坏 instance就会停止工作

控制文件的日常应用

控制文件在数据库日常运行中扮演着关键角色,以下是其主要应用场景:

  1. 数据文件和联机重做日志文件的位置

    • 控制文件记录所有数据文件和联机重做日志文件的物理路径和状态。

    • Oracle 通过这些信息来定位文件并确保其可用性,保证数据库的正常操作。

  2. 表空间

    • 控制文件存储所有表空间的元数据,包括表空间的名称、状态和对应的数据文件信息。

    • 这使得数据库能够管理表空间结构和分配存储资源。

  3. 检查点信息

    • 控制文件记录数据库的最新检查点信息。

    • 检查点用于确保数据库在发生崩溃时能够从一致的状态进行恢复。

  4. 归档日志(Archive)信息

    • 在归档模式下,控制文件记录归档日志的生成及其存储位置。

    • 这些信息对归档日志的管理和基于日志的恢复至关重要。

  5. 备份和恢复信息

    • 控制文件跟踪 RMAN 的备份历史、恢复信息及相关元数据。

    • 这些记录确保数据库能够快速恢复到最近的一致状态。

  6. 其他应用

    • 包括记录数据库的创建时间、名称、唯一标识符、当前日志序列号等信息。

    • 这些数据对于数据库的整体管理和维护不可或缺。

控制文件大小的主要决定因素

控制文件的大小主要由以下几个参数决定,这些参数在使用 CREATE DATABASE 语句创建数据库时设置:

  1. MAXDATAFILES

    • 定义数据库中可以包含的最大数据文件数。

    • 值越大,控制文件需要存储的文件信息越多,大小也随之增加。

  2. MAXLOGFILES

    • 定义数据库中可以创建的最大联机重做日志组数。

    • 每增加一个日志组,控制文件记录的信息也会相应增加。

  3. MAXLOGMEMBERS

    • 定义每个联机重做日志组中可以包含的最大日志成员数。

    • 日志成员的增加直接影响控制文件的大小。

  4. MAXLOGHISTORY

    • 定义控制文件中记录的最大归档日志历史数。

    • 较大的历史记录要求控制文件存储更多的元数据。

  5. MAXINSTANCES

    • 定义可以访问同一数据库的最大实例数(适用于 RAC 环境)。

    • 实例数的增加会增加相关元数据的存储需求。

数据库启动过程中控制文件的作用

启动实例 (NOMOUNT)

  • 从$ORACLE_HOME/dbs中按以下顺序读取初始化文件:

    • 首先spfileSID.ora

    • 如果未找到,则spfile.ora

    • 如果未找到,则initSID.ora

  • 使用STARTUP指定PFILE参数会覆盖默认行为。

  • 分配SGA

  • 启动后台进程

  • 打开alertSID.log文件和跟踪文件

数据库必须使用DB_NAME参数在初始化参数文件或STARTUP命令中命名。

挂载数据库(MOUNT)

挂载数据库包括以下任务:

  • 将数据库与之前启动的实例相关联

  • 定位并打开指定的控制文件

  • 读取控制文件以获取数据文件和联机重做日志文件的名称和状态。然而,此时不会执行任何检查以验证这些数据文件和联机重做日志文件的存在。

打开数据库 (OPEN)

打开数据库包括以下任务:

  • 打开在线数据文件

  • 打开在线重做日志文件

如果在尝试打开数据库时缺少任何数据文件或在线重做日志文件,Oracle服务器会返回错误。

在此最终阶段,Oracle服务器验证所有数据文件和在线重做日志文件都可以打开,并检查数据库的一致性。如有必要,SMON后台进程将启动实例恢复。

手动增加控制文件

1. 使用 SPFILE
  1. 修改 SPFILE 使用 ALTER SYSTEM 命令修改 control_files 参数,将新的控制文件路径添加到列表中。

    ALTER SYSTEM SET control_files = 
    '/HOME/ORADATA/u01/ctrl01.ctl',
    '/HOME/ORADATA/u02/ctrl02.ctl' SCOPE=SPFILE;
  2. 关闭数据库 关闭数据库以进行控制文件修改。

    shutdown immediate;
  3. 创建额外的控制文件 使用 cp 命令复制现有控制文件,创建新的控制文件。

    cp /HOME/ORADATA/u01/ctrl01.ctl /HOME/ORADATA/u02/ctrl02.ctl
  4. 启动数据库 完成控制文件复制后,重新启动数据库。

    startup;
2. 使用 OMF(Oracle Managed Files)
  • 自动管理控制文件 如果未在 CONTROL_FILES 参数中指定控制文件路径,Oracle 将自动创建控制文件,并根据 DB_CREATE_ONLINE_LOG_DEST_n 参数定义的路径生成控制文件。控制文件的名称由系统自动生成,并且唯一。

  • 生成的控制文件名称 新创建的控制文件的名称会在数据库的 alertSID.log 日志文件中显示,便于确认。

获取控制文件信息

通过查询以下视图可以获取有关控制文件状态和位置的信息:

  • V$CONTROLFILE: 列出与实例关联的所有控制文件的名称和状态

  • V$PARAMETER: 列出所有参数的状态和位置

  • V$CONTROLFILE_RECORD_SECTION: 提供关于控制文件记录部分的信息

  • SHOW PARAMETER CONTROL_FILES: 列出控制文件的名称、状态和位置

;