控制文件(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 语句中使用相对路径指定控制文件路径, 神通数据库将直接把此相对路径转化为绝对路径存储。
维护控制文件¶
如前所述,控制文件是十分重要的系统文件,需要谨慎地对其进行操作。
强烈建议保留多个备份,存储在不同的硬盘上以防止控制文件的损坏导致整个数据库被破坏。
- 备份控制文件
两步操作:
- 比如使用交互式SQL工具执行 SHUTDOWN 命令或者使用DBA管理界面关闭数据库实例。
- 拷贝控制文件(以 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: 日志文件是否自动收缩