RMAN进行基于数据块的恢复

从ORACLE9i开始,rman支持基于数据库的恢复,这一功能有很大的好处,既不影响业务,甚至不影响有坏块的数据文件,恢复可以是在线恢复。但是恢复是完全恢复,所以要求完整的备份。

下面测试:

  1. 对数据库进行完整备份

    Rman>backup database;

  2. 破坏数据

    参看日志《RMAN进行基于数据块的恢复》

  3. 使用rman验证数据文件

    RMAN> backup validate datafile 5;

    Starting backup at 29-AUG-14

    using target database control file instead of recovery catalog

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=159 devtype=DISK

    allocated channel: ORA_DISK_2

    channel ORA_DISK_2: sid=139 devtype=DISK

    channel ORA_DISK_1: starting full datafile backupset

    channel ORA_DISK_1: specifying datafile(s) in backupset

    input datafile fno=00005 name=/opt/oracle/oradata/orcla/xzsp.dbf

    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07

    Finished backup at 29-AUG-14

    警告日志和数据库中都会记录损坏的数据,如下

    SQL> select * from v$database_block_corruption ;

    FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO

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

    5 49316 1 0 CORRUPT

  4. 通过备份基于数据快级的恢复

    RMAN> blockrecover datafile 5 block 49316 from backupset;

    Starting blockrecover at 29-AUG-14

    using channel ORA_DISK_1

    using channel ORA_DISK_2

    ?

    channel ORA_DISK_1: restoring block(s)

    channel ORA_DISK_1: specifying block(s) to restore from backup set

    restoring blocks of datafile 00005

    channel ORA_DISK_1: reading from backup piece /opt/oracle/flash_recovery_area1/ORCLA/backupset/2014_08_29/o1_mf_nnndf_TAG20140829T032828_9zz0px68_.bkp

    channel ORA_DISK_1: restored block(s) from backup piece 1

    piece handle=/opt/oracle/flash_recovery_area1/ORCLA/backupset/2014_08_29/o1_mf_nnndf_TAG20140829T032828_9zz0px68_.bkp tag=TAG20140829T032828

    channel ORA_DISK_1: block restore complete, elapsed time: 00:00:26

    ?

    starting media recovery

    ?

    archive log thread 1 sequence 5 is already on disk as file /opt/oracle/flash_recovery_area1/ORCLA/archivelog/2014_08_29/o1_mf_1_5_9zz2mqwo_.arc

    archive log thread 1 sequence 6 is already on disk as file /opt/oracle/flash_recovery_area1/ORCLA/archivelog/2014_08_29/o1_mf_1_6_9zz2v3jj_.arc

    archive log thread 1 sequence 7 is already on disk as file /opt/oracle/flash_recovery_area1/ORCLA/archivelog/2014_08_29/o1_mf_1_7_9zz3hfff_.arc

    media recovery complete, elapsed time: 00:00:01

    Finished blockrecover at 29-AUG-14

  5. 清楚坏块记录

    SQL> select * from v$database_block_corruption ;

    FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO

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

    5 49316 1 0 CORRUPT

    RMAN> backup validate datafile 5;

    Starting backup at 29-AUG-14

    using channel ORA_DISK_1

    using channel ORA_DISK_2

    channel ORA_DISK_1: starting full datafile backupset

    channel ORA_DISK_1: specifying datafile(s) in backupset

    input datafile fno=00005 name=/opt/oracle/oradata/orcla/xzsp.dbf

    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03

    Finished backup at 29-AUG-14

    SQL> select * from v$database_block_corruption ;

    ?

    no rows selected

    ?

    注意:

    但有些情况下,BLOCKRECOVER未必可以恢复得了:

    [[email protected] datafile]$ sqlplus mayp/mayp

    SQL*Plus: Release 10.1.0.5.0 – Production on Mon Jul 14 17:08:06 2008

    Copyright (c) 1982, 2005, Oracle. All rights reserved.

    Connected to:

    Oracle Database 10g Enterprise Edition Release 10.1.0.5.0 – Production

    With the Partitioning, OLAP and Data Mining options

    SQL> select count(*) from mssm;

    select count(*) from mssm

    *

    ERROR at line 1:

    ORA-01578: ORACLE data block corrupted (file # 5, block # 9)

    ORA-01110: data file 5: ‘/data/mayp/MAYP/datafile/o1_mf_mssm_4789hznr_.dbf‘

    [[email protected] datafile]$ rman target /

    Recovery Manager: Release 10.1.0.5.0 – Production

    Copyright (c) 1995, 2004, Oracle. All rights reserved.

    connected to target database: MAYP (DBID=412172232)

    RMAN> blockrecover datafile 5 block 9;

    Starting blockrecover at 14-JUL-08

    using target database controlfile instead of recovery catalog

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=378 devtype=DISK

    RMAN-00571: ===========================================================

    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

    RMAN-00571: ===========================================================

    RMAN-03002: failure of blockrecover command at 07/14/2008 17:08:37

    ORA-01455: converting column overflows integer datatype

    RMAN-06010: error while looking up datafile: 5

    这个块损坏已经严重破坏了数据的存放规律,发生了逻辑损坏,所以blockrecover没办法恢复,必须首先restore这个文件然后通过recvoer命令进行恢复.

    通过常规方法恢复这个错误:

    RMAN> sql ‘alter database datafile 5 offline‘;

    sql statement: alter database datafile 5 offline

    RMAN> restore datafile 5;

    Starting restore at 14-JUL-08

    using channel ORA_DISK_1

    channel ORA_DISK_1: starting datafile backupset restore

    channel ORA_DISK_1: specifying datafile(s) to restore from backup set

    restoring datafile 00005 to /data/mayp/MAYP/datafile/o1_mf_mssm_4789hznr_.dbf

    channel ORA_DISK_1: restored backup piece 1

    piece handle=/home/oracle/product/10.2/dbs/full_2_MAYP.rman tag=TAG20080714T152854

    channel ORA_DISK_1: restore complete

    Finished restore at 14-JUL-08

    RMAN> recover datafile 5;

    Starting recover at 14-JUL-08

    using channel ORA_DISK_1

    starting media recovery

    media recovery complete

    Finished recover at 14-JUL-08

    RMAN> sql ‘alter database datafile 5 online‘;

    sql statement: alter database datafile 5 online

    RMAN> exit

    BLOCKRECOVER 的使用限制:

    1、数据库必须在ARCHIVELOG模式下才可以使用这个功能;

    2、数据库必须是mount或open状态;

    3、不能对一个offline的datafile进行BLOCKRECOVER;

    4、blcokrecover需要通过一个full backups 恢复datra block,不能使用incremental backups进行错误恢复;

    5、blockrecover不能跨越archivelog丢失或损坏,也就是说在恢复的过程中,不能丢失需要的归档日志;

    6、blockrecover不能恢复逻辑坏块,逻辑坏块必须首先restore损坏的数据文件,然后在用recover进行恢复;

    7、blockrecvoer不能恢复file header block.(block=1).

时间: 2024-07-30 11:19:00

RMAN进行基于数据块的恢复的相关文章

【转】基于RMAN实现坏块介质恢复(blockrecover)

本文转自:乐沙弥的世界 对于物理损坏的数据块,我们可以通过RMAN块介质恢复(BLOCK MEDIA RECOVERY)功能来完成受损块的恢复,而不需要恢复整个数据库或所有文件来修复这些少量受损的数据块.恢复整个数据库或数据文件那不是大炮用来打蚊子,有点不值得!但前提条件是你得有一个可用的RMAN备份存在,因此,无论何时备份就是一切.本文演示了产生坏块即使用RMAN实现坏块恢复的全过程. 1.创建演示环境 SQL> select * from v$version where rownum<2;

Oracle数据库坏块的恢复

模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发生数据丢失.对于被有备份的数据库 发生数据块损坏,可能会发生数据的丢失或数据不丢失,这要根据发生坏块的所在的对象决定的,如索引块发生损坏,数据 就不会丢失,重建索引就可以了,发生数据丢失的多发生在表或分区表数据块上. 1.不丢数据的恢复方法 ---使用rman工具的 blockrecover blo

Oracle Rman修复逻辑坏块

RMAN 实现数据块恢复试用Rman可以实现数据块级的数据恢复,在传统恢复手段中即某个数据文件的一个数据块被损坏,就造成整个数据文件无法试用,此时必须通过备份恢复整个数据文件.显然这样的方法会会时间较长,而RMAN实现块级恢复,如果某个数据文件的数据损坏,通过数据文件的完整备份就可以恢复数据块. 案例:数据库是一个单实例ORACLE数据库,该库的总大小有700G.存储设备使用华为存储,备份设备使用希捷3T的移动硬盘.该数据库无DG无OGG.备份策略为每周六0点全库备份,周三0点1级差异备份其余时

iOS开发 - 数据归档与恢复 NSKeyedArchiver

归档与恢复归档 归档,英文Archiver['ɑrk?v?],这里指的是将OC的对象存储为一个文件或者网络上的一个数据块. 恢复归档.英文UnArchiver,指的是将一个来自文件或网络的归档数据块恢复成内存中的一个OC对象. 归档和恢复主要用于对自己定义类型对象进行存储.在程序暂停或关闭前保存自己定义数据.在程序又一次恢复状态或启动后读取存储的自己定义数据. 支持归档和恢复的类必须实现NSCoding协议,再由NSKeyedArchiver和NSKeyedUnarchiver类进行转换.将对象

Oracle 学习之RMAN(十三)恢复实战--数据块修复

在很多情况下,数据库只是某个数据文件的些许数据块发生损坏.这种情况,我们当然可是使用数据库恢复或者数据文件恢复的方式来解决问题.但是有点高射炮打蚊子的感觉.幸好RMAN提供了块级别的恢复.下面我们来演示一下. 1. 创建一个表空间,大小小一点. SQL> conn / as sysdba Connected. SQL> create tablespace tbs_blkerr datafile '/u01/app/oracle/oradata/devdb/blkerr01.dbf' size 

Oracle数据块损坏的恢复实例

测试环境:11.2.0.4 1.构建数据块损坏的测试环境 2.有备份:常规恢复坏块 3.无备份:跳过坏块 1.构建数据块损坏的测试环境 1.1 创建测试表 --Create Table t_test conn jingyu/jingyu drop table t_test purge; create table t_test (id number, name char(2000)); --Insert data insert into t_test values(1, 'alfred 1');

Oracle 数据块损坏与恢复具体解释

1.什么是块损坏: 所谓损坏的数据块,是指块没有採用可识别的 Oracle 格式,或者其内容在内部不一致. 通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle 数据库将损坏的块标识为"逻辑损坏"或"介质损坏". 假设是逻辑损坏,则是 Oracle 内部错误. Oracle 数据库检測到不一致之后,就将逻辑损坏的块标记为损坏.假设是介质损坏,则是块格式不对:从磁盘读取的块不包括有意义的信息. 通过恢复块,或者删除包括损坏块的数据库对象(或同一时候採用这两种

恢复数据块坏块

2014.7.22研究恢复数据库坏块: Oracle调用标准C的系统函数,对数据块进行读写操作,因此,坏块是有可能由以下几种原因产生: 硬件的I/O错误 操作系统的I/O错误或缓冲问题 内存或paging问题 磁盘修复工具 一个数据文件的一部分正在被覆盖 Oracle试图访问一个未被格式化的系统块失败 数据文件部分溢出 Oracle或者操作系统的bug 遇到"ORA-01578:ORACLE data block corrupted"错误 处理方法:1.rman的recover命令可以

Oracle 数据块损坏与恢复详解

1.什么是块损坏: 所谓损坏的数据块,是指块没有采用可识别的 Oracle 格式,或者其内容在内部不一致.通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle 数据库将损坏的块标识为"逻辑损坏"或"介质损坏".如果是逻辑损坏,则是 Oracle 内部错误.Oracle 数据库检测到不一致之后,就将逻辑损坏的块标记为损坏.如果是介质损坏,则是块格式不正确:从磁盘读取的块不包含有意义的信息. 通过恢复块,或者删除包含损坏块的数据库对象(或同时采用这两种方式),