什么是控制文件?它有哪些特性?
定义:控制文件是定义当前数据库物理状态的二进制文件。
特性:
1)控制文件若丢失需要恢复
2)在MOUNT状态可以读取
3)数据库运行期间控制文件不断地被更新
4)每个控制文件都只关联一个数据库
5)应该被多元化
6)维护数据库实体
7)由CREATE DATABASE语句初始化大小
注:控制文件由DBA管理维护。
3.控制文件包含哪些内容?
1)数据库名及数据库唯一标识
2)数据文件和日志文件标识
3)数据库恢复所需的同步信息,即检查点号
4)数据库创建时间
5)表空间名
6)当前重做日志文件SCN
7)回滚段的开始和结束
8)重做日志归档信息
9)备份信息
4.控制文件的简单操作介绍?
1)控制文件由参数control_files指定,格式如下:
control_files=(“home/app/…/control01.ctl”,“home/app/…/control02.ctl”)
参数中各个文件是镜像关系,也就是说,几个文件中只要有一个文件完好,数据库就可以正常运行。
2)以下语句查询控制文件的信息:
sql>select * from v$controlfile
如果控制文件损坏或丢失,数据库将终止并且无法启动,所以,要对控制文件进行镜象,手工镜像步骤如下:
a.关闭数据库
b.复制控制文件
c.修改参数文件,加入新增的控制文件位置描述
d.重新启动数据库
另外注意,控制文件中还包含几个服务器参数的设置,如果修改这些参数的值,刚需要重新创建控制文件,这些参数是:
MAXLOGFILES:最大日志文件个数
MAXLOGMEMBERS:最大日志成员个数
MAXLOGHISTORY:最大历史日志个数
MAXDATAFILES:最大数据文件个数
MAXINSTANCES:最大实例文件个数
所有修改数据库结构的命令都会引起控制文件的改变。同时出会记录在oracle跟踪文件中,跟踪文件的名称为alter_SID.log,路径如下:
d:\oracle\product\10.1.0\admin\DB_NAME\bdump\SIDALRT.log(unix是alter_SID.ora)
也可以在参数文件中指定跟踪文件的存储路径,后台进程跟踪文件目录由参数background_dump_dest指定,用户跟踪文件位置由参数user_bdump_dest指定,如:
background_bdump_dest=/u01/app/oracle/oralog/bdump
user_bdump_dest=/u01/app//oralog/udump
5.如何多元化控制文件?
步骤:
1)修改SPFILE:
ALTER SYSTEM SET control files =
‘HOME/ORADATA/u02/ctrl02.ctl’ SCOPE=SPFILE;
2)关闭数据库
SQL> shutdown
3)创建额外的控制文件
$ cp $HOME/ORADATA/u01/ctrl01.ctl 复制现有控制文件
$HOME/ORADATA/u02/ctrl02.ctl
4)启动数据库
SQL> startup
6.使用OMF管理控制文件?
1)如果control_files参数没有制定就会使用OMF创建控制文件。
2)OMF控制文件将会位于DB_CREATE_ONLINE_LOG_DEST_N。
但是,下面语句修改系统控制文件时(可能是操作随意),到底应将控制文件是放在什么位置呢?
SQL>Alter system set control_files = ‘control01.ctl’,‘control02.ctl’,‘control03.ctl’ scope=spfile;
当按上面语句更改控制文件设置后,必须将控制文件放置到 %ORACLE_HOME%\database 目录下,否则数据库无法正常启动。
数据库正常启动后,按下面语句操作恢复控制文件的制定位置:
SQL>Alter system set control_files = ‘D:\oracle\Administrator\oradata\db_1\control01.ctl’,‘D:\oracle\Administrator\oradata\db_1\control02.ctl’,‘D:\oracle\Administrator\oradata\db_1\control03.ctl’ scope=spfile;
7.查询控制文件信息?
1)SQL> select name from v$controlfile;
NAME
E:\ORADATA\ORCL\CONTROL01.CTL
E:\ORADATA\ORCL\CONTROL02.CTL
E:\ORADATA\ORCL\CONTROL03.CTL
2)SQL> select name, value from v$parameter where name=‘control_files’;
NAME
VALUE
control_files
E:\ORADATA\ORCL\CONTROL01.CTL, E:\ORADATA\ORCL\CONTROL02.CTL, E:\ORADATA\ORCL\CONTROL03.CTL
3)SQL> show parameter control_files;
NAME TYPE VALUE
control_files string E:\ORADATA\ORCL\CONTROL01.CTL,
E:\ORADATA\ORCL\CONTROL02.CTL
, E:\ORADATA\ORCL\CONTROL03.CT
L
4)SQL> select type, record_size, records_total, records_used
2 from v$controlfile_record_section
3 where type=‘DATAFILE’;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
DATAFILE 428 100 11