关于控制文件的总结

最近一直被控制文件搞得晕晕的,所以找了各种资料恶补了一下,自己在这把自己知道的再整理梳理一下,可能不一定全,以后再看时在来补充。

首先,一定要讲一下控制文件的内容和它的重要性。当初刚开始接触ORACLE就从参数文件 控制文件 日志文件开始学了,只知道控制文件很重要,但到底有多重要呢?通过学习到后面备份恢复,再回头来看看控制文件,才发现它的重要性不言而喻。
控制文件中包括的重要内容:
1.日志文件,数据文件名称及位置,这个就不用多说了,它用来打开数据库(open
2.日志序列号,用于到时做实例奔溃恢复或者介质恢复。
3.检查点,这个检查点时常发生,在数据库正常关闭时要写发生完全检查点写scn到控制文件的结束scn,因此如果在数据库运行时,控制文件发生损坏,数据库是不能正常的关闭的
4.日志历史信息
5.Rman的备份信息
控制文件内容详细见下图

上面是从控制文件的组成方面,从另外一个方面看,控制文件也可以分为2部分(可变部分+不可变部分)
1.不可变部分:即数据库名称,文件位置,大小,日志位置等。ORACLE控制文件会为每个数据文件预留 180 字节的空间,该空间将用于记载数据文件的名称、尺寸、状态以及检查点等信息。
2.可变部分:即通过control_file_record_keep_time参数(默认7天),规定了归档日志信息,Rman备份信息等可以保留在控制文件中的最短时间,也就是说,为了不使控制文件无限增大(oracle数据库会把归档信息,备份信息等记录到控制文件中,占用空间),过了control_file_record_keep_time参数所设定的天数后,这些备份信息就会被新增进来的数据信息所覆盖。比如过了7天了,数据库奔溃了,如果最近7天没备份,那么可能恢复就会出问题了。

讲了这么多,大概的控制文件内容作用就讲完了。下面总结一下控制文件的备份。
针对不同的控制文件丢失,主要分为以下几种情形:
1.控制文件完全丢失 2.控制文件不完全丢失 3.归档模式 4.非归档模式 5.有备份 6.无备份
别看情形多,但解决办法总共2种
那么组合就来了:
如果控制文件完全丢失,现在控制文件都没了。
以orcl数据库为例
1)我控制文件在丢失前,数据库时处于归档模式的,而且我有备份 /home/oracle/rectl.bak
那么就照着下面步骤恢复
--不论数据库现在是什么状态,把它关闭切到nomount状
startup nomount;
ho cp /home/oracle/rectl.bak /$ORACLE_BASE/oradata/orcl/control01.ctl
ho cp /home/oracle/rectl.bak /$ORACLE_BASE/oradata/orcl/control02.ctl
ho cp /home/oracle/rectl.bak /$ORACLE_BASE/oradata/orcl/control03.ctl
(上面这一步是在OS中将备份控制文件复制到原来数据库的控制文件应该放的位置,并保持名称一致)
--使用recover命令进行恢复
recover database using backup controlfile;
在这一步会提示你输入你的日志地址,即重跑日志让你的控制文件scn值跑到最新的和日志文件数据文件一致的状态
--接下来打开数据库
alter database open resetlogs; --resetlogs选项是要恢复日志的序列号,即你现在是要打开一个新的数据库了,和之前的数据那个状态已经没有关系了,所以的日志文件(redo log)对于现在的数据库来说,它的数据已经失效了,所以清空。
这样就能打开数据库了。
2)如果控制文件在丢失前,处于归档模式,但是你没备份文件,那么重建控制文件吧!因为你没有备份文件,你有日志也没用。
3)如果控制文件在丢失前,处于非归档模式,不管你有没有备份文件,那么你还是重建吧!你有备份文件,但是没日志,你就不能将控制文    件恢复到当前最新状态。除非你关闭它的一致性校验,强制打开数据库。


如果控制文件并未完全丢失,那么就好办了(不管你是有没有备份,有没有开归档),在数据库关闭状态下,复制现在可以使用的控制文件,这样就可以解决了。要注意的是,不能再数据库开启时对控制文件进行移动和复制,移动会造成文件损坏,复制的话,也是一个无用的控制文件,因为数据库在开启时,会不断往控制文件中写入信息,你复制出来的可能是已经失效的文件了。那么顺便说一下就是,对于其他的数据文件也不要再数据库运行时对它进行移动操作,会导致文件损坏。我之前就一不小心,在没有将users表空间进行脱机的情况下移动了它的数据文件,后来就数据库启动出错,最后恢复了,但是users表空间不能再用了,之前已有的数据还在,但是不能再在它里面建表插入数据了,报ORA-00600错,如果哪位大侠能帮我解决,感激不尽。

最后讲到控制文件备份和重建
控制文件的备份
        热备:
            alter database backup controlfile to '
            alter database backup controlfile to trace as '
        RMAN:
            backup current controlfile;
            backup database include current controlfile;
            -- 或者设置RMAN 为自动备份
            RMAN > configure controlfile autobackup on;
  建立控制文件是一项非常危险的工作,如果建立控制文件不成功, 可能会潜在地损坏数据文件和重做日志。所以在建立控制文件之前,必须首先备份所有数据 文件和重做日志,避免损坏用户的数据库。
 重建语句:
CREATE CONTROLFILE REUSE DATABASE "orcl" NOARCHIVELOG NORESETLOGS
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 20
        MAXINSTANCES 8
        MAXLOGHISTORY 3
        LOGFILE
          GROUP 1(
            '/u01/app/oracle/oradata/orcl/redo01.log'
             ) SIZE 50M,
          GROUP 2(
            '/u01/app/oracle/oradata/orcl/redo2.log',
            '/u01/app/oracle/oradata/orcl/redo02.log'
             ) SIZE 50M,
          GROUP 3(
            '/u01/app/oracle/oradata/orcl/redo3.log',
            '/u01/app/oracle/oradata/orcl/redo03.log'
             ) SIZE 100M
        DATAFILE
          '/u01/app/oracle/oradata/orcl/tbs1_2.dbf',
          '/u01/app/oracle/oradata/orcl/tbs1_1.dbf',
          '/u01/app/oracle/oradata/orcl/example01.dbf',
          '/u01/app/oracle/oradata/orcl/users01.dbf',
          '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
          '/u01/app/oracle/oradata/orcl/system01.dbf',
          '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
        CHARACTER SET WE8ISO8859P1

以上如果有错误的地方,望指正。共同学习








来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29227735/viewspace-1062824/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29227735/viewspace-1062824/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值