控制文件作用
(1)它包含数据文件,在线日志文件,归档文件信息,这些文件信息用于数据库open的文件验证。
当数据库的架构改变时,比如增减,删除文件时,会更新控制文件。
(2)包含了数据库恢复时需要的一些信息,用于数据库的恢复
因为控制文件里面包含了很多信息数据库打开的时候会验证一系列的信息保证打开的数据库是一个正常完整的数据库,所以需要对各种数据进行验证。这些文件就是放在控制文件里面,要找到这些文件必须先找到控制文件以获得这些文件的地址以及状态。所以控制文件的第一个作用就是提供各种文件的路径以及文件的状态。控制文件的第二个作用就是用来做数据库恢复提供信息。如果使用了RMAN备份,也可以将备份信息写入到控制文件里面。
控制文件结构
(1)空间允许重用区
这个区域的信息是可以被重用(覆盖的),当空间不足或者规则满足时,允许覆盖当前的信息,比如归档日志和RMAN备份集的信息。
(2)空间不允许重用区
这个区域的信息不允许重用(覆盖)的,因为他们是数据库必要的信息,比如表空间,数据文件,在线日志文件等等。
控制文件由两部分组成,一部分为空间允许重用,一部分为不允许重用。可以覆盖的包含的信息对于数据库来说并不是特别重要的,所以是允许覆盖的。
使用rman备份的时候要维护备份集的一个数据字典,这个数据字典就是存放备份集的各种信息。如什么时候做了一次备份,备份里面包含了那些文件以及备份的级别是什么。这个就叫做备份集的数据字典。
备份集的数据字典可以放在两个地方,一个地方就是单独去创建一个数据库,然后rman将信息写到那台数据库。这个的好处就是如果使用rman对多台数据库进行备份的时候做一个整个的控制,全局备份集的一个管理就是集中在一个数据库里面管理备份集,那么使用一台数据库是比较好的。如果对多台数据库进行备份,将备份信息放在每一台数据库的控制文件里面管理起来是很不方便,恢复也会很不方便。所以对多台数据库进行备份的时候catlog这个数据库就是来存放备份集信息的地方。
另外一个地方是控制文件里面,对单台数据库进行备份的时候可以不用再建立另外一台数据库了。就可以将备份集放在控制文件里面。恢复的时候rman会自动的去控制文件里面将信息读出来。这部分信息就可以放在允许重用的区域。比如说可以在该区域设置一个域值,比如说这个信息可以保存多长时间,过期之后这些空间就可以重用,这样就允许在控制文件里面保存有时间限制的备份集信息了。
不允许重用的区域就是存放着对数据库至关重要的一些信息,这些信息是不可以被覆盖的,对数据库是极为重要的。
所以控制文件从结构上来说是由两部分组成的,一部分是允许空间可以重用的存放的数据,这部分主要是一些备份数据。另外一部分就是不允许重用的数据,包括数据库自身的文件信息。
控制文件丢了怎么办?
坦白说参数文件或者控制文件丢失了问题不是特别大,太大的问题就是数据库的数据丢失了。参数文件丢失了可以去别的地方复制一份,但是得修改里面的内容通过手工的方式。如果控制文件丢了如果之前有备份可以将其恢复过来。
(1)备份控制文件 正常情况下将数据库关闭,将控制文件复制到另外一个地方即可 恢复的时候将备份的copy过来就可以了
(2)将创建控制文件的语句保留下来就可以了
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string C:\APP\COMPLICATED\ORADATA\ORC
L\CONTROL01.CTL, C:\APP\COMPLI
CATED\FLASH_RECOVERY_AREA\ORCL
\CONTROL02.CTL
control_management_pack_access string DIAGNOSTIC+TUNING
可以看到控制文件有两个,可以将创建控制文件的语句保留下来。
SQL> alter database backup controlfile to trace;
这样就可以把控制文件直接备份成创建控制文件的语句,控制文件其实是一个二进制文件。如果没有to trace就是将二进制的控制文件备份了,而不是转化为SQL语句,加上to trace就是备份了创建备份控制文件的SQL语句。
备份创建控制文件的sql语句如下:
Completed: Create controlfile reuse set database "orcl" --可以看到控制文件里面记录了数据库的名字
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
Datafile
'C:\app\complicated\oradata\orcl\SYSTEM01.DBF', --控制文件里面记录数据库的数据文件的位置
'C:\app\complicated\oradata\orcl\SYSAUX01.DBF',
'C:\app\complicated\oradata\orcl\UNDOTBS01.DBF',
'C:\app\complicated\oradata\orcl\USERS01.DBF'
LOGFILE GROUP 1 ('C:\app\complicated\oradata\orcl\redo01.log') SIZE 51200K,
GROUP 2 ('C:\app\complicated\oradata\orcl\redo02.log') SIZE 51200K,--redo文件的位置信息
GROUP 3 ('C:\app\complicated\oradata\orcl\redo03.log') SIZE 51200K RESETLOGS
所以说如果控制文件丢了,要么有备份的控制文件。要么有备份创建控制文件的SQL语句,如果前面两个都没有只能手工编辑一个控制文件了。控制文件的格式很简单可以去编辑一个。
控制文件里面存放的就是创建控制文件的sql语句,如果控制文件丢了就可以直接再oracle里运行这个文件里面的sql语句来创建一个控制文件。