今天和 杭州恒生 的一个朋友讨论一个RMAN 在备份时数据块一致性的问题。

关于RMAN 的备份原理参考blog:

RMAN 系列(一)---- RMAN 体系结构概述

http://blog.csdn.net/tianlesoftware/archive/2010/06/09/5659701.aspx

先看官方文档上的一段话:

Consistent Backups

You can use the BACKUP command to make consistent and inconsistent backups of the database. A consistent backup occurs when the database is in a consistent state. A database is in a consistent state after being shut down with the SHUTDOWN NORMAL, SHUTDOWN IMMEDIATE, or SHUTDOWN TRANSACTIONAL commands. A consistent shutdown guarantees that all redo has been applied to the datafiles. If you mount the database and make a backup at this point, then you can restore the database backup later and open it without performing media recovery.

Inconsistent Backups

Any database backup that is not consistent is an inconsistent backup. A backup made when the database is open is inconsistent, as is a backup made after an instance failure or SHUTDOWN ABORT command. When a database is restored from an inconsistent backup, Oracle Database must perform media recovery before the database can be opened, applying any pending changes from the redo logs.

Note:

RMAN does not permit you to make inconsistent backups when the database is in NOARCHIVELOG mode. If you employ user-managed backup techniques for a NOARCHIVELOG database, then you must not make inconsistent backups of this database.

If the database runs in ARCHIVELOG mode, and you back up the archived redo logs and datafiles, inconsistent backups can be the foundation for a sound backup and recovery strategy. Inconsistent backups offer superior availability because you do not have to shut down the database to make backups that fully protect the database.

1  consistent backup:

一致性备份一个数据库或者数据库的一部分,那么这部分的数据文件及控制文件必须被checkpointed并且拥有相同的scn(system change number),oracle 决定是否一致性备份通过检查数据文件头以及这个数据文件头的在控制文件里的信息,如果是一致的,则表示为一致性备份。

这里补充一点知识:

当发生checkpoint时,会把SCN写到四个地方去。 三个地方于control file内,一个在datafile header。

1.    System checkpoint SCN ===========> (SYSTEM CHECKPOINT SCN in control file)

2.    Datafile checkpoint SCN ===========> (DATAFILE CHECKPOINT SCN in control file)

3.    Stop SCN ======================> (STOP SCN in control file)

4.    Start SCN ======================> (DATAFILE HEADER)

正是因为这些SCN,我们才保证了一致性。详细内容参考:

RedoLog Checkpoint 和 SCN关系

http://blog.csdn.net/tianlesoftware/archive/2010/01/25/5251916.aspx

只有当数据库正常关闭,既通过normal,immediate,transactional选项关闭数据库,而后进行的备份才是一致的,如果instance fails或者shutdown abort进行关闭,那么数据文件是不一致的,这时当数据库打开时是需要instance 恢复,(当然数据库是read-only database不需要进行instance 恢复)

Oracle 通过checkpoint进程使控制文件和数据文件拥有一致的scn,当表空间处于只读(read-only)或者offline normal tablespace 时,允许使用旧的scns,这时该表空间中的数据文件跟其他的数据文件仍然被认为是一致的,因为在脱机后,表空间没有进行任何新的改变。

当数据库restore 一致性数据库全备份后,打开数据库将不需要应用redo,因为数据已经是一致的,不需要新的动作使数据文件变正确。

在noarchivelog模式下,一致性全备份是唯一有效的选择,因为如果选择了不一致性备份,那么恢复需要apply redo,而非归档模式下,所需要的redo logs有可能是不存在磁盘上。

2  Inconsistent backup:

非一致性备份是备份中的数据文件和控制文件他们没有被checkpointed至相同的scn,oracle将不能打开数据库直到所有的文件头header scns是consistent,也就是说,直到在线重做日志中所有的改变的记录都应用到磁盘中数据文件中。
   这里是我们讨论的重点。 因为如果数据库处与open 状态,那么数据块就会被修改,SCN 也会发生相应的变化。 但是RMAN 在备份前是通过快照控制来参考的。 这就会造成不一致状态。

控制文件存储数据库的结构信息,这些信息包括用于恢复的检查点SCN信息。但是控制文件是一个非常繁忙的文件,连续的SCN 和文件管理对于数据库的生命期来说至关重要,因此RDBMS 必须能够持续的使用控制文件。

而RMAN 开始备份每一个数据文件时需要得到一个一致的控制文件视图, RMAN需要知道备份开始时最新的检查点信息和文件信息。开始备份后,RMAN 需要这些信息在备份操作期间保持一致,也就是说RMAN需要一个读取一致的控制文件视图。除非RMAN 在备份持续时间内锁定控制文件,否则数据库会不断更新控制文件,所以不可能。 但是,锁定控制文件意味着数据库不能执行检查点操作和切换日志,或则不能产生新的归档日志,这些操作是不可能的。

所以就有了快照控制文件(snapshot controlfile),快照控制文件是控制文件的副本。 RMAN 只在备份和同步操作期间使用快照控制文件。 这些操作开始时,RMAN 会根据实际控制文件来刷新快照控制文件,这样会短暂的锁住控制文件,随后,RMAN 会切换到快照并在备份持续使用这个快照。 这种方式具有读取一致性,且不妨碍数据库活动。

作为24*7的系统,唯一的选择是进行非一致性的备份,这时数据库必须是归档模式,当offline a tablespace进行备份时,那么这时这个表空间中的数据文件将跟其他表空间是不一致的了,因为数据库在进行活动,数据库中的其他部分会被修改,那么这是offline和online的数据文件可能会包含不一致的scn。
    当数据库处于归档模式下,可以建立一个全备份使用备份在线数据文件在不同的时间,例如,在不同时间分别备份数据库中所有的表空间及控制文件,我们认为这种交错排列的备份是一个全备份。
    关闭状态下,可以进行非一致性备份,当数据库处于归档模式下,如果关闭时使用了shutdown abort,那么关闭后进行的备份,就是不一致性备份,但这个备份是有效的,因为可以应用在线和归档重做日志使数据库在打开的时候处于一致。
    而在noarchivelog模式下,进行的非一致性全数据库备份,仅仅当redo logs包含所有在上次backup以来的改变,这种情况很少也不希望发生。oracle强烈建议别在noarchivelog 模式下进行shutdown abort命令,如果没有归档重做日志,那么将是不可能恢复。

3  重做日志,备份归档日志 和 控制文件
       重做里面存放的是未归档的信息。 这些信息对恢复来说非常重要,因为当online backup 和inconsistent closed backup, 总会应用重做日志进行恢复,所以有时需要为未归档的重做日志进行归档,具体方式如下:

当数据库处于open状态:   alter system archive log current;

当mounted,open or colsed: alter system archive log all;

当mounted,open or colsed归档特定组:      alter system archive log group integer;

在打开或非一致性备份关闭的备份后,oracle推荐备份所有在备份期间产生的归档日志,并且在备份完成后备份控制文件。

我们在来理解一下归档日志的作用:

RMAN备份是一种物理的备份,它直接去读取数据块,因此rman是块级别的备份。从备份的那个时间点开始rman将锁定此刻的数据文件信息,也就是说只是备份数据文件到此刻的信息为之。

但是rman并不锁定数据文件的使用,也就是说rman的备份,不是数据库一致性状态的备份,由于rman备份是块级别的,它只备份控制文件中已经存在的数据块,同时数据库还在运行之中,那么就有可能会出现某些已经提交的操作,但是dbwn还没有写入数据文件,或者已经被rman备份过的数据块,又重新被修改,等等。

这些信息rman备份都不会记录,也是rman无法记录的。但是记录这些信息的是redo file,所以在rman完毕建议马上执行日志切换,然后备份归档日志,因为在rman恢复过程中,对于inconsistent backup,RMAN要靠这些已经归档的redo file信息恢复和保持数据库的一直状态。

由此,我们可以可以看出,其实归档文件中真正有用的是从rman备份开始到rman备份结束时刻系统产生的归档日志。同时rman在恢复的时候,restore database完毕后,会依次利用归档日志和联机日志进行完全恢复。此时利用的这些归档就是从rman备份开始到rman备份结束产生的归档日志。

因此备份归档日志是很必要的,当然联机日志也是必须的,这些日志保证了rman能够完全的恢复数据库。

4. 热备份和RMAN 在redo 上的区别:

关于热备份的一些知识见blog:

对 Oracle 备份与恢复 的补充说明

http://blog.csdn.net/tianlesoftware/archive/2010/06/04/5647494.aspx

热备份下 归档增加 的原因:

热备份的时候redo log会增长较快,归档较平时增多,是由于在begin backup之后,如果正在备份(也就是OS命令拷贝cp)的数据块恰好又在被用户修改(因为是热备份,用户可以操作),那么可能会产生split block的情况(split block被oracle认为是corrupt block),也就是说,一个Oracle Block可能包含多个OS Block, OS Level的拷贝可能正拷贝的是一个Oracle Block的一部分(比如Header),而另一部分(比如尾端)被用户更新,发生变化,这样导致一个Oracle Block内部的不一致(不是consistent version),可能出现一个数据块包含了几个不同版本的操作系统块,被称为Split Block。

注意:这里split block是Oracle Block不是OS Block,是因为一个Oracle Block中不同版本的OS Block才导致产生Split Oracle Block的。

Oracle处理Split block的方法是将整个当前Oracle split block(变更后的)写入online redo log中,恢复的时候如果发现datafile中某个Oracle Block中有不同版本(的OS Block),就从redo把这个变更后的镜像拷贝回来,在这个版本一致的镜像上开始恢复。 不是像原来那样只写入更新部分到redo log, 所以热备期间redo log会激增 。

通过以上面的分析,可以看出,如果用热备份,那么会产生大量的redo log。 因为热备份把不一致的内容全部写入了redo log。

而RMAN 备份允许不一致备份,那些不一致的数据块也会直接备份,但是,在这种情况下,必须通过应用归档文件,使数据块一直之后才能打开数据库。 所以RMAN 不会产生大量的redo,这也是RMAN的优点之一。

P S:

整理这篇文章是费了很多的脑细胞,因为理论的东西确实不好理解。 现在我把我对这块的理解整理了一下。 正确与否,还有待时间的考验。 因为随着时间的流逝,对Oracle的理解也在慢慢的变化。 以后会越来越清楚。 和 杭州恒生 这位朋友的讨论的收获就是加深了对 RMAN 数据块 这方面的理解。 也算是进步吧。 还是感觉做实验比较直观,按照文档一步一步下来,然后结果出来,正确,就大功完成了。 但理论这东西属于做学问,要花时间去理解,去研究。 费脑细胞啊….

------------------------------------------------------------------------------

Blog: http://blog.csdn.net/tianlesoftware

网上资源: http://tianlesoftware.download.csdn.net

相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1 群:62697716(满); DBA2 群:62697977(满)

DBA3 群:63306533;     聊天 群:40132017

转载于:https://www.cnblogs.com/hibernate315/archive/2010/08/10/2399215.html

关于 RMAN 备份 数据块 一致性的讨论相关推荐

  1. oracle数据块一致性检查的4种方法

    什么是数据块一致性? 每一个数据块头部都有一个"校验和"字段 当数据块被写回磁盘前,Oracle会重新计算这个校验和 并记录到这个字段,最终写回磁盘 下次数据块被读入内存时,Ora ...

  2. oracle rman ora19602,学习笔记:OracleRMAN备份入门 将RMAN备份数据放到nfs远程文件系统中...

    天萃荷净 rman通过nfs备份,记录一篇关于使用RMAN备份软件,将RMAN的备份结果集存放到远程的NFS文件系统中 1.RMAN挂载至nfs文件系统 [root@oracleplus tmp]# ...

  3. MySQL 怎么保证备份数据的一致性?

    为了数据安全,数据库需要定期备份,这个大家都懂,然而数据库备份的时候,最怕写操作,因为这个最容易导致数据的不一致,松哥举一个简单的例子大家来看下: 假设在数据库备份期间,有用户下单了,那么可能会出现如 ...

  4. rman备份(教程与案例)

    ORACLE备份策略 (ORACLE BACKUP STRATEGY) 第一章. 概要 1.了解什么是备份 2.了解备份的重要性 3.理解数据库的两种运行方式 4.理解不同的备份方式及其区别 5.了解 ...

  5. rman备份后为什么要同时备份归档日志

    今天在CU上看到有人问一个问题:rman备份后为什么要同时备份归档日志呢,既然rman是物理备份,所有数据已经都备份,再次备份归档日志何用? 思考了一下,认为有必要记录一下为什么要备份归档日志: 其实 ...

  6. oracle数据块坏,Oracle数据块损坏解决办法

    背景: 1.PDM(Windchill)系统 2.exp数据错误,没有rman备份数据 3.数据库trc文件报错 Dump file d:\oracle\admin\wind\udump\wind_o ...

  7. Oracle 11g 使用RMAN备份数据库

    使用Oracle自带的备份恢复工具RMAN(Recovery Manager)具有以下几种优势: 支持增量备份 能自动管理备份文件 自动化备份与恢复 备份的文件有效性检查 配置快闪恢复区(flash ...

  8. [20161031]rman备份与数据文件OS块.txt

    [20161031]rman备份与数据文件OS块.txt --每个数据文件都有一个OS块,位于数据文件的第1块(也是0块).通过bbed无法访问: BBED> set dba 7,0 BBED- ...

  9. ORACLE11g 没有控制文件如何通过rman备份恢复数据的详细实战过程

    1.副总裁需要裸恢复的严峻现实 集团总部的信息部负责人给我打电话说为了找一年前的记录,所以需要对一年前2015年5月1日的数据进行恢复.而2016年初因为进行迁移,所以有些文件可能丢失,手上只有rma ...

最新文章

  1. java string转bytebuf,如何将Java字符串转换为字节[]?
  2. vim在每行行首或行尾添加/删除内容
  3. Java的13个规范
  4. git每次操作都要输入账号密码 解决方案
  5. 多边形之间相交求交点的算法_路径规划算法总结
  6. 【渝粤教育】国家开放大学2018年春季 0529-22T高级英语阅读(1) 参考试题
  7. can't load apple.laf.AquaLookAndFeel (Ant in Eclipse can't find it
  8. linux自动化测试脚本,linux iperf3 一键自动化测试脚本
  9. 促销海报设计的套路你知道么? 看这里!
  10. 蓝桥杯 ALGO-89 算法训练 字符删除
  11. 计算机网络负载均衡图片,负载均衡计算机网络课程网.ppt
  12. java 类 引用数组对象_Java 方法重载与引用数组类型
  13. MVPArms官方快速组件化方案开源,来自5K star的信赖
  14. 西门子1200控制V90伺服,西门子1200通过PN通讯控制V90伺服,程序控制采用FB285功能块
  15. SQL server Date函数
  16. 音乐计算机曲谱狂妄之人,undertale狂妄之人简谱
  17. ABB机器人编程技巧:双工位预约程序
  18. 【计算机组成原理】实验1: 基本逻辑单元实验
  19. 德国电信疫情期间净赚9个亿
  20. 简易看盘软件-java

热门文章

  1. 【解决方法】你已从聊天服务器断开,正在尝试重新连接
  2. Gin 框架学习笔记(03)— 输出响应与渲染
  3. 2022-2028年中国橡胶密封制品行业市场研究及前瞻分析报告
  4. 2022-2028年中国PGA树脂行业全景调研及投资前景展望报
  5. CentOS下Docker 安装
  6. LeetCode简单题之有序数组中出现次数超过25%的元素
  7. 硬件delay评估表
  8. GPU上的基本线性代数
  9. Yolov1目标检测算法详细分析
  10. 2021年大数据Hive(十二):Hive综合案例!!!