控制文件是一个很小的二进制文件(10MB左右),含有数据库结构信息,包括数据文件和日志文件信息。控制文件在数据库创建时被自动创建,并在数据库发生物理变数时更新。控制文件被不断更新,在任何时候都要保证控制文件可用,否则数据库将无法启动或者使用。

  1 控制文件包含的主要信息如下:

  数据库名称和SID标识;

  数据文件和日志文件列表;

  数据库创建的时间戳;

  表空间信息;

  当前重做日志文件序列号;

  归档日志信息;

  检查点信息;

  回滚段的起始与结束;

  备份数据文件信息;

  控制文件包含了如此多的重要信息,需要保护并及时备份控制文件,以便它被损坏或者磁盘介质损货时,能够及时恢复。目前保护控制文件的主要策略为多路复用控制文件与备份控制文件。

  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下对应的路劲下所有的控制文件版本一致才行,不然会报错误;

  如果是控制文件本身损坏,我们可以将备份文件复制到对应的目录下,然后重启数据库即可。

  

  

Oracle 控制文件管理的更多相关文章

  1. Oracle体系结构之控制文件管理

    控制文件作用:记录了数据库的结构和行为,有多少个数据文件,日志文件及其位置名称,状态,维护数据库的一致性,即记录了数据库的启动SCN号和终止SCN号. 控制文件的位置和个数记录在参数文件中,通常控制文 ...

  2. [20190530]oracle Audit文件管理.txt

    [20190530]oracle Audit文件管理.txt --//昨天听课,讲一些oracle相关安全的问题,对方提到audit file的管理,应该引入OS audit,这样目的是仅仅root查 ...

  3. Oracle日志文件管理与查看

    Oracle日志文件管理与查看 from:http://hi.baidu.com/shuker/item/25ee611ee960c7426826bb1f 1.查询系统使用的是哪一组日志文件: sel ...

  4. Oracle控制文件

    一.Oracle 控制文件 为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等 ...

  5. oracle 控制文件的重建

    目录 oracle 控制文件的重建 NORESETLOGS RESETLOGS oracle 控制文件的重建 不到最后时刻,如三个控制文件都已损坏,又没有控制文件的备份.还是不要重建控制文件,处理不好 ...

  6. Oracle 控制文件(CONTROLFILE)

    一.Oracle 控制文件 为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等 ...

  7. Oracle 控制文件损坏解决方案

    Oracle 控制文件损坏解决方案 故障一:丢失(损坏)一个控制文件 前台报错:ORA-00205:error in identifying control file,check alert log ...

  8. Oracle控制文件多路复用以及Oracle备份重建控制文件

    控制文件中记录了oracle数据库的物理结构,也就是记录了数据库数据文件和日志文件的位置,控制文件中还记录了多种SCN,用这些SCN来确定数据文件和日志文件是否是正确的.如果不正确那么数据库就需要恢复 ...

  9. oracle控制用户权限命令

    ORACLE控制用户权限: 首先使用系统中的拥有DBA权限的账号(system)登录: 一.创建用户: 1.DBA使用creater user语句创建用户: --创建登录用户名为:user01,密码为 ...

随机推荐

  1. python设计模式之单例

    """ 单例模式 1.第一种方法 修改__new__方法 2.第二种方法 python import 就是一个单例模式 把要单例的类封装到一个py文件中 "&q ...

  2. Color the ball HDU - 1556 (非线段树做法)

    题意:在1到n的气球中,在不同的区域中涂颜色,问每个气球涂几次. #include<cstdio>int num[100010];int main(){ int n, x, y;; whi ...

  3. 统计硬币 HDU - 2566 (三种解法:线性代数解法,背包解法,奇思妙想解法 >_< )

    题号放这里自己去找吧. HDU-2566 这题最开始用的dp,然后,被同学用奇思妙想过了.  >_<  开心! -_- !! 然后,被我线性代数给过了. 方法一:dp 将其化为01背包,只 ...

  4. MSSQL Server 数据库备份还原常用SQL语句及注意

    1.备份数据库 backup database db_name to disk='d:\db_name.bak' with format --通过使用with format可以做到覆盖任何现有的备份和 ...

  5. m100(2) 云台自动跟踪

    大疆 210云台控制 https://developer.dji.com/onboard-sdk/documentation/sample-doc/advanced-sensing-target-tr ...

  6. Cookie、sessionStorage与localStorage的区别

    (1) sessionStorage 保存数据的方法: SessionStor.setItem(“key”,”value”) 或者写成 sessionStorage.key=”value” 读取数据的 ...

  7. Vue2 第四天学习(Vue的生命周期)

    阅读目录 1.理解VUE---混合 2.Vue实例化选项 3.Vue实例化的生命周期 回到顶部 1.理解VUE---混合 在了解Vue生命周期之前,我们先来学习Vue中的混合吧: 为什么需要使用混合? ...

  8. DHT11温度传感器应用电路

    DHT11应用电路: 注意点: Vcc和GND之间连接一个100 μF的一个电解电容(通常电容的取值在100μF-300μF之间,滤波) SWI接一个5K的上拉电阻,目的是增强驱动能力

  9. 【Codeforces 1109C 】Sasha and a Patient Friend

    Codeforces 1109 C 题意:现在有个碗,每时每刻其中的水量都会加一个整数(可以为负). 给\(n\)个询问,询问有\(3\)种类型: \(1\ t\ s\):将从第\(t\)秒开始水量增 ...

  10. ASP.NET的生命周期

    我主要参考了这些文章 ASP.NET应用程序与页面生命周期, IIS处理Asp.net请求和 Asp.net页面生命周期 asp.net页面的生命周期 页面生命周期开始 (一)页面生命周期的主要阶段包 ...