1.What Is a Control File?
每一个Oracle Database 都有一个控制文件,它说一个保存数据库的物理结构的二进制文件,包含以下方面:
1).Database Name
2).Datafiles 和 redo log files 的名称和地址
3).Database 建立时的时间戳
4).The current log sequence number
5).CheckPoint information
如果没有控制文件,那么数据库就不能挂载,而且恢复也比较困难。所以一般都建立2个以上的控制文件,已作为备份所用。建立多个控制文件称为多路控制文件(Multiplex Control Files),Oracle Database会对所有在CONTROL_FILES参数中指定的控制文件写入信息,但是数据库只会读第一个文件,但是如果这几个文件任何一个出现问题,数据库都会不能打开,需要中断修复。
2.Creating Control Files
2.1Creating Initial Control Files
第一次建立控制文件的时候是在使用Create Database语句的时候,在CONTROL_FILES参数里设定,例如:
CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
/u02/oracle/prod/control02.ctl,
/u03/oracle/prod/control03.ctl)
2.2 Creating Additional Copies, Renaming, and Relocating Control Files
1).首先关闭数据库
2).把现有的控制文件拷贝到新的地址上。
3).修改数据库初始文件中的CONTROL_FILES参数,增加或修改控制文件名
4).重启数据库
2.3 Creating New Control Files
当所有的控制文件被删除或者损坏、或者改变数据库名字(例如在分布式系统环境中有重名)
或者Oracle Database的版本低于10.2时,都要重新生成一个新的控制文件。版本低于10.2时,如果你改变了MAXLOGFILES的值,你不能用ALERT DATABASE命令去改变设定,这样会产生一个错误,必须要重新生成控制文件。而后面的版本控制文件会自动改变。
下面是CREATE CONTROLFILE语句:
CREATE CONTROLFILE
SET DATABASE prod
LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
'/u01/oracle/prod/redo01_02.log'),
GROUP 2 ('/u01/oracle/prod/redo02_01.log',
'/u01/oracle/prod/redo02_02.log'),
GROUP 3 ('/u01/oracle/prod/redo03_01.log',
'/u01/oracle/prod/redo03_02.log')
RESETLOGS
DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
'/u01/oracle/prod/rbs01.dbs' SIZE 5M,
'/u01/oracle/prod/users01.dbs' SIZE 5M,
'/u01/oracle/prod/temp01.dbs' SIZE 5M
MAXLOGFILES 50
MAXLOGMEMBERS 3
MAXLOGHISTORY 400
MAXDATAFILES 200
MAXINSTANCES 6
ARCHIVELOG;
2.4 Steps for Creating New Control Files
1.) 找出数据库中的datafiles 和 redo log files
可以通过下面三个表来查询:
SELECT MEMBER FROM V$LOGFILE;
SELECT NAME FROM V$DATAFILE;
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
2.) 关闭数据库
3.)备份所有的datafiles 和 redo log files
4.) 打开数据库,但不要挂载
startup nomount
5.) 使用CREATE CONTROLFILE 语句建立一个新的控制文件
6.)备份这个新建的控制文件
7.)修改CONTROL_FILES 初始化参数去包含这个新的控制文件
8.)必要时修复数据库,如果你不是在修复数据库,这一步可以略过
9.)重新打开数据库,如果在上面没有设RESETLOGS, 则用 ALTER DATABASE OPEN;
如果设了,则用ALTER DATABASE OPEN RESETLOGS;
3. Backing Up Control Files
使用alter database backup controlfile 语句去备份控制文件,有两种方式,
第一种是把控制文件备份成为一个二进制文件:
alter database backup controlfile to '/oracle/backup/control.bkp';
第二种是产生一个SQL语句,重新运行可以产生控制文件
alter database backup controlfile to trace;
这条命令在追踪文件中生成一个SQL脚本,你可以编辑这个脚本。
4.Recovering a Control File Using a Current Copy
这步很简单,先关闭数据库,只要把好的控制文件覆盖坏的控制文件,然后重启数据库就可以了。