一、控制文件的作用
Control File 是一个较小的二进制文件,描述数据库结构,包括:
01、数据库建立的日期;
02、数据库名;
03、数据库中所有数据文件和日志文件的文件名及路径;
04、恢复数据库时所需的同步信息;
05、在打开和存取数据库时都要访问该文件;
记录控制文件名及路径的参数为:CONTROL_FILES
总结以下几点:
01.二进制文件;
02.记录了数据库当前实例的结构和行为,数据文件日志文件的信息,维护数据库一致性;
03.参数文件中定义了控制文件的位置和大小;
04.很小的二进制文件,一般不超过 100MB;
05.mount 阶段 open 以后,一直在用;
06.一套控制文件只能连接一个 database;
07.可以分散放置,至少一份,最多八份;
控制文件相关视图:
01. v$controlfile ----> 列出实例的所有控制文件的名字和状态
02. v$parameter ----> 列出所有参数的位置和状态(where name='control_files')
03.v$controlfile_recode_section ----> 提供控制文件的记录部分的信息
04.show parameter control_files ----> 列出控制文件的名字、状态和位置
select * from v$controlfile;
select name,type,value from v$parameter where name like '%control%';
select * from v$controlfile_record_section;
查看控制文件中关于数据文件中的数据记录信息:(注意 DATAFILE 一定要大写,否则会提示"未选定行")
在 Linux 环境下:
Control File 丢失(丢失其中一个,不全部丢失),系统还是可以 checkpoint 和 switch logfile 的。
Control File 不一致,Oracle 马上就挂掉。
Control File 破坏掉后,Oracle 还是能够坚持一段时间,select update 都没有问题,在 checkpoint 的时候就会挂掉。
control_file_record_keep_time:
Oracle 基于 RMAN 的备份方式,可分为以 catalog 和 nocatalog 的两种方式进行备份管理。其中 catalog 的方式需要一个 catalog 目录数据库,这个数据库一般运行在另外一台服务器上,这种方式可以用于用户有多个 Oracle 数据库的环境,同时对数据库的备份恢复信息也可以长久的保存,也就是 RMAN 把对数据库 A 的备份恢复记录保留在 catalog 目录数据库中。
而基于 nocatalog 的备份管理方式,是将 RMAN 的备份信息放在控制文件中,由于控制文件的大小不能无限增大,所以在控制文件中只能保留一段时间的备份与恢复信息,而这个时间的控制,由一个参数为参考依据,这个参数就是 control_file_record_keep_time ,使用 show parameter control_file_record_keep_time 可以查到这个参数的值,默认为 7 天。
SQL> show parameter control_file_record_keep_time
二、查看控制文件方法:
01、用操作系统命令查看 strings control.ctl
SQL> show parameter control
02、用数据库命令
SQL> alter database backup controlfile to 'controlfile_bak.ctl';
然后在 /oracle/app/oracle/product/11.2.0/dbs/ 目录下找到新备份的控制文件 controlfile_bak.ctl
这个文件是二进制的文件,不能直接查看内容。
03、用数据库 trace
生成的 trace 文件在 udump 目录下:
方法一:
SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2380.trc
SQL> alter database backup controlfile to trace;
Database altered.
这个文件是可以直接查看内容
more /oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_2380.trc
方法二:
指定文件路径和文件名
alter database backup controlfile to trace as '/oracle/control.trc';
然后查看,这个也是可以直接查看的
more /oracl/control.trc
04、直接 dump controlfile 转储控制文件内容(查看控制文件中的具体内容)
alter session set events 'immediate trace name CONTROLF level 12';
level 表示级别
--level1 块头的内容
--level2 数据文件内容
--levle 10 |12 所有内容
或者
alter system set events 'immediate trace name controlf level 10';
level 1 块头
level 2 文件内容
level 3 1+2
level 10 全部
例1:获得当前的控制文件头并查看
SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6081.trc
SQL> oradebug dump controlf 1;
Statement processed.
SQL> alter database backup controlfile to trace;
Database altered.
more /oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6081.trc
例2:获得控制文件里面所有的内容
SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_5859.trc
SQL> oradebug dump controlf 12
Statement processed.
SQL> alter system set events 'immediate trace name controlf level 10';
System altered.
SQL> show parameter user_dump;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string /oracle/app/oracle/diag/rdbms/
orcl/orcl/trace
这时候,你会发现里面多了好多控制文件的内容。
more /oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_5859.trc