ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle实验记录 (恢复-关于热备份)

oracle实验记录 (恢复-关于热备份)

原创 Linux操作系统 作者:fufuh2o 时间:2009-08-21 13:19:15 0 删除 编辑


断裂块:网上资料很多,基本情况就是 database open时,用OS 命令备份 datafile (host copy,host cp)
如果要复制的datafile比较大,那么这个过程可能持续几分钟 这之间就产生问题了,OS 操作复制的粒度

与oracle DBWN写操作的粒度不一样(oracle 操作粒度是oracle 数据块 )一般 系统比oracle粒度要小,

os 的copy 时 可能会得到某个block的第一部分,随后dbwn 写了整个block ,最后os 的copy得到块的剩

下部分,这样就产生了 '断裂' 块(OS 分2部分 2次写的 而写之中DBWN 写了整个块,等于os copy第一部

分写的块内容已经和datafile中不一样了) 出现了代表不同oracle block的两个部分 ,这样的block是无

用的

为了避免这个情况 oracle 采用alter tablespace(database) begin backup 设置为备份模式(产生一个

部分checkpoint 按照buffer cache中filequeue 将对应的dirty buffer写入datafile)
若此时更新buffer cache中的一个block(首次)那么会将真个完整的block image 写入redo(而不是 只将

变化写入 log buffer)这个block image是读一致的,在以后的恢复中还原datafile,若有任何断裂的

block 都会替换为从redo中愁绪的block的一致读image 对断裂块修复

问题来了:整个块的image 那么 redo会多,redo多swtich 多~~再往下就会有redo的一些event了(以后实

验会详细介绍)

rman可以解决rman 检测到dbwn在某个块复制时候对其进行了变更(block头的scn变化 rman容易检测到)

那么rman会尝试再次复制操作,知道得到该block的读一致映像

 

 


SQL> conn / as sysdba
Connected.
SQL> create table test (a char(1000),b char(1000));

Table created.

SQL> insert into test values('a','a');

1 row created.

SQL> insert into test values('b','b');

1 row created.

SQL> commit;

Commit complete.

SQL> select file#,block# from (select dbms_rowid.rowid_relative_fno(rowid) file#
,dbms_rowid.rowid_block_number(rowid) block# from test);

     FILE#     BLOCK#
---------- ----------
         1      57626
         1      57626

SQL> select * from sys.redo_size;

     VALUE
----------
     11540

SQL> alter tablespace system begin backup;

Tablespace altered.

SQL> update test set a='aa' ,b='aa' where a='a';

1 row updated.

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 CURRENT
         3 INACTIVE
         4 INACTIVE

SQL> alter system dump logfile 'E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG
';

System altered.
KTB Redo
op: 0x01  ver: 0x01 
op: F  xid:  0x0004.004.00000b7f    uba: 0x0080bb5a.0361.04
KDO Op code: IRP row dependencies Disabled
  xtype: XA flags: 0x00000000  bdba: 0x0040e11a  hdba: 0x0040e119
itli: 1  ispac: 0  maxfr: 4863
tabn: 0 slot: 0(0x0) size/delt: 2009
fb: --H-FL-- lb: 0x1  cc: 2
null: --
col  0: [1000]
 61 20 20 20 20 20
col  1: [1000]
 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
 20 20 20 20 20
fb: --H-FL-- lb: 0x1  cc: 2
null: --
col  0: [1000]
 62 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
 20 20 20 20 20 20
col  1: [1000]
 62 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
 20 20 20 20 20 20 20
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~redo中整块的 image

 

vect = 0
col  0: [1000]
 61 20 20 20 20 20 ~~~~~~~~~~~~~~old
col  1: [1000]
 61 20 20 20 20
col  0: [1000]
 61 61 20 20 20~~~~~~~~~~~~~~~~~~~~~NEW
col  1: [1000]
 61 61 20 20

 

 


SQL> update test set a='bb' ,b='bb' where a='b';

1 row updated.
SQL> alter system dump logfile 'E:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG
';

System altered.

~~~~~~~~~~~~~~~~~~没有产生新的block image   只有修改记录new,old

col  1: [1000]
 62 20 20
col  0: [1000]
 62 20 20 20 20

col  0: [1000]
 62 62 20 20
col  1: [1000]
 62 62 20 20

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12020513/viewspace-612827/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    182
  • 访问量
    427049