1、描述了整个数据库的物理结构信息,每个数据库至少有一个控制文件:
2、控制文件的性质
控制文件是一个很小的二进制文件。
控制文件描述了整个数据库的结构。
在加载数据库时,实例必须首先通过初始化参数文件找到数据库的控制文件。
在数据库运行期间,控制文件始终在不断更新,以便记录数据文件和重做日志文件的变化
每个数据库至少拥有一个控制文件。一个数据库也可以同时拥有多个控制文件。
分配在不同的物理硬盘中,以免数据库或硬盘损坏时,能够利用备份的控制文件启动数据库实例,可以提高数据库的可靠性。
3、控制文件的内容
数据库名称和标识;
数据库创建的时间;
表空间名称;
数据文件和重做日志文件的名称和位置;
当前重做日志文件序列号;
数据库检查点的信息;
回退段的开始和结束;
重做日志的归档信息;
备份信息;
数据库恢复所需要的同步信息。
4、控制文件中的最大化参数包括:
MAXLOGFILES:最大重做日志文件组数量;
MAXLOGMEMBERS:重做日志文件组中最大成员数量;
MAXLOGHISTORY:最大历史重做日志文件数量;
MAXDATAFILES:最大数据文件数量;
MAXINSTANCES:可同时访问的数据库最大实例个数。
5、 控制文件管理策略
Oracle建议最少有两个控制文件,通过多路镜像技术,将多个控制文件分散到不同的磁盘中。在数据库运行过程中,始终读取CONTROL_FILES参数指定的第一个控制文件,并同时写CONTROL_FILES参数指定的所有控制文件。如果其中一个控制文件不可用,则必须关闭数据库并进行恢复。
每次对数据库结构进行修改后(添加、修改、删除数据文件、重做日志文件),应该及时备份控制文件。
6、控制文件的管理
(1)创建控制文件
1)创建控制文件的情形:控制文件全部丢失或损坏; 需要修改数据库名称; 在Oracle 10.2.0之前的版本中,需要修改某个最大化参数。
2)创建控制文件的语句:
CREATE CONTROLFILE [REUSE]
[SET] DATABASE database
[LOGFILE logfile_clause]
RESETLOGS|NORESETLOGS
[DATAFILE file_specification]
[MAXLOGFILES]
[MAXLOGMEMBERS]
[MAXLOGHISTORY]
[MAXDATAFILES]
[MAXINSTANCES]
[ARCHIVELOG|NOARCHIVELOG]
[FORCE LOGGING]
[CHARACTER SET character_set]
1) 创建控制文件的基本步骤
a) 制作数据库中所有的数据文件和重做日志文件列表
SQL>SELECT MEMBER FROM V$LOGFILE;//找到所有的日志文件
SQL>SELECT NAME FROM V$DATAFILE;//找到所有的数据文件
SQL>SELECT VALUE FROM V$PARAMETER WHERE NAME = 'CONTROL_FILES';
//找到所有的控制文件
b) 如果数据库仍然处于运行状态,则关闭数据库:
SQL>SHUTDOWN
c) 在操作系统级别备份所有的数据文件和联机重做日志文件
d) 启动实例到NOMOUNT状态:
SQL>STARTUPNOMOUNT
e) 利用前面得到的文件列表,执行CREATECONTROLFILE创建一个新控制文件。
f) 在操作系统级别对新建的控制文件进行备份
g) 如果数据库重命名,则编辑DB_NAME参数来指定新的数据库名称
h) 如果数据库需要恢复,则进行恢复数据库操作:
如果创建控制文件时指定了NORESETLOGS,可以完全恢复数据库:
SQL>RECOVER DATABASE ;
如果创建控制文件时指定了RESETLOGS,则必须在恢复时指定USING BACKUP CONTROLFILE。
SQL>RECOVER DATABASE USING BACKUP CONTROLFILE;
i) 打开数据库
如果数据库不需要恢复或已经对数据库进行了完全恢复,则可以正常打开数据库:
SQL>ALTER DATABASE OPEN;
如果在创建控制文件时使用了RESETLOGS参数,则必须指定以RESETLOGS方式打开数据库。
SQL>ALTER DATABASE OPEN RESETLOGS;
(2)实现多路镜像控制文件
为保证数据文件的可用性,可创建多个镜像控制文件。可以创建数据库时直接通过编辑初始化参数创建多路镜像控制文件。
若是在创建数据库后再创建多路镜像控制文件步骤如下:
a) 编辑初始化参数CONTROL_FILES
ALTER SYSTEM SET CONTROL_FILES=…,…SCOPE=SPFILE;
b) 关闭数据库
SHUTDOWN IMMEDIATE;
c) 拷贝一个原有的控制文件到新的位置,并重新命名
d) 重新启动数据库
STARTUP
举例:
a) 编辑初始化参数CONTROL_FILES。
SQL>ALTER SYSTEM SET CONTROL_FILES=
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL',
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\CONTROL04.CTL'
SCOPE=SPFILE;
注意:前3个控制文件是原有的控制文件,最后一个控制文件是将要添加的。
b) 关闭数据库
SQL>SHUTDOWN IMMEDIATE;
c) 拷贝一个原有的控制文件到新的位置,并重新命名。
拷贝D:\ORACLE\ORADATA\CONTROL01.CTL到D:\ORACLE\ORADATA目录下,并重命名为CONTROL04.CTL。
d) 重新启动数据库
SQL>STARTUP
(3)备份控制文件
为了避免由于控制文件的损坏或丢失而导致数据库系统崩溃,要经常对控制文件进行备份。特别是对数据库物理存储结构修改之后。
1)将控制文件备份为二进制文件
ALTER DATABASE BACKUP CONTROLFILE TO …
如:将控制文件备份为二进制文件。
SQL>ALTERDATABASE BACKUP CONTROLFILE TO 'D:\ORACLE\CONTROL.BKP';
2)将控制文件备份为文本文件
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
此时将控制文件备份到<ORACLE_BASE>\admin\<SID>\bdump目录下的跟踪文件中
如:将控制文件备份为文本文件。
SQL>ALTERDATABASE BACKUP CONTROLFILE TO TRACE;
(4)删除控制文件
某个控制文件位置不合适或损坏时可删除。步骤如下:
a) 编辑CONTROL_FILES初始化参数,使其不包含要删除的控制文件;
ALTER SYSTEMSET CONTROL_FILES=…,…SCOPE=SPFILE;
b) 关闭数据库;
c) 在操作系统中删除控制文件;
d) 重新启动数据库。
(5)查询控制文件的信息
控制文件信息可通过查询与控制文件相关的数据字典视图:
V$DATABASE:从控制文件中获取的数据库信息;
V$CONTROLFILE:包含所有控制文件名称与状态信息;
V$CONTROLFILE_RECORD_SECTION:包含控制文件中各记录文档段信息;
V$PARAMETER:可以获取初始化参数CONTROL_FILES的值。