[20150619]undo文件损坏或者丢失的恢复3

简介: [20150619]undo文件损坏或者丢失的恢复3.txt --实际上前面的测试是非常理想情况下的测试,真实的情况肯定比上面介绍的复杂。 --一般情况下,数据库异常关机,最容易出现的是在线redo损坏,一般通过隐含参数_allow_resetlogs_corruption跳过。

[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 rownumROWID                     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/

目录
相关文章
|
4月前
|
运维 Ubuntu Linux
备份以免丢失
备份安装docker-ce
|
Oracle 关系型数据库 数据库
|
Oracle 关系型数据库 数据库
|
SQL 监控 Oracle
【恢复】Redo日志文件丢失的恢复
第一章 Redo日志文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢失据的风险,强烈建议在条件允许的情况下,对Redo日志进行多路镜像。
2230 0
|
Oracle 关系型数据库 数据库
[20150619]undo文件损坏或者丢失的恢复1
[20150619]undo文件损坏或者丢失的恢复1.txt --昨天别人问一些undo文件损坏或者丢失的恢复,实际上如果正常关机,undo文件丢失,恢复是很容易的。
789 0
[20150619]undo文件损坏或者丢失的恢复2
[20150619]undo文件损坏或者丢失的恢复2.txt --昨天别人问一些undo文件损坏或者丢失的恢复,如果不正常关机,undo文件丢失,恢复与正常关机存在不同。
905 0

相关实验场景

更多