Oracle控制文件

Posted black-start

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle控制文件相关的知识,希望对你有一定的参考价值。

一、控制文件的作用

 

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

  

以上是关于Oracle控制文件的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中的控制文件和数据文件

Oracle控制文件的作用

oracle 中的 *.ctl 放的啥东西呀?

Oracle 物理结构 文件-控制文件

 Oracle控制文件 

 Oracle控制文件