[20170310]關於線上日誌與歸檔3.txt

lfree發表於2017-03-10

[20170310]關於線上日誌與歸檔3.txt

--//當日志寫滿了,或者執行手工了切換,再或者rman備份時有時也會觸發日誌切換:
alter system switch logfile ;
alter system archive log current ;

--//前面已經探究日誌檔案的OS塊(第0塊)以及日誌檔案頭塊(第1塊).剩下日誌記錄了
--//本文簡單探究日誌歸檔是如何儲存的.探查日誌檔案的記錄.

1.環境:
--//啟動到mount狀態.

SYS@book> @ &r/ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SYS@book> @ &r/logfile
GROUP# STATUS     TYPE       MEMBER                          IS_ GROUP# THREAD# SEQUENCE#       BYTES BLOCKSIZE MEMBERS ARC STATUS     FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
------ ---------- ---------- ------------------------------- --- ------ ------- --------- ----------- --------- ------- --- ---------- ------------- ------------------- ------------ -------------------
     1            ONLINE     /mnt/ramdisk/book/redo01.log    NO       1       1       695    52428800       512       1 YES INACTIVE     13276910949 2017-02-28 14:40:12  13276931102 2017-03-09 10:01:48
     2            ONLINE     /mnt/ramdisk/book/redo02.log    NO       2       1       696    52428800       512       1 YES INACTIVE     13276931102 2017-03-09 10:01:48  13276931986 2017-03-09 10:02:36
     3            ONLINE     /mnt/ramdisk/book/redo03.log    NO       3       1       697    52428800       512       1 NO  CURRENT      13276931986 2017-03-09 10:02:36 2.814750E+14
     4            STANDBY    /mnt/ramdisk/book/redostb01.log NO
     5            STANDBY    /mnt/ramdisk/book/redostb02.log NO
     6            STANDBY    /mnt/ramdisk/book/redostb03.log NO
     7            STANDBY    /mnt/ramdisk/book/redostb04.log NO
7 rows selected.

--//僅僅拿seq#=696 來研究.

$ ls -l /mnt/ramdisk/book/redo02.log /u01/app/oracle/archivelog/book/1_696_896605872.dbf
-rw-r----- 1 oracle oinstall 52429312 2017-03-09 10:02:36 /mnt/ramdisk/book/redo02.log
-rw-r----- 1 oracle oinstall  1626112 2017-03-09 10:02:38 /u01/app/oracle/archivelog/book/1_696_896605872.dbf

--//前面我們探查了日誌檔案的OS塊.下面將繼續探究日誌的記錄從第2塊開始.

2.先取第2塊看看:

$ dd if=/u01/app/oracle/archivelog/book/1_696_896605872.dbf bs=512 count=1 skip=2 2>/dev/null | md5sum
d8c6fc00e84b8eff93ecad9ff87627c7  -

$ dd if=/mnt/ramdisk/book/redo02.log bs=512 count=1 skip=2 2>/dev/null | md5sum
d8c6fc00e84b8eff93ecad9ff87627c7  -

--//md5一樣,哈哈下面就基本就是原始的複製了.也就是不做任何修改.
--//1626112/512=3176,跳過前面2塊,就是3174塊.

$ dd if=/u01/app/oracle/archivelog/book/1_696_896605872.dbf bs=512  skip=2 2>/dev/null | md5sum
62f6d618e02ed3e7ba50ed68138fe440  -

$ dd if=/u01/app/oracle/archivelog/book/1_696_896605872.dbf bs=512 count=3174 skip=2 2>/dev/null | md5sum
62f6d618e02ed3e7ba50ed68138fe440  -

$ dd if=/mnt/ramdisk/book/redo02.log bs=512 count=3174 skip=2 2>/dev/null|  md5sum
62f6d618e02ed3e7ba50ed68138fe440  -

--//可以看出第2塊的redo記錄開始就是簡單的複製.

3.這樣就可以產生一個恢復思路,假設redo損壞,我該日誌已經歸檔日誌檔案,可以利用這個檔案重新構造線上日誌:
--//A.第0塊修改就是記錄塊數量. 偏移0x18~0x1B處.
  實際上只要大小一樣,檔案頭可以使用別的好的檔案標頭檔案替換.

$ dd if=/mnt/ramdisk/book/redo01.log bs=512 count=1  2>/dev/null|  md5sum
1e958fb94196354fc1d7a650b43d728b  -

$ dd if=/mnt/ramdisk/book/redo02.log bs=512 count=1  2>/dev/null|  md5sum
1e958fb94196354fc1d7a650b43d728b  -

$ dd if=/mnt/ramdisk/book/redo03.log bs=512 count=1  2>/dev/null|  md5sum
1e958fb94196354fc1d7a650b43d728b  -

$ dd if=/mnt/ramdisk/book/redostb01.log bs=512 count=1  2>/dev/null|  md5sum
1e958fb94196354fc1d7a650b43d728b  -

--//你可以發現os塊,md5都是一樣(因為日誌檔案大小一樣)

B.第1塊我感覺不改也可以透過.

C.日誌記錄就是簡單複製,根本不需要改動.剩下就是空白塊如何填充.

$ ls -l /mnt/ramdisk/book/redo02.log /u01/app/oracle/archivelog/book/1_696_896605872.dbf
-rw-r----- 1 oracle oinstall 52429312 2017-03-09 10:02:36 /mnt/ramdisk/book/redo02.log
-rw-r----- 1 oracle oinstall  1626112 2017-03-09 10:02:38 /u01/app/oracle/archivelog/book/1_696_896605872.dbf

--//52429312 - 1626112=50803200,還有50803200/512=99225塊需要 補充.主要這個如何實現.
--//直接使用空白是否可行,留下下次測試....

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2135095/,如需轉載,請註明出處,否則將追究法律責任。

相關文章