控制文件是一个很小的二进制文件(10MB左右),含有数据库结构信息,包括数据文件和日志文件信息。控制文件在数据库建立时被自动建立,并在数据库发生物理变数时更新。控制文件被不断更新,在任什么时候候都要保证控制文件可用,不然数据库将没法启动或者使用。linux
1 控制文件包含的主要信息以下:数据库
数据库名称和SID标识;安全
数据文件和日志文件列表;session
数据库建立的时间戳;oracle
表空间信息;app
当前重作日志文件序列号;测试
归档日志信息;3d
检查点信息;日志
回滚段的起始与结束;blog
备份数据文件信息;
控制文件包含了如此多的重要信息,须要保护并及时备份控制文件,以便它被损坏或者磁盘介质损货时,可以及时恢复。目前保护控制文件的主要策略为多路复用控制文件与备份控制文件。
2 查看目前系统的控制文件信息,主要是查看相关的字典视图
v$controlfile 包含全部控制文件的名称和状态信息
v$controlfile_record_section 包含控制文件中各个记录文档段的信息
v$parameter 包含了系统全部初始化参数,能够查询到control_files的信息
3 控制文件的多路复用
为了提升数据库的安全性,至少要为数据库创建两个控制文件,并且这两个文件最好分别放在不一样的磁盘中,这样能够避免产生因为某个磁盘故障而没法启动数据库的危险,该管理策略称为多路复用控制文件。当多路复用控制文件某个磁盘发生故障致使其包含的控制文件损坏,数据库将被关闭或者发生异常,此时能够用另外一磁盘中保存的控制文件来恢复被损坏的控制位文件,而后再重启数据库,达到保护控制文件的目的。
数据库创建时,通常会默认建立两个控制文件,咱们能够手动的再建立多个控制文件且不要与默认的放在同一个磁盘中,首先咱们能够修改control_files参数来增长控制文件。
3.1 更改CONTROL_FILES
alter system set control_files = '/usr/oracle/app/oradata/orcl/control01.ctl','/usr/oracle/app/flash_recovery_area/orcl/control02.ctl','/home/oracle/ControlFiles/control03.ctl','/home/oracle/ControlFiles/control04.ctl'
scope=spfile;
上面的代码中,前3个控制文件已经建立好,第4个文件是用户将要手动添加的,可是目前尚未建立该文件,建立该文件前须要关闭数据库,而后将第1个复制过去便可;
3.2 复制控制文件
其实添加控制文件就是将以前可用的控制文件复制过去,重命名便可,首先咱们须要关闭数据库,而后将/usr/oracle/app/oradata/orcl/control01.ctl 复制为/home/oracle/ControlFiles/control04.ctl便可
复制完以后,再重启数据库,重启以后查询v$control_files;
到此咱们控制文件多路复用的操做完成,过程当中须要注意的就是,必须先关闭数据库才能把可用的控制文件复制过去,若是没有关闭就复制过去,在重启的时候会报错原控制文件与新增的不一致的错误:
ORA-00214: control file '/usr/oracle/app/oradata/orcl/control01.ctl' version
7136 inconsistent with file '/home/oracle/ControlFiles/control04.ctl' version
7133
4 建立控制文件
当数据库全部的控制文件都丢失或者损坏,惟一补救方法就是手动建立一个新的控制文件。建立的语法以下:
create controlfile
reuse database db_name
logfile
group 1 redofiles_list1
group 2 redofiles_list2
group 3 redofiles_list3
...
datafile
datafile1
datafile2
datafile3
...
maxlogfiles max_value1
maxlogmembers max_value2
maxinstances max_value3
maxdatafiles max_value4
noresetlogs|resetlogs
archivelog|noarchivelog;
db_name: 数据名称,一般是orcl
redofiles_list: 重作日志组中的重作日志文件列表;
datafile1: 数据文件路径;
max_value1: 最大的重作日志文件数,这是一个永久性参数,一旦设置就不能修改,若是想要修改只有重建控制文件;
4.1 建立过程
建立以前要先对数据文件与重作日志文件备份,由于建立过程当中可能会引发某些异常致使数据文件与日志文件损坏。
查看日志文件,v$logfile
查看数据文件
根据上面的查询能够获得文件所在的路劲,而后备份日志文件与数据文件,备份以前必定先关闭数据库,否则会卡死或者出现异常状况。进入到数据文件与日志文件所在目录,测试系统正好这两个文件都在一个文件夹下,直接使用 cp 命令把它们备份到其余磁盘的文件夹下便可:
备份完以后,将数据启动到nomount状态,即启动但不加载数据库,由于加载数据库时实例将会打开控制文件,没法达到建立新控制文件的效果。
数据库启动到nomount状态以后,执行create controlfile 命令
create controlfile
reuse database "orcl"
logfile
group 1 '/usr/oracle/app/oradata/orcl/redo01.log',
group 2 '/usr/oracle/app/oradata/orcl/redo02.log',
group 3 '/usr/oracle/app/oradata/orcl/redo03.log'
datafile
'/usr/oracle/app/oradata/orcl/system01.dbf',
'/usr/oracle/app/oradata/orcl/sysaux01.dbf',
'/usr/oracle/app/oradata/orcl/undotbs01.dbf',
'/usr/oracle/app/oradata/orcl/users01.dbf',
'/usr/oracle/app/oradata/orcl/CTRR_DATA.dbf'
maxlogfiles 50
maxlogmembers 4
maxinstances 6
maxdatafiles 200
noresetlogs
noarchivelog;
执行建立命令以后,新的控制文件仍是被存放在原来的文件下,能够尝试备份而后将以前的控制文件删掉,会发现原来的文件下名字同样的控制文件又出现了,编辑SPFILE 文件中的初始化参数 CONTROL_FILES,使其指向新建的控制文件:
alter system set control_files = '/usr/oracle/app/oradata/orcl/control01.ctl','/usr/oracle/app/flash_recovery_area/orcl/control02.ctl'
scope=spfile;
5 备份恢复控制文件
5.1 备份控制文件
直接将当前可用的任意一个多路复用下的控制文件复制到你想要备份的路劲便可;
咱们能够将控制文件备份成一个可读的数据文件,而后就能够查看里面的具体内容;
alter database backup controlfile to trace; --备份成可读的文本文件,此方法备份以后,能够查看控制文件的具体内容,首先使用语句:
select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat)); 能够获取到备份以后的文件路劲与名称:
获得路径以后,咱们能够在linux去查看备份文件的具体内容:
将其拷贝出来,主要内容就是建立控制文件的语法:
5.2 恢复控制文件
当控制文件所在磁盘损坏,只须要在初始化文件中从新设置control_files参数的值,使它指向备份的控制文件,就能够重启数据库,可是要保证control_files下对应的路劲下全部的控制文件版本一致才行,否则会报错误;
若是是控制文件自己损坏,咱们能够将备份文件复制到对应的目录下,而后重启数据库便可。