一、控制文件是一种二进制文件,记录物理数据库的当前状态。每一个控制文件只属于一个数据库但是一个数据库通常有多个控制文件,目的是避免控制文件丢失对数据库恢复的影响,多个控制文件中的内容其实是完全相同的。为防止磁盘的物理故障这些控制文件最好放在不同的物理磁盘上,最好放在不同的物理磁盘控制器上。
二、控制文件中所存储的信息如下:
1、数据库的名字,改名字取自初始化参数文件中说明的数据库名字或者是create database时使用的名字,通过如下sql查询:
select name,created,log_mode,open_mode from v$database;
通常在获得数据库名称时还有获得他的运行主机和数据库实例以及数据库的版本信息,sql查询如下
select host_name,instance_name,version,status from v$instance;
要想获得更详细的版本信息以应对可能要部署的应用系统的数据库要求,通过如下sql获得详细的版本信息:
select * from v$version;
2、数据库标志符,该标志符是创建数据库时由oracle生成的即sid。
3、数据库创建的时间戳,在数据库创建时生成
4、联机重做日志文件的名字和准确位置。当在增加,删除,修改重做日志文件时oracle会修改相关信息。获得重做日志文件的信息sql如下:
select group#,members,archived,status from v$log;
因为v$log数据字典中不包括重做日志文件的名称,路径,id等信息,如果要进一步获得重做日志分组中对应的重做日志文件成员的信息需通过如下sql
select group#,member,type,status from v$logfile;
5、当前日志的序列号,在日志切换时由oracle负责记录
6、校验点信息,该信息是在产生校验点时由oracle记录的
7、日志的历史信息
8、归档日志文件的准确位置和状态
archive log list;
9、表空间的信息,增加删除表空间时由oracle记录。要获得表空间的详细信息要通过静态的数据字典查找dba_tablespaces
select tablespace_name,status,contents,logging from dba_tablespaces;
对应到每一个表空间的数据文件的详细信息可以通过dba_data_files查找
格式话输出结果:
col file_name a30;
col tablespace_name a20;
set pagesize 50;
select file_id,file_name,tablespace_name,status from dba_data_files;
10、数据文件的名字和准确位置,当增加,删除,修改数据文件时由oracle负责写入记录
11、备份的准确位置和状态,这些信息由恢复管理器记录,主要是记录重做日志文件,获得归档重做日志文件的sql
archive log list;
三、因为控制文件是二进制文件,无法直接读取控制文件中的信息,获得控制文件中的信息的唯一方式就是通过数据字典。
数据字典分为:基表,基于基表的实体view。
基于基表的视图view又分为 user_*,all_*,dab_*
这些数据字典中查询出来的信息都是来着数据字典基表,是保存在数据库中静态信息。不是来着内存区别于以v$开头的动态表
以v$开头的动态表中的信息来自于内存,而内存中的信息是从oracle启动时加载自控制文件中的内容。故所有从控制文件中获得信息的数据字典视图都是用v$开头的。
四、限制控制文件的大小:
控制文件是oracle服务器经常操作的数据文件,因此该文件应该配置的尽可能的小些,才有利于服务器对控制文件的操作。控制文件分为两部分:可重用的部分、不可重用的部分
可重用部分通过参数control_file_record_keep_time限制可重用部分的内容保存天数默认为7天,可重用部分主要是用来给恢复管理器使用,这部分的内容可以自动扩展。
在创建数据库(create database)或表空间(create controlfile)时可以使用如下参数来间接影响不可重用部分的大小:
MAXDATAFILES
MAXINSTANCES
MAXLOGFILES
MAXLOGHISTORY
MAXLOGMEMBERS
在实际的工作中在能够保持控制文件尽可能小的同时,又要为数据库今后的扩展留下足够的空间。
五、查看控制文件的配置:
查看控制文件中全部记录的相关信息通过v$controlfile_record_section。该数据字典显示的信息是标志了每一种属性信息所分配、使用的记录情况,其中包括:
数据文件类型分配的记录数和使用的记录数,表空间类型所分配的记录个数和使用个数即重做日志文件的分配和使用记录个数等情况。
select type,record_size,records_total,records_used from v$controlfile_record_section
record_size:每种记录的字节数
records_total:该段所分配的记录个数
records_used:该段所使用的记录个数
建议使用数据字典v$parameter来获得控制文件的名字
select value from v$parameter where name='control_files';
更常用的获得控制文件详细信息的数据字典是v$controlfile
select name,status from v$controlfile;