oracle實驗記錄 (恢復-關於熱備份)

fufuh2o發表於2009-08-21


斷裂塊:網上資料很多,基本情況就是 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章