[20150619]undo檔案損壞或者丟失的恢復3

lfree發表於2015-06-19

[20150619]undo檔案損壞或者丟失的恢復3.txt

--實際上前面的測試是非常理想情況下的測試,真實的情況肯定比上面介紹的複雜。

--一般情況下,資料庫異常關機,最容易出現的是線上redo損壞,一般透過隱含引數_allow_resetlogs_corruption跳過。

SYS@test> @ &r/hide _allow_resetlogs_corruption
NAME                         DESCRIPTION                                       DEFAULT_VALUE  SESSION_VALUE  SYSTEM_VALUE
---------------------------- ------------------------------------------------- -------------- -------------- -------------
_allow_resetlogs_corruption  allow resetlogs even if it will cause corruption  TRUE           FALSE          FALSE

--如果在出現回滾段錯誤,透過修改引數_corrupted_rollback_segments,_offline_rollback_segments跳過一些回滾段。

--10g下一般很好確定,命名格式是:
像_SYSSMU1$ 格式 _SYSSMU$.

--而11g下加入了時間戳,在無法開啟資料庫的情況下,可以透過bvi或者bbed來確定。
--另外一般位置相對固定,只要找一個資料塊大小一樣的資料塊查詢sys.undo$(資料庫版本要一致)的rowid基本可以是那些。

--
SCOTT@test> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SCOTT@test> select rowid,us#,name from sys.undo$ where rownum<=1;
ROWID                     US# NAME
------------------ ---------- ----------------------------------------
AAAAAPAABAAAADhAAA          0 SYSTEM

SCOTT@test> @ lookup_rowid AAAAAPAABAAAADhAAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
        15          1        225          0 1,225                alter system dump datafile 1 block 225 ;

BBED> set dba 1,225
        DBA             0x004000e1 (4194529 1,225)

BBED> x /2rncnnnnnnnnnnnnnnnnncct rowdata
rowdata[0]                                  @862
----------
flag@862:  0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@863:  0x00
cols@864:    17

col    0[2] @865: 4
col   1[20] @868: _SYSSMU4_1665036189$
col    2[2] @889: 1
col    3[2] @892: 3
col    4[3] @895: 176
col    5[6] @899: 4103678170
col    6[2] @906: 2
col    7[4] @909: 34048
col    8[4] @914: 10126
col    9[1] @919: 0
col   10[2] @921: 3
col   11[2] @924: 2
col   12[0] @927: *NULL*
col   13[0] @928: *NULL*
col   14[0] @929: *NULL*
col   15[0] @930: *NULL*
col   16[2] @931: 2

rowdata[72]                                 @934
-----------
flag@934:  0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@935:  0x00
cols@936:    17

col    0[3] @937: 104
col   1[21] @941: _SYSSMU104_777408806$
col    2[2] @963: 1
col    3[2] @966: 10
col    4[3] @969: 176
col    5[6] @973: 3414864939
col    6[2] @980: 2
col    7[3] @983: 1024
col    8[3] @987: 657
col    9[1] @991: 0
col   10[2] @993: 2
col   11[2] @996: 5
col   12[0] @999: *NULL*
col   13[0] @1000: *NULL*
col   14[0] @1001: *NULL*
col   15[0] @1002: *NULL*
col   16[2] @1003: 2
....


--也可以使用bbvi編輯:

SCOTT@test> @bbvi     1        225
BVI_COMMAND
------------------------------------------------------------------------------------------
bvi -b 1843200 -s 8192 /u01/app/oracle11g/oradata/test/system01.dbf

--執行如下:
$ touch aa.txt
$ bvi -b 1843200 -s 81920 /u01/app/oracle11g/oradata/test/system01.dbf
:w aa.txt

--說明-s 長度加大一些,因為可能在許多資料塊中。

$ strings aa.txt | grep SYSSMU | uniq |head -10
_SYSSMU9_3043963034$
_SYSSMU3_2763804800$
_SYSSMU4_1665036189$
_SYSSMU104_777408806$
_SYSSMU103_9611014$
_SYSSMU102_1057122756$
_SYSSMU101_445156792$
_SYSSMU100_3478039479$
_SYSSMU99_2737214818$
_SYSSMU98_2332908142$

SYS@test> select rowid,us#,name from sys.undo$ where us#=3;

ROWID                     US# NAME
------------------ ---------- --------------------
AAAAAPAABAAAADhAAD          3 _SYSSMU3_2763804800$

SYS@test> select rowid,us#,name from sys.undo$ where us#=9;
ROWID                     US# NAME
------------------ ---------- --------------------
AAAAAPAABAAAADhAAJ          9 _SYSSMU9_3043963034$

--還是對上的。可以參考我以前寫的:
http://blog.itpub.net/267265/viewspace-1162543/

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

相關文章