控制文件的概述
1.控制文件是oracle数据库非常重要的物理文件,描述了整个数据库的物理结构信息,包括数据库名称、数据文件与重做日志文件的名称与位置,日志序列号等信息。数据库实例根据初始化参数CONTROL_FILES定位控制文件,
然后加载数据文件和重做日志文件,最后打开数据库。
在数据库运行和维护阶段,数据文件与重做日志文件的结构变化信息都记录在控制文件中。
2.控制文件的内容:
数据库的名称:该名称读取子DB_name或create database 语句中所使用的数据库名称
数据库的标识:是在创建数据库时oracle自动生成的。
数据库创建时间戳:该时间戳在创建数据库时生成的。
数据文件盒重做日志文件的名称与位置:
当前重做日志文件序列号:该序列号是在做重做日志切换时生成的。
数据库检查点信息:该信息是在数据库检查点事件发生时生成的。
重做日志历史信息:记录历史的重做日志文件信息。
归档日志文件的位置与状态:记录重做日志文件归档位置及归档状态
数据库备份的位置与状态:记录数据库备份信息,由恢复管理器(RMAN)记录的。
表空间信息:增加或删除表空间时,oracle会记录相应的修改信息。
3.控制文件的大小
控制文件的大小主要由可重用部分和不可重用部分组成。
(1)可重用部分主要由参数CONTROL_FILE_RECORD_KEEP_TIME来控制,该参数的默认值为7天,即可重用的部分内容保留7天,7天后这部分的内容就可能被覆盖。
(2)不可重用部分是有create database 或者是create controlfile语时设置的数据库最大化参数决定的。
控制文件的中的最大化参数主要有:
MAXLOGFILES:最大的重做日志文件组数量
MAXLOGMEMBERS:重做日志文件组中最大成员数量。
MAXLOGHISTORY:最大历史重做日志文件数量。
MAXDATAFILES:控制文件中最大数据文件记录数量。
MAXINSTANCES:可同时访问的数据库最大实例个数。
4.控制文件的管理策略:Oracle建议一个数据至少有两个控制文件,通过多路复用的技术,将多个控制文件分散到不同的磁盘中。这样可以避免由于一个控制文件的损坏而导致数据库的崩溃。
创建控制文件
首先可以通过查询control_files参数了解当前数据库所有控制文件的名称与位置:
SQL> select value from v$parameter where name='control_files'; VALUE -------------------------------------------------------------------------------- E:APPADMINISTRATORORADATAORCLCONTROL01.CTL,
E:APPADMINISTRATORFLASH_RECOVERY_AREAORCLCONTROL02.CTL
1.创建新的控制文件
数据创建完成后,如发生下面任何一种情况,都需要创建新的控制文件。
所有的控制文件都损坏了或者没有了备份文件
需要修改数据库名称
新建控制文件的步骤:
(1)制作一个包含所有数据文件和重做日志文件的列表清单:
SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- E:APPADMINISTRATORORADATAORCLREDO03.LOG E:APPADMINISTRATORORADATAORCLREDO02.LOG E:APPADMINISTRATORORADATAORCLREDO01.LOG
SQL> select name from v$datafile;
NAME
-----------------------------------------------------------------------------
E:APPADMINISTRATORORADATAORCLSYSTEM01.DBF
E:APPADMINISTRATORORADATAORCLSYSAUX01.DBF
E:APPADMINISTRATORORADATAORCLUNDOTBS01.DBF
E:APPADMINISTRATORORADATAORCLUSERS01.DBF
E:APPADMINISTRATORORADATAORCLEXAMPLE01.DBF
E:APPADMINISTRATORORADATAORCLUSERS02.DBF
E:APPADMINISTRATORPRODUCT11.2.0DBHOME_1DATABASEUSERS03.DBF
(2)如果数据库仍然处于运行状态,则关闭数据库
SQL> shutdown normal 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。
(3)在操作系统级别备份所有的数据文件与重做日志文件
(4)启动数据库到加载状态
(5)创建一个新的控制文件
SQL> create controlfile reuse 2 database "orcl" 3 resetlogs 4 archivelog 5 maxlogfiles 16 6 maxlogmembers 3 7 maxdatafiles 100 8 maxinstances 8 9 maxloghistory 292 10 logfile 11 group 1 'E:APPADMINISTRATORORADATAORCLREDO01.LOG' size 50M, 12 group 2 'E:APPADMINISTRATORORADATAORCLREDO02.LOG' size 50M, 13 group 3 'E:APPADMINISTRATORORADATAORCLREDO03.LOG' size 50M 14 datafile 15 'E:APPADMINISTRATORORADATAORCLSYSTEM01.DBF', 16 'E:APPADMINISTRATORORADATAORCLSYSAUX01.DBF', 17 'E:APPADMINISTRATORORADATAORCLUNDOTBS01.DBF', 18 'E:APPADMINISTRATORORADATAORCLUSERS01.DBF', 19 'E:APPADMINISTRATORORADATAORCLEXAMPLE01.DBF', 20 'E:APPADMINISTRATORORADATAORCLUSERS02.DBF', 21 'E:APPADMINISTRATORPRODUCT11.2.0DBHOME_1DATABASEUSERS03.DBF' 22 character set zhs16gbk; 控制文件已创建。
(6)对新建的控制文件进行备份,并存放到一个脱机的存储设备上。
报错如下,我也不知道如何解决,解决了再来修改
SQL> alter database backup controlfile to 'd:control.bkp'; alter database backup controlfile to 'd:control.bkp' * 第 1 行出现错误: ORA-10469: error creating control file backup, no checkpoint ORA-01110: 数据文件 0: 'E:APPADMINISTRATORORADATAORCLCONTROL01.CTL'
(7)如果数据库重命名,编辑初始化参数DD_NAME,指定新的数据库名称。
(8)如果数据库需要恢复,则进行数据库恢复操作,否则直接进入步骤9.
SQL> recover database using backup controlfile;
(9)选择打开数据库
如果数据库不需要恢复或者已经对数据库进行了完全恢复,可以使用正常方式打开数据库
alter database open
如果在创建控制文件时使用了RESETLOGS参数,则必须指定以RESETLOGS方式打开数据库
alter database open resetlogs;
多路复用控制文件
为了保证数据库控制文件的可用性,Oracle数据库可以添加多个多路复用的控制文件,方法是将当前控制文件的拷贝复制到一个新的位置并重新命名,然后将新的控制文件的名称加入到control_files参数中。
为数据库添加一个多路复用的控制文件或修改控制文件的名称与位置的步骤为:
(1)关闭数据库
(2)复制控制文件到新的位置并且重命名
(3)编辑初始化参数文件中的control_files参数,将新添加的控制文件的名称添加到控制文件列表中,或修改控制文件列表中原有控制文件的名称与位置。
(4)重新启动数据库
创建新的控制文件
1.关闭数据库
SQL> shutdown immediate
2.在操作系统级别备份所有的数据文件和重做日志文件
3.启动数据库到nomount状态,不加载和打开数据库
4.执行create controlfile
5.对新建的控制文件备份
6.如果对数据库重命名,编辑初始化参数DB_NAME,指定新的数据库名称
7.如果数据库需要恢复,这进行数据库恢复操作。
8.打开数据库
备份控制文件
1.将控制文件备份为二进制文件
alter database backup controlfile to 'D:control.bkp';
2.将控制文件备份为文本文件
alter database backup contrilfile to trace;
删除控制文件
1.编辑CONTROL_FILES初始化参数,使其不包含要删除的控制文件
2.关闭数据库
3.在操作系统中删除控制文件
4.重新启动数据库