说说碰到这个问题的背景。
使用NBU调脚本对oracle进行备份。脚本如下:
RUN {
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';
SEND 'NB_ORA_CLIENT=lzl-linux,NB_ORA_SERV=nbu-server';
BACKUP
    $BACKUP_TYPE
    SKIP INACCESSIBLE
    TAG hot_db_bk_level0
    FILESPERSET 1                #(为了模拟大库的长时间备份,将此参数调为1,原因后面解释)
    # recommended format
    FORMAT 'bk_%s_%p_%t'
    DATABASE;
    sql 'alter system archive log current';
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
# backup all archive logs
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';
SEND 'NB_ORA_CLIENT=lzl-linux,NB_ORA_SERV=nbu-server';
BACKUP
   filesperset 1
   FORMAT 'al_%s_%p_%t'
   ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
#
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
SEND 'NB_ORA_CLIENT=lzl-linux,NB_ORA_SERV=nbu-server';
BACKUP
    # recommended format
    FORMAT 'cntrl_%s_%p_%t'
    CURRENT CONTROLFILE;
BACKUP FORMAT 'contrl' CURRENT CONTROLFILE;
RELEASE CHANNEL ch00;
}
按照常规方法做异机恢复,recover database报错:
Starting recover at 23-MAR-11
starting media recovery
Oracle Error:
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01152: file 2 was not restored from a sufficiently old backup
ORA-01110: data file 2: '/u01/oradata/test/undotbs01.dbf'
released channel: ch00
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/23/2011 21:55:47
RMAN-06053: unable to perform. media recovery because of missing log
RMAN-06025: no backup of log thread 1 seq 52 lowscn 554211 found to restore
RMAN-06025: no backup of log thread 1 seq 51 lowscn 554193 found to restore
RMAN-06025: no backup of log thread 1 seq 50 lowscn 554178 found to restore
RMAN-06025: no backup of log thread 1 seq 49 lowscn 554176 found to restore
RMAN-06025: no backup of log thread 1 seq 48 lowscn 554173 found to restore
RMAN-06025: no backup of log thread 1 seq 47 lowscn 554170 found to restore
RMAN-06025: no backup of log thread 1 seq 46 lowscn 554151 found to restore
下面说说关于这个报错。按照字面意思,file 2 was not restored from a sufficiently old backup ,查了metalink,说是数据文件的scn比控制文件新造成的。我觉得这个ORACLE官方解释存在错误。也就是报错原因跟数据文件的版本压根没关系,我做了如下验证:
SQL> select max(checkpoint_change#) from v$datafile_header; (数据文件最大的现有SCN)
MAX(CHECKPOINT_CHANGE#)
-----------------------
                 554055
SQL>  select checkpoint_change#,current_scn from v$database (控制文件scn)

CHECKPOINT_CHANGE# CURRENT_SCN
------------------ -----------
            554193           0

RMAN> list backup of archivelog all;

List of Backup Sets
===================
………………
61      256.00K    SBT_TAPE    00:00:47     23-MAR-11      
        BP Key: 61   Status: AVAILABLE  Compressed: NO  Tag: TAG20110323T211447
        Handle: al_61_1_746572899   Media:
  List of Archived Logs in backup set 61
  Thrd Seq     Low SCN    Low Time  Next SCN   Next Time
  ---- ------- ---------- --------- ---------- ---------
  1    45      554130     23-MAR-11 554151     23-MAR-11

可以看到,备份下来最新的日志,是45号日志组,scn 554130- 554151
总结:数据文件最大scn:554055
            控制文件scn:554193。
下面说说我是如何重现这个错的:在备份执行的时候,定时地切换日志,模拟数据库备份时间长,期间发生日志切换的动作。
SQL> alter system switch logfile;
System altered.
SQL> select sequence# from v$log;
SEQUENCE#
----------
        50
        51
        49
SQL> select first_change# from v$log;
FIRST_CHANGE#
-------------
       554178
       554193
       554176
可以看到,日志已经跑到51号了,但RMAN脚本跑起来,只记录开始备份日志开始那个时间点,有那些日志需要备份,而备份日志过程中,产生的新日志,ORACLE根本不管。在这种情况下,做恢复,必然报ORA-1152错。
研究透彻了报错原因,要启动数据库很简单,刚才看到了,备份下来的最新日志:是45号日志组,scn 554130- 554151 。只要指定恢复到scn:,就能按常规的resetlogs打开。
验证:
RMAN> run{
2> allocate channel ch00 type 'SBT_TAPE';
3> SEND 'NB_ORA_CLIENT=lzl-linux,NB_ORA_SERV=nbu-server';
4> recover database until scn 554151;
5> alter database open resetlogs;
6> release channel ch00;}
allocated channel: ch00
…………
media recovery complete, elapsed time: 00:00:00
Finished recover at 23-MAR-11
database opened
完成。
回头看看报这个错的原因,其实跟NBU的脚本有关。所有备份的数据类型,写在一个RUN块中,造成备份开始(或开始备份归档以后),oracle统计需要备份的日志文件,未将备份过程中产生的日志算进去,造成日志缺失。信息不一致。(这块我不是很确定)。
归根结底,就是备份数据库的时候,库太繁忙(或者备份时间过长),造成日志 切换了。2条思路:1调整备份窗口,空闲时间备份。2我通过以下办法可以解决,由于备份的那个库不算太繁忙(日志切换不快),但备份时间比较长。在第一个 run块后,再加一个单独备份归档的run块:
RUN {
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';
SEND 'NB_ORA_CLIENT=lzl-linux,NB_ORA_SERV=nbu-server';
sql 'alter system archive log current';
BACKUP
   filesperset 10
   FORMAT 'al_%s_%p_%t'
   ARCHIVELOG ALL DELETE INPUT;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
}
由于之前已经把当天大部分日志都备掉了。我这里再备一次,就我备份2小时内发生的日志切换,10个文件一打包,2通道跑,对于不很繁忙的库,相信不会在这期间切日志了。我就不信你丫再报错。
测试:跟先前测试一样,时刻监控rman输出,在第一个run块备份时,多切几次日志。
在第二个run块,不要切日志。(这样配置在不繁忙的库,很难发生日志切换了)
使用第二个run块调的控制文件备份进行恢复。
经测试,这样备份跟小库情况一样,直接resetlogs就可以打开库。库的状态为第二个run块开始执行的状态。

本文转自:http://www.itpub.net/thread-1410747-1-1.html

彻底解决rman恢复碰到ora-01152错的更多相关文章

  1. 12c RAC 用Rman 恢复到异机单实例

    准备工作 原服务器软件部署:Redhat 6.6 + Oracle 12.2.0.1 rac Oracle12c单实例安装 1.创建恢复服务器,设置大于原库数据大小的磁盘容量.设置相同的服务器主机名参 ...

  2. oracle rman恢复数据库 方式恢复到异地数据库

    目的:从某个环境中,获取相关文件,放到异地机器使用rman 恢复.   情况说明:XX系统使用的是oracle数据库,现已从服务器拉下来相关文件,依靠这些文件来早本地的测试机上恢复数据库,方便进行数据 ...

  3. RAC 之 RMAN 恢复

    RAC 下的RMAN 讲究的是备份和还原的策略要一致.备份策略的不同,会导致备份结果的分步不同,进而影响恢复的策略和步骤.一般情况下,恢复策略和备份策略必须是对应的.如果备份策略进行了修改,那么恢复也 ...

  4. RAC之RMAN恢复

    之前整理的RMAN 有关还原的文章: RMAN 系列(五) ---- RMAN 还原 与 恢复 http://blog.csdn.net/tianlesoftware/archive/2010/07/ ...

  5. 利用RMAN恢复整个数据库

    利用RMAN恢复整个数据库案例一 适合场合:恢复的目录一致,同时备份的过程中有归档日志 恢复的数据库目录和down机的数据库一致,还有一个就是RMAN备份的时候已经备份了归档日志. 备份脚本: run ...

  6. 解决ThinkPHP关闭调试模式时报错的问题汇总

    解决ThinkPHP关闭调试模式时报错的问题汇总 案例一: 最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 "页面调试错误,无法找开页 ...

  7. Oracle RMAN 恢复数据库到不同主机(二)

    我们在recover database时报一个错误: RMAN-06054: media recovery requesting unknown archived log for thread 1 w ...

  8. 从操作系统rm数据文件后,利用句柄与rman恢复的过程。(已验证)

    以下操作代码的流程是配的,但是相应的文件名,啥的   必须改动. 故障现象 数据文件被误删除 具体情况 接到反馈说,数据文件data20120512.dbf被误删除,需要恢复 数据库提示 ERROR ...

  9. rman恢复方案和oracle异机恢复

    这篇文章主要介绍了rman恢复方案和oracle异机恢复,需要的朋友可以参考下 注:①恢复的前提是已经做好备份②完全恢复数据库是数据库遇到故障,在恢复时候没有丢失任何已经提交事物数据的恢复不完全恢复数 ...

随机推荐

  1. PLSQL碰到pls-00103的错误解决办法

    CREATE OR REPLACE PACKAGE PKG_SHOW_CUST_DETAILS AS PROCEDURE SHOW_CUST_DETAILS( myArg VARCHAR2);END ...

  2. 学android: android-studio从main开始

    android-studio 创建hello world很容易,一路next创建blank activity,再接好手机或者avd(andorid virtual device)就好了.  但是对于我 ...

  3. Hyper-V安装Oracle Linux6_4 Oracle db 12c并使用rman做异机恢复

    本文记录在Windows Server 2012 R2上安装Oracle Enterprise Linux 6.4以及使用RMAN进行进行异机恢复的过程. Windows服务器增加Hyper-V功能 ...

  4. 2-Spark高级数据分析-第二章 用Scala和Spark进行数据分析

    数据清洗时数据科学项目的第一步,往往也是最重要的一步. 本章主要做数据统计(总数.最大值.最小值.平均值.标准偏差)和判断记录匹配程度. Spark编程模型 编写Spark程序通常包括一系列相关步骤: ...

  5. iOS开发之APP上线

    APP 上线有两种途径: 一种是 Xcode->openDeveloperTool->applicationLoader,这种打开后登陆appleID就可以选取并且交付您的应用程序了.这种 ...

  6. c# 函数

    1.输入三个数,求最大的数. 2.输入一个数,求1~n的和. 3.求n的阶乘. 4.输入一个小于等于100的数,判断是否是100,还是小于10,还是两位数.

  7. 计算机网络自学之路------IP协议(2)

    之前忘记说了,这些内容都是边看视频边写的,视频出自西安交通大学. 本期说的是IP分组转发的内容,里面详细介绍了IP协议跟ARP协议,最后再给出一个例子,说明这两个协议在网络中传输的具体过程. 1)Ip ...

  8. 关于js中空值比较和传值的问题

    昨天写导出功能时,有个条件审核状态,其中一个审核状态的key为0,我也是醉了. 然后我注意到这方面的问题,在网上找了找,我的理解可能有点问题.但是目前也就是这样了,以后在学习吧! 正文: js中各种类 ...

  9. 数组map()方法和filter()方法及字符串startsWith(anotherString)和endsWith(anotherString)方法

    map方法的作用不难理解,"映射"嘛,也就是原数组被"映射"成对应新数组 var newArr = arr.map(function() {});例子: var ...

  10. Linux运维入门到高级全套常用要点

    Linux运维入门到高级全套常用要点 目 录 1. Linux 入门篇................................................................. ...