控制文件(CtrlFile)

相关概念

每个神通数据库都有一个控制文件,控制文件是一个小型的二进制文件,它记录着数据库的物理结构。控制文件包含以下内容:

  • 数据库名称

数据文件和联机重做日志文件的信息和物理位置

  • 数据库创建的时间

当前日志的序号LSN

  • 检查点信息

无论何时打开数据库,控制文件必须能由神通数据库服务器进行存取。没有控制文件,数据库将无法被装载,数据库恢复也将非常困难。神通数据库的控制文件是在数据库创建时一同创建出来的。

控制文件的重要性使得对控制文件的存放和管理变得尤为重要。强烈建议管理员为同一个数据库备份多个控制文件,并将这些控制文件保存到不同的硬盘上。当数据库实例进行了如下方面的修改时,管理员应当重新备份该数据库的控制文件:

添加、删除或者重命名数据文件

添加、删除日志组、日志成员

神通数据库的控制文件可以自适应的管理任意个数的数据文件、日志组以及日志组成员,不需管理员显式的指定这些文件的最大数量。

控制文件的创建和维护

创建控制文件

神通数据库的控制文件与数据库实例同时被创建,允许为一个数据库实例创建多个控制文件。创建数据库实例时,可以使用CONTROLFILE子句指定控制文件路径。

控制文件的默认名称为:数据库名01.ctrl和数据库名02.ctrl

  • 示例1: 缺省控制文件名
CREATE DATABASE testdb1;

将在神通数据库根目录的 admin 文件夹下创建 testdb101.ctrl 的控制文件和根目录的 odbs/数据库名 文件夹下创建 testdb102.ctrl 的控制文件。

  • 示例2: 指定控制文件名(以 Linux 下全路径名为例)
CREATE DATABASE testdb2 CONTROLFILE '/OSCAR/admin/test.ctrl';

将在/OSCAR/admin/目录下创建一个名为test.ctrl的控制文件。

注解

  • 指定的路径名必须符合所在操作系统的路径名命名规则。 比如在Linux下应该使用诸如 "/OSCAR/admin/osrdb.ctrl" 的路径名, 而在Windows下应该使用类似 "d:\OSCAR\admin\osrdb.ctrl" 的路径名。
  • 数据库实例的控制文件的路径存储的是绝对路径。 如果在 CREATE DATABASE 语句中使用相对路径指定控制文件路径, 神通数据库将直接把此相对路径转化为绝对路径存储。

维护控制文件

如前所述,控制文件是十分重要的系统文件,需要谨慎地对其进行操作。

强烈建议保留多个备份,存储在不同的硬盘上以防止控制文件的损坏导致整个数据库被破坏。

  • 备份控制文件

两步操作:

  1. 比如使用交互式SQL工具执行 SHUTDOWN 命令或者使用DBA管理界面关闭数据库实例。
  2. 拷贝控制文件(以 Linux 下使用系统命令为例)
cp /OSCAR/admin/osrdb.ctrl /backup/ctrlfile/osrdb.ctrl

注解

备份控制文件前,需要确保该控制文件所属的数据库实例已被关闭。

  • 恢复控制文件

在控制文件被损坏要求进行恢复时,只需简单的将控制文件拷贝到原来的位置,并启动数据库执行恢复。

查看控制文件信息

神通数据库提供以下系统视图来显示控制文件的信息:

表7-1 控制文件视图

视图 说明
V_SYS_DATABASE_INFO 数据库信息
V_SYS_DATAFILE_INFO 数据文件信息
V_SYS_LOGFILE_INFO 在线日志文件信息
V_SYS_LOGSEGMENT_INFO 在线日志文件段信息
V_SYS_ARCHIVELOG_INFO 归档日志信息

其中,在线日志文件信息将在章节——在线日志文件管理中详细说明, 归档日志信息将在章节——归档日志文件管理中详细说明, 数据文件信息将在章节——数据文件管理中详细说明。

下面以查询数据库信息为例:

--  查询数据库信息(其中包含控制文件的信息)
SELECT * FROM V_SYS_DATABASE_INFO;

 DBNAME |    CREATIONTIME     | RESTARTLSN | ARCHIVEMODE  | ARCHIVEPATH | ARCHIVELSN | LOGTOTALSIZE | LOGUSAGERATIO | LOGAUTOSHRINK
--------+---------------------+------------+--------------+-------------+------------+--------------+---------------+---------------
 OSRDB  | 2015-04-03 15:52:35 |   11596680 | NOARCHIVELOG |             |          0 |    104857600 |             0 | on
(1 row)

其中各属性列含义如下:

DBNAME: 数据库名

CREATEION TIME: 数据库创建时间

RESTARTLSN: 数据库恢复起始日志序列号

ARCHIVEMODE: 当前归档模式

ARCHIVEPATH: 当前归档路径

ARCHIVELSN: 数据库归档起始日志序列号

LOGTOTALSIZE: 日志空间总大小

LOGUSAGERATIO: 日志空间使用率

LOGAUTOSHRINK: 日志文件是否自动收缩