---------控制文件介绍:
控制文件是记录 oracle 数据库结构信息的二进制文件,数据库启动过程中根据控制文件中的内容加载数据库的数据文件和重做日志文件。控制文件
在创建数据库时创建,在默认情况下至少创建一个控制文件。 oracle建议至少创建两个多路复用的控制文件,分布于不同的磁盘中,避免由于控制
文件的损坏导致数据库无法启动。只有所有的多路服用控制文件可用时,数据库才可以正常自动启动与运行。
控制文件主要存储与数据库结构相关的一些信息,包括数据库的名称、数据库创建的时间戳、数据文件和重做日志文件的名称和位置、当前重做
日志文件序列号、数据库检查点的信息、重做日志文件历史信息、归档日志文件的位置与状态等信息。
此外,在控制文件中还存储一些决定数据库规模的最大化参数,包括 MAXLOGFILES (最大重做日志文件组数量)、 MAXLOGMEMBERS
(最大重做日志文件组中最大成员数量)、MAXLOGHISTORY(最大历史重做日志文件数量)、MAXDATAFILES(最大数据文件数量)、
MAXINSTANCES(可同时访问的数据库最大实例个数)。
----------创建控制文件:
在创建数据库时,系统会根据初始化参数文件中的 CONTROL_FILES 的设置创建控制文件。在数据库创建完成后,如果控制文件全部丢失或损坏
或需要修改数据库名称时,需要手动创建新的控制文件。
新建一个控制文件的基本步骤为:
(1)、制作一个包含所有数据文件和重做日志文件的列表清单
如果数据库处于打开状态,可以通过执行下列语句获得数据文件和重做日志文件列表。
SQL>select member from V$LOGFILE;
SQL>select name from V$DATAFILE;
(2)、如果数据库处于运行状态,则关闭数据库
SQL>shutdown normal;
(3)、在操作系统级别备份所有的数据文件和重做日志文件
(4)、启动数据库到 NOMOUNT 状态
SQL>startup nomount;
(5)、执行 create controlfile 命令创建一个新的控制文件
create controlfile reuse(重新使用) database "HUMAN_RESOURCE" RESETLOGS noarchivelog (非归档模式)
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '..........RED001.LOG' size 50M,
GROUP 2 '.........RED002.LOG' size 50M,
GROUP 3 '..........RED003.LOG' size 50M
DATAFILE
'.....................................................SYSTEM01.DBF',
'......................................................SYSAUX01.DBF',
'.......................................................UNDOTBS01.DBF',
'.......................................................USERS01.DBF',
'.......................................................EXAMPLE01.DBF'
CHARACTER SET ZHS16GBK;
(6)、对新建的控制文件进行备份,并存放到一个脱机的存储设备上
SQL> alter database backup controlfile to '......\CONTROL.BKP';
(7)、如果数据库重命名,编辑初始化文件 DB_NAME ,指定新的数据库名称
(8)、如果数据库需要恢复,则进行数据库恢复操作; 否则直接进入步骤(9)
》》如果创建控制文件时使用了 NORESETLOGS 子句,则可以完全恢复数据库
SQL>recover database;
》》如果创建控制文件时使用了 RESETLOGS 子句,则必须在恢复时指定 using backup controlfile 子句
SQL>recover database using backup controlfile;
(9)、选择下列一种方法打开数据库
》》如果数据库不需要恢复或已经对数据库进行了完全恢复,则可以正常打开数据库
SQL>alter database open;
》》如果在创建控制文件时使用了 RESETLOGS 参数,则必须指定以 RESETLOGS 方式打开数据库
SQL>alter database open RESETLOGS ;
----------------添加多路复用控制文件:
为了保证数据库控制文件的可用性,oracle 数据库在创建时可以创建多个镜像的控制文件,其名称和存放位置由初始化参数文件中的 CONTROL_FILES
参数指定。
数据库创建后,可以为数据库添加多路复用控制文件或修改控制文件的名称与位置,步骤为:
(1)、关闭数据库
(2)、使用操作系统命令复制一个控制文件的副本到新的位置,并重新命名;或者改变控制文件的名称和位置
(3)、编辑初始化参数文件中的 CONTROL_FILES 参数,将新添加的控制文件的名称添加到控制文件列表中,或修改控制文件列表中原有控制文件
的名称与位置
(4)、重新启动数据库
《案例》
当前案例数据库的控制文件为 CONTROL01.CTL 和 CONTROL02.CTL ,再添加一个名为 CONTROL03.CTL 的控制文件
SQL> alter system set control_files =
'................ CONTROL01.CTL' ,
'..................CONTROL02.CTL ',
'...................CONTROL03.CTL '
scope = spfile;
SQL>shutdown immediate ;
SQL> host copy ..............\CONTROL01.CTL ................\CONTROL03.CTL
SQL>startup
---------------备份控制文件:
为了避免由于控制文件的损坏或丢失而导致数据库系统崩溃,需要经常对控制文件进行备份。特别是对数据库物理存储结构做出修改之后,如数据文件
的添加、删除或重命名,表空间的添加、删除,表空间的读/写状态的改变,以及添加或删除控制文件和重做日志文件组等都需要重新备份控制文件。
备份控制文件:alter database backup controlfile
可以以二进制文件的形式备份控制文件,也可以将控制文件信息以文本方式备份到跟踪文件中。
1. 将控制文件备份为二进制文件
SQL> alter database backup controlfile to '...........\CONTROL.BKP';
2.将控制文件备份为文本文件中
SQL>alter database backup controlfile to trace;
此时可以将控制文件内容以文本方式备份到跟踪文件中,可以利用记事本打开跟踪文件以查看控制文件信息,可以利用该文本信息重建控制文件。
可以通过查看告警文件得知系统将控制文件的文本信息备份到哪个跟踪文件中。
----------------删除控制文件:
如果控制文件的位置不合适,或者某个控制文件损坏,可以删除该控制文件。要保证数据库中至少有一个控制文件,在生产数据库中控制文件数量不应
少于两个。
删除控制文件的过程与创建多路复用控制文件的过程相似,具体步骤为:
(1)、编辑 CONTROL_FILES 初始化参数,使其不包含要删除的控制文件
(2)、关闭数据库
(3)、在操作系统中删除控制文件
(4)、重新启动数据库
《案例》
删除案例数据库中名为 CONTROL03.CTL 的控制文件
SQL> alter system set control_files =
'................ CONTROL01.CTL' ,
'..................CONTROL02.CTL ',
scope = spfile;
SQL>shutdown immediate ;
SQL> host del ................\CONTROL03.CTL
SQL>startup
---------------查询控制文件信息:
在oracle 11g数据库中可以查询数据字典视图 V$CONTROLFILE 等控制信息
《案例》查询当前数据库中所有控制文件的信息
SQL> select name from V$CONTROLFILE;