[20161118]rman备份的疑问2.txt

[20161118]rman备份的疑问2.txt

--这个是我前几天做测试时遇到的疑问,不知道为什么rman 备份要修改数据块的dba地址。
--我在itpub上也问了这个问题,链接http://www.itpub.net/thread-2071504-1-1.html,可惜没有人解答。

--具体细节不清楚,读取数据文件然后重新编码组织数据,将kcbh.rdba_kcbh的后2位放入tailchk中,设置spare3_kcbh=0x0001,
--也许为了区分备份与数据文件,当然还有别的目的,再做一些测试:

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

CREATE TABLESPACE SUGAR DATAFILE
  '/mnt/ramdisk/book/sugar01.dbf' SIZE 40M AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

SCOTT@book> create table t1  (id number,name varchar2(20)) tablespace sugar;
Table created.

--打开2个session插入不同的记录:
insert into t1 values(1,'A1B2C3D4E5');
commit ;

--另外会话:
insert into t1 values(2,'F6G7H8I9J0');
commit ;
alter system checkpoint ;

SCOTT@book> select rowid,t1.* from t1;
ROWID                      ID NAME
------------------ ---------- --------------------
AAAVvZAAGAAAACGAAA          1 A1B2C3D4E5
AAAVvZAAGAAAACHAAA          2 F6G7H8I9J0

SCOTT@book> @ &r/rowid AAAVvZAAGAAAACGAAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     89049          6        134          0  0x1800086           6,134                alter system dump datafile 6 block 134 ;

SCOTT@book> @ &r/rowid AAAVvZAAGAAAACHAAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     89049          6        135          0  0x1800087           6,135                alter system dump datafile 6 block 135 ;

--这样可以实现插入不同的块。

2.备份数据文件。
RMAN> backup datafile 6 format '/u01/backup/d6_a.bak' ;

Starting backup at 2016-11-17 11:40:11
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=35 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=/mnt/ramdisk/book/sugar01.dbf
channel ORA_DISK_1: starting piece 1 at 2016-11-17 11:40:12
channel ORA_DISK_1: finished piece 1 at 2016-11-17 11:40:13
piece handle=/u01/backup/d6_a.bak tag=TAG20161117T114012 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2016-11-17 11:40:13

$ strings -td /u01/backup/d6_a.bak| egrep 'A1B2C3D4E5|F6G7H8I9J0'
1114098 A1B2C3D4E5
1122290 F6G7H8I9J0

--1114098/8192=135.998291015625
--1122290/8192=136.998291015625

BBED> p filename '/u01/backup/d6_a.bak' block 135 kcbh.rdba_kcbh
ub4 rdba_kcbh                               @4        0x01800087

BBED> p filename '/u01/backup/d6_a.bak' block 136 kcbh.rdba_kcbh
ub4 rdba_kcbh                               @4        0x01800088

BBED> set dba 0x01800087
        DBA             0x01800087 (25165959 6,135)

BBED> set dba 0x01800088
        DBA             0x01800088 (25165960 6,136)

--现在是不一致的(与前面对照)。

3.修改数据块spare3_kcbh=0x0001看看:

SCOTT@book> alter tablespace SUGAR offline;
Tablespace altered.

BBED> p dba 6,134 spare3_kcbh
ub2 spare3_kcbh                             @18       0x0000

BBED> p filename '/u01/backup/d6_a.bak' block 135 spare3_kcbh
ub2 spare3_kcbh                             @18       0x0001

--前次提到备份修改spare3_kcbh=0x0001.我修改数据块看看。

BBED> assign dba 6,134 spare3_kcbh=0x0001
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
ub2 spare3_kcbh                             @18       0x0001

BBED> sum
Check value for File 6, Block 134:
current = 0xace3, required = 0xace2

BBED> sum apply dba 6,134
Check value for File 6, Block 134:
current = 0xace2, required = 0xace2

BBED> verify
DBVERIFY - Verification starting
FILE = /mnt/ramdisk/book/sugar01.dbf
BLOCK = 134

Block 134 is corrupt
Corrupt block relative dba: 0x01800086 (file 0, block 134)
Bad header found during verification
Data in bad block:
type: 6 format: 2 rdba: 0x01800086
last change scn: 0x0000.0065f43a seq: 0x1 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 从这里看出这些在某种情况下具有特殊含义。
consistency value in tail: 0xf43a0601
check value in block header: 0xace2
computed block checksum: 0x0
DBVERIFY - Verification complete
Total Blocks Examined         : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing   (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing   (Index): 0
Total Blocks Empty            : 0
Total Blocks Marked Corrupt   : 1
Total Blocks Influx           : 0
Message 531 not found;  product=RDBMS; facility=BBED

--可以发现数据块根本不能设置这个值,恢复回来。

BBED> assign dba 6,134 spare3_kcbh=0x0000
ub2 spare3_kcbh                             @18       0x0000

BBED> sum apply dba 6,134
Check value for File 6, Block 134:
current = 0xace3, required = 0xace3

BBED> verify
DBVERIFY - Verification starting
FILE = /mnt/ramdisk/book/sugar01.dbf
BLOCK = 134
DBVERIFY - Verification complete
Total Blocks Examined         : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing   (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing   (Index): 0
Total Blocks Empty            : 0
Total Blocks Marked Corrupt   : 0
Total Blocks Influx           : 0
Message 531 not found;  product=RDBMS; facility=BBED

4.做一个无聊的测试,实现2个块对调,必须重新编码,测试自己的理解是否正确。

SCOTT@book> alter tablespace SUGAR online;
Tablespace altered.

SCOTT@book> select rowid,t1.* from t1;
ROWID                      ID NAME
------------------ ---------- --------------------
AAAVvZAAGAAAACGAAA          1 A1B2C3D4E5
AAAVvZAAGAAAACHAAA          2 F6G7H8I9J0

SCOTT@book> alter tablespace SUGAR offline;
Tablespace altered.

--先交换
bvi -b 1105920 -s 8192 /u01/backup/d6_a.bak => 另存为 135.bin
bvi -b 1114112 -s 8192 /u01/backup/d6_a.bak => 另存为 136.bin

dd if=135.bin of=/u01/backup/d6_a.bak seek=136 bs=8192 count=1 conv=notrunc
dd if=136.bin of=/u01/backup/d6_a.bak seek=135 bs=8192 count=1 conv=notrunc

2.bbed修改相关信息:
BBED> p filename  '/u01/backup/d6_a.bak' block 135 rdba_kcbh
ub4 rdba_kcbh                               @4        0x01800088

BBED> p filename  '/u01/backup/d6_a.bak' block 136 rdba_kcbh
ub4 rdba_kcbh                               @4        0x01800087

BBED> p filename  '/u01/backup/d6_a.bak' block 135 tailchk
ub4 tailchk                                 @8188     0xf4400687

BBED> p filename  '/u01/backup/d6_a.bak' block 136 tailchk
ub4 tailchk                                 @8188     0xf43a0686

--修改如下:
BBED> assign filename  '/u01/backup/d6_a.bak' block 135 rdba_kcbh=0x01800087
ub4 rdba_kcbh                               @4        0x01800087

BBED> assign filename  '/u01/backup/d6_a.bak' block 136 rdba_kcbh=0x01800088
ub4 rdba_kcbh                               @4        0x01800088

BBED> modify /x 0x86 filename  '/u01/backup/d6_a.bak' block 135 offset 8188
File: /u01/backup/d6_a.bak (0)
Block: 135                  Offsets: 8188 to 8191    Dba:0x00000000
---------------------------------------------------------------------
860640f4
<64 bytes per line>

BBED> modify /x 0x87 filename  '/u01/backup/d6_a.bak' block 136 offset 8188
File: /u01/backup/d6_a.bak (0)
Block: 136                   Offsets: 8188 to 8191    Dba:0x00000000
----------------------------------------------------------------------
87063af4
<64 bytes per line>

BBED> sum  apply filename  '/u01/backup/d6_a.bak' block 135
Check value for File 0, Block 135:
current = 0xa596, required = 0xa596

BBED> sum  apply filename  '/u01/backup/d6_a.bak' block 136
Check value for File 0, Block 136:
current = 0xac6a, required = 0xac6a

RMAN> validate backupset 87;
Starting validate at 2016-11-17 15:46:39
using channel ORA_DISK_1
channel ORA_DISK_1: starting validation of datafile backup set
channel ORA_DISK_1: reading from backup piece /u01/backup/d6_a.bak
channel ORA_DISK_1: piece handle=/u01/backup/d6_a.bak tag=TAG20161117T114012
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
Finished validate at 2016-11-17 15:46:40

RMAN> restore tablespace sugar;
Starting restore at 2016-11-17 15:47:21
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00006 to /mnt/ramdisk/book/sugar01.dbf
channel ORA_DISK_1: reading from backup piece /u01/backup/d6_a.bak
channel ORA_DISK_1: piece handle=/u01/backup/d6_a.bak tag=TAG20161117T114012
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 2016-11-17 15:47:22

RMAN> recover tablespace sugar;
Starting recover at 2016-11-17 15:47:41
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 2016-11-17 15:47:41

SCOTT@book> alter tablespace SUGAR online;
Tablespace altered.

SCOTT@book> select rowid,t1.* from t1;
ROWID                      ID NAME
------------------ ---------- --------------------
AAAVvZAAGAAAACGAAA          2 F6G7H8I9J0
AAAVvZAAGAAAACHAAA          1 A1B2C3D4E5

--对比前面实现了2个数据块对调,也验证我的判断是对的。

时间: 2024-07-31 09:59:17

[20161118]rman备份的疑问2.txt的相关文章

[20161114]rman备份的疑问.txt

[20161114]rman备份的疑问.txt --这个是我前几天做测试时遇到的疑问,不知道为什么rman 备份要修改数据块的dba地址. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- ---------------------------------------------------

[20160523]rman备份与检查点2.txt

[20160523]rman备份与检查点2.txt --写过几篇关于检查点的文章,测试看看如果rman做备份时是否写检查点. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING         VERSION        BANNER ------------------- -------------- ---------------------------------------------------------------------------- x86

[20160523]rman备份与检查点3.txt

[20160523]rman备份与检查点3.txt --从前面的测试可以发现: --1.通过以上信息可以确定备份文件会写检查点. --2.而且备份文件是先写检查点,再做备份. --我这里就产生1个疑问,假设某个数据文件备份时间很长,这样数据文件的某个数据块的scn可能大于文件头的CHECKPOINT_CHANGE#.当我 --们恢复使用不完全恢复到某个时间点或者SCN,应该使用那个备份文件呢?做一个测试来说明问题. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRIN

[20160524]rman备份与检查点4.txt

[20160524]rman备份与检查点4.txt --链接: http://blog.itpub.net/267265/viewspace-2105221/ http://blog.itpub.net/267265/viewspace-2105223/ --昨晚仔细思考,重复测试看看,使用新的控制文件是否可以恢复.感觉我的问题在于我做了catalog注册了备份文件时丢失某些信息.重新 --测试看看. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING      

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

[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

[20171130]关于rman备份疑问.txt

[20171130]关于rman备份疑问.txt --//前面测试太乱,重新做一些rman as copy相关测试. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- --------------------------------------------------------------

[20171204]关于rman备份疑问4.txt

[20171204]关于rman备份疑问4.txt --//上午排除我几天在做rman测试的疑问. --//链接如下:http://blog.itpub.net/267265/viewspace-2148029/ --//顺便测试备份集包含5个数据文件的情况(本来不想做,还是做看看),验证自己的判断是否正确. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER -----------

[20161101]rman备份与数据文件变化7.txt

[20161101]rman备份与数据文件变化7.txt --//想象一下,如果备份文件时间很长,而这个时候数据文件大小发生了变化,oracle的备份如何解决这个问题呢? --//去年已经测试了建立备份集的情况,一直想做一次image copy的测试,一直脱,主要原因自己不想做这个测试.... --//而且当时的测试很乱,自己主要一边做一边想.... --//链接: http://blog.itpub.net/267265/viewspace-2127386/ http://blog.itpub

[20171031]rman备份压缩模式.txt

[20171031]rman备份压缩模式.txt --//测试rman备份压缩模式,那种效果好,我记忆里选择medium在备份时间和备份文件大小综合考虑最佳. --//还是通过脚本测试: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- ---------------------------