基于scn备份解决dg归档丢失的方法论

当主备同步中断了,备库想快一点恢复,偏偏这个时候归档太多恢复不过来或者说需要的归档直接丢了,有些人可能会选择重新搭建备库。如果库小的话还是可以的,但是如果主库比较大可能耗费的时间会很久,而且容易出一些问题。单单是全库备份恢复这个时间就不会短,更何况中间还会涉及到很多东西。

那么我们今天就是来聊聊有没有什么更好的办法来处理这种情况。因为这种情况还是比较常见的,至少我遇到过好几次了。

这里我们回顾一下dg的三种同步模式;

1.最大保护模式

这种保护模式是为了确保主库故障时,不会发生数据丢失。要提供这种级别的保护,恢复所需的重做数据必须在事务提交之前,同时写到本地联机重做日志和至少一个备用数据库上的备重做日志。若如果主库无法写重做流到备库,主库将会关闭。

2.最大可用模式

提供了可能的最高级别的数据保护,而不用与主数据库的可用性相折中。

与最大保护模式的区分

与最大保护模式相同:在恢复所需的重做数据,必须在事务提交之前同时写到本地联机重做日志和至少一个备用数据库上的备重做日志。

与最大保护模式不相同:如果故障导致主数据库无法写重做流到异地备库重做日志时,主数据库不会关闭,在没有达到net_timeout之前主库会hang住,但是并不是shutdown。而后主数据库以最大性能模式运行直到故障消除,并且解决所有重做日志文件的中断。当所有中断解决之后,主数据库自动继续以最大可用性模式运行。

这种模式确保如果主数据库故障,但是只有当第二次故障没有阻止完整的重做数据集从主数据库发送到至少一个备用数据库时,不发生数据丢失。

3.最大性能模式

这种保护模式(默认)提供了可能的最高级别的数据保护,而不影响主数据库的性能。这是通过允许事务在恢复该事务所需重做日志在写到本地联机重做日志后,可以立即提交而实现的。

主数据库的重做数据流也写到至少一个备用数据库,但是那个重做流相对于创建重做数据的事务是异步导入的,就不用 LGWR SYNC了,而之前两种模式都要用LGWR SYNC。

当所用的网络连接有足够的带宽,这种模式提供了近似于最大可用性模式的数据保护级别,并且对数据库性能的影响最小。

最大保护和最大可用性模式需要备库重做日志文件配置在配置中至少一个备用数据库上

为了保证主库不受影响,至少到目前为止我接触的生产环境的dg都是最大性能模式。但是这种环境会出现一种情况。由于某种原因,当备库出了一些故障、网络不通或者其他情况,导致主备同步中断,主库的在线日志或者归档没办法正常传输到备库。这样主库产生一个又一个的归档,但是这些归档都没办法传到备库。当然我们在恢复了出现的问题之后会从断了的地方重新传到备库以完成同步。

不过这中间可能会有一些情况,比如:我们本地的归档空间有限,主备的同步一时半会恢复不了,如果一直留着归档,当归档空间满了就会影响主库正常运行。不得不删除一部分。也有可能主备恢复时间过长,产生了很多很多归档,将它们传到备库应用会消耗很多很多时间。

理解原理

当主备同步中断了,备库想快一点恢复,偏偏这个时候归档太多恢复不过来或者说需要的归档直接丢了。这个时候我们该怎么办?

其实我们这次的题目已经提出了解决方法,就是利用基于scn的备份去恢复我们的备库,从而绕开中间过多或者丢失的归档。

那么基于scn备份究竟是什么意思呢?

我们都知道我们传统的dg都是属于物理dg,下面是物理dg的简单解释:

物理备用数据库:以基于块对块的主数据库同样的磁盘数据库结构,物理备用数据库物理等同于主数据库。

特性:

  1. 数据库的每一个块的内容包括块的逻辑位置都和主库完全一致
  2. DG通过执行重做应用,维护物理备用数据库
  3. 物理STANDBY 打开flashbackdatabase后可以完全读写打开
  4. 物理备用数据库使用通过oracle恢复机制,从归档重做日志文件或直接从备系统上的备重做日志文件用用重做数据来恢复。
  5. 物理备用数据库可用于执行备份
  6. 物理备用数据库使用重做应用技术使用低级别的恢复机制应用更改,绕过了所有SQL基本代码层,因此应用海量重做数据最有效,性能大于逻辑备份。

大家看了物理备库的简单解释之后需要注意的是,其实主备保持一致是不是就是主备的每一个块内容都一样?数据库一般的块是8K,如果每个8K都一样,是不是就意味着两边数据库内容是一样的?

假如当前备库应用到了100号归档,这个时候主备的网络断了,主库一直生成归档生成到了150号,这期间一直没有传递归档到备库。当我们恢复了主备的网络,主库生成的101到150这50个归档都传送到了备库。

那么此时,备库应用完这50个归档是不是备库就和主库保持一致了,都是150号归档的时候块的内容?如果我们将101到150这一段时间块的改变找出来,在备库上面进行修改,这样是不是就等同于应用了这50个归档?

我们单独拿一个块来说,假如100号归档的时候数据库内这个块记录了一列的值为5,150号归档的时候数据库内这个块记录这一行的值为6。当我们将这个5改成6时,是否就意味着这个块完成了101-150号归档的所有改变?

反过来说,假如100号归档的时候数据库内这个块记录了一列的值为5,150号归档的时候数据库内这个块记录这一行的值还是为5那么我们就可以不修改他,他还是完成了101-150号归档的所有改变。

所以到这里我们应该明白了,找到这段时间块的改变,全部应用到备库,我们就不用去恢复那些过多的或者缺失的归档。

如何完成一次基于scn的恢复?

所以回到我们的方法,我们找到备库端数据文件中最低的scn,然后在主库去基于这个scn进行备份,这个时候rman回去扫描整个主库的块,如果块内的scn小于备库端数据文件中最低的scn,则证明这个块从备库应用到的时间点到现在是没有改变的,就忽略掉这个块。

如果块内的scn大于备库端数据文件中最低的scn证明在这个阶段这个快进行了修改,就记录下这个块的内容。等拿到备库端去恢复的时候就替换这个块的内容。

当然我们是有官方文档的支撑的,并不是我们凭空想象出来的处理方法,这里提供官方mos的id,供大家自行去查看:

Steps to perform for Rolling Forward aPhysical Standby Database using RMAN Incremental Backup. (Doc ID 836986.1)

我们需要注意的是这个方法适用的版本在10.2以后:

Oracle Database - Enterprise Edition - Version 10.2.0.1 to later

操作演示

1、查找备库数据文件最低的scn


select CHECKPOINT_CHANGE#  fromv$datafile_header  order by 1;

select CHECKPOINT_CHANGE#  fromv$database  order by 1;

2、执行增量备份

rman target /
run
{configure controlfile autobackup on;
sql 'alter system switch logfile';
BACKUP INCREMENTAL FROM SCN 15078013867424 DATABASE FORMAT '/IC_%d_%u/'tag 'FORSTANDBY';
}

3、恢复控制文件

restore standby controlfile ;

4、恢复数据库

recover database;

原文发布时间为:2017-11-7

本文作者: 黄堋

本文来自合作伙伴“数据和云”,了解相关信息可以关注“数据和云”微信公众号

时间: 2024-11-16 01:27:42

基于scn备份解决dg归档丢失的方法论的相关文章

【故障处理】DG归档丢失的恢复

[故障处理]DG归档丢失的恢复 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 主库丢失归档,物理DG的恢复 ②  其他常用SQL语句     Tips:         ① 若文章代码格式有错乱,推荐使用QQ.搜狗或360浏览器,也可以下载pdf格式的文档来查看,pdf文档下载地址:http://yunpan.cn/cdEQedhCs2

数据库-oracle10数据恢复问题,有原来全备份,有归档日志

问题描述 oracle10数据恢复问题,有原来全备份,有归档日志 背景 1.停电造成数据库启动异常,startup ,提示 system01.dbf 有问题,拷贝整个数据文件是,提示REDO01.LOG,无法复制,其他文件可以,好像是REDO01.LOG,损坏了. 2.用一起3月前备份的数据库,覆盖原来数据文件目录,将原来数据文件夹重命名.然后进行启动,结果还启动了,中间也做了recover datebase 等命令,但是日数据最新前是1月份的. 3.现在情况是有归档日志文件从去年到现在的,有1

备份不等于归档,在智能归档中备份资产!

内容备份与内容归档之间有何不同?这是否真的很重要?人们经常混用这两个词,但这些技术在如何保护和保存内容上存在关键的不同之处,会对媒体工作流产生重大影响,包括影响其节约存储空间的潜力. 备份应用把数据复制到次要地点,以便在发生硬件故障或其它数据丢失的情况下恢复内容.高效的备份战略提供快速恢复,使数据恢复到内容的原始地点.另一方面,归档把内容存储到次要地点,以长期保留内容或节约存储空间.对于归档内容,人们假设内容不可能改变,因为它是永不改变的"固定内容"或已完成项目的一部分. 传统上,归档

基于SCN的不完全恢复

        有几天没写了,呵呵!这几天比较忙,赶着做关于一个桌面搜索的软件.做了基于取消的不完全恢复和基于SCN的不完全恢复,一直没写成博客,现在可以补一下了. 先介绍一下:基于SCN 的不完全恢复是指将数据库恢复到某个特定的SCN 点的状态.当用户误执行了 drop table 或truncate table 之后,如果我们知道在这些操作点的SCN 的值,那么就可以使用基于SCN的不完全恢复方法了. 实验步骤如下: 1)先获取数据库当前的SCN值,模拟误删除实验表t1. SQL> sele

没有备份、只有归档日志,如何恢复数据文件?

备份|恢复|数据 没有备份.只有归档日志,如何恢复数据文件?系统环境: 1.操作系统:Windows 2000 Server,机器内存128M2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版3.安装路径:C:\ORACLE模拟现象: 可通过重建数据文件来恢复,前提是归档日志文件保存完整先将数据库设置为归档模式SQL*Plusconn system/manager--创建实验表空间create tablespace test datafile'c:\test.ora'

XP系统下如何解决“系统还原”丢失的问题

XP系统下如何解决"系统还原"丢失的问题   开启系统还原选项服务 单击"开始"菜单,单击"控制面板",在"控制面板"里双击"管理工具",接着再双击"服务" 在右窗格中找到"System Restore Service"服务,双击打开 进入"常规"选项卡界面,确保启动类型为"自动",服务状态为"已启动"

python基于右递归解决八皇后问题的方法

  本文实例讲述了python基于右递归解决八皇后问题的方法.分享给大家供大家参考.具体分析如下: 凡是线性回溯都可以归结为右递归的形式,也即是二叉树,因此对于只要求一个解的问题,采用右递归实现的程序要比回溯法要优美的多. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 def Test(queen,n): '''这个就不用说了吧,就是检验第n(下标,0-7)行皇后的位置是否合理''' q=que

oracle10g 怎么从某一时间点或某一scn备份还原。求指教

问题描述 oracle10g 怎么从某一时间点或某一scn备份还原.求指教 10C oracle10g数据库迁移, 数据量太大, 做了一次全量备份后, 后续的数据变化,通过增量的方式(scn或时间点)的备份还原,怎么做. 解决方案 http://blog.chinaunix.net/uid-647720-id-2690402.htmlhttp://blog.csdn.net/fujianianhua/article/details/8182068 解决方案二: http://jingyan.ba

基于Jquery.history解决ajax的前进后退问题_AJAX相关

以下内容是关于Jquery.history解决ajax的前进后退问题,具体详情请看下文. 本文的前提是基于后台的,所以这里不会考虑seo的问题.同时,基于后台的管理系统,也不需要被收藏,所以也不会考虑刷新的这种类似直接敲网址的情况!!! 这里使用的是html5中的history.state 来解决. 网上已经有了js的开源解决方案pushState.详见pjax 但是这个方案不适合我的项目(后台项目),尤其是主要的方法有点不够用. 我使用的是  jquery.history.js  可以参考这个