[20150601]rman备份出现坏块.txt

简介: [20150601]rman备份出现坏块.txt --昨天看链接: http://www.jydba.net/磁盘损坏造成RMAN备份文件有坏块的恢复案例/ --提到如果备份片存在坏块的恢复案例,他使用的参数,我自己从来没见过.

[20150601]rman备份出现坏块.txt

--昨天看链接:
http://www.jydba.net/磁盘损坏造成RMAN备份文件有坏块的恢复案例/

--提到如果备份片存在坏块的恢复案例,他使用的参数,我自己从来没见过.
alter system set event='19548 trace name context forever', '19549 trace name context forever' scope=spfile;

-- oerr ora 19548,oerr ora 19548 都没有查询到信息.

还是通过例子做一个测试:

1.建立测试环境:
SYS@test> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- ----------------------------------------------------------------
x86_64/Linux 2.4.xx            10.2.0.4.0     Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

CREATE TABLESPACE MSSM DATAFILE
  '/mnt/ramdisk/test/mssm01.dbf' SIZE 16256K AUTOEXTEND OFF
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT MANUAL
FLASHBACK ON;

--随便在这个表空间上建立了2张表.
create table deptx tablespace mssm as select  * from scott.dept ;

2.备份表空间mssm.
SYS@test> alter  tablespace mssm read only ;
Tablespace altered.

RMAN> backup tablespace mssm format '/home/oracle/mssm/mssm_20150601.bak';
Starting backup at 2015-06-01 09:29:11
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=139 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00006 name=/mnt/ramdisk/test/mssm01.dbf
channel ORA_DISK_1: starting piece 1 at 2015-06-01 09:29:11
channel ORA_DISK_1: finished piece 1 at 2015-06-01 09:29:12
piece handle=/home/oracle/mssm/mssm_20150601.bak tag=TAG20150601T092911 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2015-06-01 09:29:13

$  cp /mnt/ramdisk/test/mssm01.dbf /home/oracle/mssm/mssm01.dbf_20150601

--做一个"友善"的破坏,将备份文件mssm_20150601.bak的"YORK"换成"GGGG",我使用bvi软件.

3.删除mssm01.dbf,测试恢复是否可行:

SYS@test> alter database datafile 6 offline ;
Database altered.

--改名原来的文件:
$  cd /mnt/ramdisk/test/
$  mv mssm01.dbf mssm01.dbf_xxx

--开始恢复看看:
RMAN> restore datafile 6;
Starting restore at 2015-06-01 09:35:52
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=142 devtype=DISK

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00006 to /mnt/ramdisk/test/mssm01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/mssm/mssm_20150601.bak
ORA-19870: error reading backup piece /home/oracle/mssm/mssm_20150601.bak
ORA-19612: datafile 6 not restored due to missing or corrupt data
failover to previous backup

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 06/01/2015 09:35:53
RMAN-06026: some targets not found - aborting restore
RMAN-06023: no backup or copy of datafile 6 found to restore

--可以发现无法恢复数据文件6.

4.设置参数:
SYS@test> alter system set event='19548 trace name context forever', '19549 trace name context forever' scope=spfile;
System altered.

--重启数据库,继续恢复看看.

SYS@test> startup mount
ORACLE instance started.

Total System Global Area    473956352 bytes
Fixed Size                    2084776 bytes
Variable Size               260046936 bytes
Database Buffers            201326592 bytes
Redo Buffers                 10498048 bytes
Database mounted.

RMAN> restore datafile 6;
Starting restore at 2015-06-01 09:41:47
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=153 devtype=DISK
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00006 to /mnt/ramdisk/test/mssm01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/mssm/mssm_20150601.bak
channel ORA_DISK_1: restored backup piece 1
piece handle=/home/oracle/mssm/mssm_20150601.bak tag=TAG20150601T092911
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02
Finished restore at 2015-06-01 09:41:50

--这次可以恢复成功!

SYS@test> alter database open read only;
Database altered.

SYS@test> select * from scott.deptx;
select * from scott.deptx
                    *
ERROR at line 1:
ORA-00376: file 6 cannot be read at this time
ORA-01110: data file 6: '/mnt/ramdisk/test/mssm01.dbf'

SYS@test> alter database datafile 6 online ;
Database altered.

SYS@test> select * from scott.deptx;
select * from scott.deptx
                    *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block # 10)
ORA-01110: data file 6: '/mnt/ramdisk/test/mssm01.dbf'
--可以发现恢复后,读取表scott.deptx存在错误.

$  dbv file=/mnt/ramdisk/test/mssm01.dbf blocksize=8192
DBVERIFY: Release 10.2.0.4.0 - Production on Mon Jun 1 09:55:44 2015
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
DBVERIFY - Verification starting : FILE = /mnt/ramdisk/test/mssm01.dbf
Page 10 is marked corrupt
Corrupt block relative dba: 0x0180000a (file 6, block 10)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0180000a
last change scn: 0x0002.f445ace5 seq: 0x2 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xace50602
check value in block header: 0x893e
computed block checksum: 0x40b
DBVERIFY - Verification complete
Total Pages Examined         : 2032
Total Pages Processed (Data) : 1
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 1
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 1970
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 59
Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0
Highest block SCN            : 4101920976 (2.4101920976)


5.使用bbed观察:
BBED> set dba 6,10
        DBA             0x0180000a (25165834 6,10)


BBED> x /4rncc rowdata
rowdata[0]                                  @8096
----------
flag@8096: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8097: 0x00
cols@8098:    3

col    0[2] @8099: 10
col   1[10] @8102: ACCOUNTING
col    2[8] @8113: NEW GGGG

rowdata[26]                                 @8122
-----------
flag@8122: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8123: 0x00
cols@8124:    3

col    0[2] @8125: 20
col    1[8] @8128: RESEARCH
col    2[6] @8137: DALLAS

rowdata[48]                                 @8144
-----------
flag@8144: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8145: 0x00
cols@8146:    3

col    0[2] @8147: 30
col    1[5] @8150: SALES
col    2[7] @8156: CHICAGO

rowdata[68]                                 @8164
-----------
flag@8164: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8165: 0x02
cols@8166:    3

col    0[2] @8167: 40
col   1[10] @8170: OPERATIONS
col    2[6] @8181: BOSTON

--可以发现读取的记录确实存在一个字段存在col    2[8] @8113: NEW GGGG.
BBED> set dba 6,10
        DBA             0x0180000a (25165834 6,10)

BBED> sum
Check value for File 6, Block 10:
current = 0x893e, required = 0x8d35

BBED> sum apply
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
Check value for File 6, Block 10:
current = 0x8d35, required = 0x8d35

SYS@test> alter system flush buffer_cache;
System altered.

SYS@test> select * from scott.deptx;
      DEPTNO DNAME          LOC
------------ -------------- -------------
          10 ACCOUNTING     NEW GGGG
          20 RESEARCH       DALLAS
          30 SALES          CHICAGO
          40 OPERATIONS     BOSTON

--总结:
--备份是恢复最后1个环节,如果备份集存在"瑕疵",可以通过参数来先恢复,尽可能的减少损失.
alter system set event='19548 trace name context forever', '19549 trace name context forever' scope=spfile;
--当然如果还有备份,可以不要从这个备份集来恢复.

目录
相关文章
|
Oracle 关系型数据库
[20180423]关于rman备份的问题2.txt
[20180423]关于rman备份的问题2.txt --//别人问的问题,rman备份放在哪里的问题. SCOTT@book> @ ver1 PORT_STRING                    VERSION        BANNER --...
908 0
|
Oracle 关系型数据库 OLAP
[20171123]rman备份与数据文件变化6.txt
[20171123]rman备份与数据文件变化6.txt --//想象一下,如果备份文件时间很长,而这个时候数据文件大小发生了变化,oracle的备份如何解决这个问题呢? --//去年已经测试了建立备份集的情况,一直想做一次image copy的测试,一直脱,主要原因自己不想做这个测试.
778 0
|
Oracle 关系型数据库 数据库管理
[20161101]rman备份与数据文件变化7.txt
[20161101]rman备份与数据文件变化7.txt --//想象一下,如果备份文件时间很长,而这个时候数据文件大小发生了变化,oracle的备份如何解决这个问题呢? --//去年已经测试了建立备份集的情况,一直想做一次image copy的测试,一直脱,主要原因自己不想做这个测试.
1173 0
|
关系型数据库 Linux 数据库
[20171116]11GR2控制文件自动备份.txt
20171116]11GR2控制文件自动备份.txt SYS@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ---------------------------...
941 0
|
Oracle 关系型数据库 Linux
[20161212]备份archivelog.txt
[20161212]备份archivelog.txt --许多人都知道如果执行backup database plus archivelog;实际上是先执行如下: 1.
713 0
|
Oracle 关系型数据库 数据库管理
[20161102]rman备份与数据文件变化5.txt
[20161102]rman备份与数据文件变化5.txt --想象一下,如果备份文件时间很长,而这个时候数据文件大小发生了变化,oracle的备份如何解决这个问题呢? --前面我已经做了增大数据文件,参考链接:http://blog.itpub.net/267265/viewspace-2127386/ --这次测试减少数据文件大小看看。
701 0
|
Oracle 关系型数据库 数据库管理
[20161031]rman备份与数据文件变化3.txt
[20161031]rman备份与数据文件变化3.txt --想象一下,如果备份文件时间很长,而这个时候数据文件大小发生了变化,oracle的备份如何解决这个问题呢? --前面我已经做了增大数据文件,参考链接:http://blog.itpub.net/267265/viewspace-2127386/ --这次测试减少数据文件大小看看。
743 0
|
Oracle 关系型数据库 数据库
[20161101]rman备份与数据文件变化4.txt
[20161101]rman备份与数据文件变化4.txt --想象一下,如果备份文件时间很长,而这个时候数据文件大小发生了变化,oracle的备份如何解决这个问题呢? --前面我已经做了增大数据文件,参考链接:http://blog.itpub.net/267265/viewspace-2127386/ --这次测试减少数据文件大小看看。
938 0
|
Oracle 关系型数据库 数据库管理
[20161031]rman备份与数据文件变化2.txt
[20161031]rman备份与数据文件变化2.txt --想象一下,如果备份文件时间很长,而这个时候数据文件大小发生了变化,oracle的备份如何解决这个问题呢? 1.
912 0
|
Oracle 关系型数据库 数据库
[20160721]rman与undo表空间备份.txt
[20160721]rman与undo表空间备份.txt --//UNDO表空间主要用于存储前镜像数据,这些数据在回滚以及恢复过程中可能被用到。 --//一般生产数据库的UNDO表空间可能会变得非常巨大,甚至包括多个数据文件,而备份完整的UNDO数据文件在恢复时一般可能用到的比 --//例很小。
831 0