[20181212]关于truncate reuse storage.txt

来源:这里教程网 时间:2026-03-03 12:44:11 作者:

[20181212]关于truncate reuse storage.txt --//前一阵子,尝试了truncate的恢复,链接如下: http://blog.itpub.net/267265/viewspace-2156936/ http://blog.itpub.net/267265/viewspace-2157144/ --//一种方式是尝试修改相关数据段的数据库的段号实现的.另外是修改数据字典,来恢复truncate表. --//注意truncate还是使用reuse storage选项,存储空间不会回收. --//理论将如果能修改高水位标识,就不用执行执行里面扫描代码完成数据的恢复,而且那种方法很慢. --//今天探究一下truncate reuse storage主要改动什么? 1.环境: SCOTT@book> @ ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 2.建立测试环境: SCOTT@book> create table t as select * from all_objects ; Table created. SCOTT@book> select object_id,data_object_id from dba_objects where owner=user and object_name='T';  OBJECT_ID DATA_OBJECT_ID ---------- --------------      90551          90551 SCOTT@book> select count(*) from t;   COUNT(*) ----------      84769 SCOTT@book> column PARTITION_NAME noprint SCOTT@book> select * from dba_extents where owner=user and segment_name='T'; OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID FILE_ID BLOCK_ID   BYTES BLOCKS RELATIVE_FNO ----- ------------ ------------ --------------- --------- ------- -------- ------- ------ ------------ SCOTT T            TABLE        USERS                   0       4      520   65536      8            4 SCOTT T            TABLE        USERS                   1       4      528   65536      8            4 SCOTT T            TABLE        USERS                   2       4      536   65536      8            4 SCOTT T            TABLE        USERS                   3       4      544   65536      8            4 SCOTT T            TABLE        USERS                   4       4      552   65536      8            4 SCOTT T            TABLE        USERS                   5       4      560   65536      8            4 SCOTT T            TABLE        USERS                   6       4      672   65536      8            4 SCOTT T            TABLE        USERS                   7       4      680   65536      8            4 SCOTT T            TABLE        USERS                   8       4      688   65536      8            4 SCOTT T            TABLE        USERS                   9       4      696   65536      8            4 SCOTT T            TABLE        USERS                  10       4      704   65536      8            4 SCOTT T            TABLE        USERS                  11       4      712   65536      8            4 SCOTT T            TABLE        USERS                  12       4      720   65536      8            4 SCOTT T            TABLE        USERS                  13       4      728   65536      8            4 SCOTT T            TABLE        USERS                  14       4      736   65536      8            4 SCOTT T            TABLE        USERS                  15       4      744   65536      8            4 SCOTT T            TABLE        USERS                  16       4      768 1048576    128            4 SCOTT T            TABLE        USERS                  17       4      896 1048576    128            4 SCOTT T            TABLE        USERS                  18       4     1024 1048576    128            4 SCOTT T            TABLE        USERS                  19       4     1152 1048576    128            4 SCOTT T            TABLE        USERS                  20       4     1280 1048576    128            4 SCOTT T            TABLE        USERS                  21       4     1408 1048576    128            4 SCOTT T            TABLE        USERS                  22       4     1536 1048576    128            4 SCOTT T            TABLE        USERS                  23       4     1664 1048576    128            4 SCOTT T            TABLE        USERS                  24       4     1792 1048576    128            4 25 rows selected.   SCOTT@book> select SEGMENT_NAME,HEADER_FILE,HEADER_BLOCK from dba_segments where owner=user and segment_name='T'; SEGMENT_NAME         HEADER_FILE HEADER_BLOCK -------------------- ----------- ------------ T                              4          522 SCOTT@book> alter system checkpoint ; System altered. SCOTT@book> alter system dump datafile 4 block 522; System altered. 3.看看段头信息:   Extent Header:: spare1: 0      spare2: 0      #extents: 25     #blocks: 1280                   last map  0x00000000  #maps: 0      offset: 2716       Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128   #blocks in seg. hdr's freelists: 0   #blocks below: 1239   mapblk  0x00000000  offset: 24                    Unlocked   --------------------------------------------------------   Low HighWater Mark :       Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128   #blocks in seg. hdr's freelists: 0   #blocks below: 1239   mapblk  0x00000000  offset: 24   Level 1 BMB for High HWM block: 0x01000701   Level 1 BMB for Low HWM block: 0x01000701   --------------------------------------------------------   Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0   L2 Array start offset:  0x00001434   First Level 3 BMB:  0x00000000   L2 Hint for inserts:  0x01000209   Last Level 1 BMB:  0x01000701   Last Level II BMB:  0x01000209   Last Level III BMB:  0x00000000      Map Header:: next  0x00000000  #extents: 25   obj#: 90551  flag: 0x10000000   Inc # 0   Extent Map   -----------------------------------------------------------------    0x01000208  length: 8    0x01000210  length: 8    0x01000218  length: 8    0x01000220  length: 8    0x01000228  length: 8    0x01000230  length: 8    0x010002a0  length: 8    0x010002a8  length: 8    0x010002b0  length: 8    0x010002b8  length: 8    0x010002c0  length: 8    0x010002c8  length: 8    0x010002d0  length: 8    0x010002d8  length: 8    0x010002e0  length: 8    0x010002e8  length: 8    0x01000300  length: 128    0x01000380  length: 128    0x01000400  length: 128    0x01000480  length: 128    0x01000500  length: 128    0x01000580  length: 128    0x01000600  length: 128    0x01000680  length: 128    0x01000700  length: 128   Auxillary Map   --------------------------------------------------------    Extent 0     :  L1 dba:  0x01000208 Data dba:  0x0100020b    Extent 1     :  L1 dba:  0x01000208 Data dba:  0x01000210    Extent 2     :  L1 dba:  0x01000218 Data dba:  0x01000219    Extent 3     :  L1 dba:  0x01000218 Data dba:  0x01000220    Extent 4     :  L1 dba:  0x01000228 Data dba:  0x01000229    Extent 5     :  L1 dba:  0x01000228 Data dba:  0x01000230    Extent 6     :  L1 dba:  0x010002a0 Data dba:  0x010002a1    Extent 7     :  L1 dba:  0x010002a0 Data dba:  0x010002a8    Extent 8     :  L1 dba:  0x010002b0 Data dba:  0x010002b1    Extent 9     :  L1 dba:  0x010002b0 Data dba:  0x010002b8    Extent 10    :  L1 dba:  0x010002c0 Data dba:  0x010002c1    Extent 11    :  L1 dba:  0x010002c0 Data dba:  0x010002c8    Extent 12    :  L1 dba:  0x010002d0 Data dba:  0x010002d1    Extent 13    :  L1 dba:  0x010002d0 Data dba:  0x010002d8    Extent 14    :  L1 dba:  0x010002e0 Data dba:  0x010002e1    Extent 15    :  L1 dba:  0x010002e0 Data dba:  0x010002e8    Extent 16    :  L1 dba:  0x01000300 Data dba:  0x01000302    Extent 17    :  L1 dba:  0x01000380 Data dba:  0x01000382    Extent 18    :  L1 dba:  0x01000400 Data dba:  0x01000402    Extent 19    :  L1 dba:  0x01000480 Data dba:  0x01000482    Extent 20    :  L1 dba:  0x01000500 Data dba:  0x01000502    Extent 21    :  L1 dba:  0x01000580 Data dba:  0x01000582    Extent 22    :  L1 dba:  0x01000600 Data dba:  0x01000602    Extent 23    :  L1 dba:  0x01000680 Data dba:  0x01000682    Extent 24    :  L1 dba:  0x01000700 Data dba:  0x01000702   --------------------------------------------------------    Second Level Bitmap block DBAs    --------------------------------------------------------    DBA 1:   0x01000209 End dump data blocks tsn: 4 file#: 4 minblk 522 maxblk 522 4.做truncate分析: $ cat tr.txt column member new_value v_member column member noprint set numw 12 pause run alter system archive log current or alter system switch logfile; --//12c不允许在pluggable database执行这条命令 alter system archive log current; SELECT  member FROM v$log a, v$logfile b WHERE a.group#(+) = b.group# and a.STATUS='CURRENT' and rownum=1; column curr1 new_value v_curr1 select current_scn curr1 from v$database; --//以下操作内容: truncate table t reuse storage; column curr2 new_value v_curr2 select current_scn curr2 from v$database; prompt exec DBMS_LOGMNR.START_LOGMNR(STARTSCN => &&v_curr1 ,ENDSCN  => &&v_curr2 ,OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE); prompt alter system dump logfile '&&v_member' scn min &&v_curr1 scn max &&v_curr2; alter system dump logfile '&&v_member' scn min &&v_curr1 scn max &&v_curr2; SCOTT@book> @ tr.txt run alter system archive log current or alter system switch logfile System altered.        CURR1 ------------  13815784998 Table truncated.        CURR2 ------------  13815785068 exec DBMS_LOGMNR.START_LOGMNR(STARTSCN =>  13815784998 ,ENDSCN  =>  13815785068 ,OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE) alter system dump logfile '/mnt/ramdisk/book/redo01.log' scn min  13815784998 scn max  13815785068 System altered. SCOTT@book> alter system checkpoint ; System altered. SCOTT@book> alter system dump datafile 4 block 522; System altered. --//再次查看转储:   Extent Control Header   -----------------------------------------------------------------   Extent Header:: spare1: 0      spare2: 0      #extents: 25     #blocks: 1280                   last map  0x00000000  #maps: 0      offset: 2716       Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8   #blocks in seg. hdr's freelists: 0   #blocks below: 0   mapblk  0x00000000  offset: 0       Disk Lock:: Locked by xid:  0x000a.01f.00005369   --------------------------------------------------------   Low HighWater Mark :       Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8   #blocks in seg. hdr's freelists: 0   #blocks below: 0   mapblk  0x00000000  offset: 0   Level 1 BMB for High HWM block: 0x01000208   Level 1 BMB for Low HWM block: 0x01000208   --------------------------------------------------------   Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0   L2 Array start offset:  0x00001434   First Level 3 BMB:  0x00000000   L2 Hint for inserts:  0x01000209   Last Level 1 BMB:  0x01000701   Last Level II BMB:  0x01000209   Last Level III BMB:  0x00000000      Map Header:: next  0x00000000  #extents: 25   obj#: 90552  flag: 0x10000000   Inc # 0   Extent Map   -----------------------------------------------------------------    0x01000208  length: 8    0x01000210  length: 8    0x01000218  length: 8    0x01000220  length: 8    0x01000228  length: 8    0x01000230  length: 8    0x010002a0  length: 8    0x010002a8  length: 8    0x010002b0  length: 8    0x010002b8  length: 8    0x010002c0  length: 8    0x010002c8  length: 8    0x010002d0  length: 8    0x010002d8  length: 8    0x010002e0  length: 8    0x010002e8  length: 8    0x01000300  length: 128    0x01000380  length: 128    0x01000400  length: 128    0x01000480  length: 128    0x01000500  length: 128    0x01000580  length: 128    0x01000600  length: 128    0x01000680  length: 128    0x01000700  length: 128   Auxillary Map   --------------------------------------------------------    Extent 0     :  L1 dba:  0x01000208 Data dba:  0x0100020b    Extent 1     :  L1 dba:  0x01000208 Data dba:  0x01000210    Extent 2     :  L1 dba:  0x01000218 Data dba:  0x01000219    Extent 3     :  L1 dba:  0x01000218 Data dba:  0x01000220    Extent 4     :  L1 dba:  0x01000228 Data dba:  0x01000229    Extent 5     :  L1 dba:  0x01000228 Data dba:  0x01000230    Extent 6     :  L1 dba:  0x010002a0 Data dba:  0x010002a1    Extent 7     :  L1 dba:  0x010002a0 Data dba:  0x010002a8    Extent 8     :  L1 dba:  0x010002b0 Data dba:  0x010002b1    Extent 9     :  L1 dba:  0x010002b0 Data dba:  0x010002b8    Extent 10    :  L1 dba:  0x010002c0 Data dba:  0x010002c1    Extent 11    :  L1 dba:  0x010002c0 Data dba:  0x010002c8    Extent 12    :  L1 dba:  0x010002d0 Data dba:  0x010002d1    Extent 13    :  L1 dba:  0x010002d0 Data dba:  0x010002d8    Extent 14    :  L1 dba:  0x010002e0 Data dba:  0x010002e1    Extent 15    :  L1 dba:  0x010002e0 Data dba:  0x010002e8    Extent 16    :  L1 dba:  0x01000300 Data dba:  0x01000302    Extent 17    :  L1 dba:  0x01000380 Data dba:  0x01000382    Extent 18    :  L1 dba:  0x01000400 Data dba:  0x01000402    Extent 19    :  L1 dba:  0x01000480 Data dba:  0x01000482    Extent 20    :  L1 dba:  0x01000500 Data dba:  0x01000502    Extent 21    :  L1 dba:  0x01000580 Data dba:  0x01000582    Extent 22    :  L1 dba:  0x01000600 Data dba:  0x01000602    Extent 23    :  L1 dba:  0x01000680 Data dba:  0x01000682    Extent 24    :  L1 dba:  0x01000700 Data dba:  0x01000702   --------------------------------------------------------    Second Level Bitmap block DBAs    --------------------------------------------------------    DBA 1:   0x01000209 End dump data blocks tsn: 4 file#: 4 minblk 522 maxblk 522 5.对比分析: $ diff -Nur a1.txt a2.txt --- a1.txt      2018-12-12 09:22:47.000000000 +0800 +++ a2.txt      2018-12-12 09:26:16.000000000 +0800 @@ -1,18 +1,20 @@ +  Extent Control Header +  -----------------------------------------------------------------    Extent Header:: spare1: 0      spare2: 0      #extents: 25     #blocks: 1280                    last map  0x00000000  #maps: 0      offset: 2716 -      Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128 +      Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8    #blocks in seg. hdr's freelists: 0 -  #blocks below: 1239 -  mapblk  0x00000000  offset: 24 -                   Unlocked +  #blocks below: 0 +  mapblk  0x00000000  offset: 0 +      Disk Lock:: Locked by xid:  0x000a.01f.00005369    --------------------------------------------------------    Low HighWater Mark : -      Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128 +      Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8    #blocks in seg. hdr's freelists: 0 -  #blocks below: 1239 -  mapblk  0x00000000  offset: 24 -  Level 1 BMB for High HWM block: 0x01000701 -  Level 1 BMB for Low HWM block: 0x01000701 +  #blocks below: 0 +  mapblk  0x00000000  offset: 0 +  Level 1 BMB for High HWM block: 0x01000208 +  Level 1 BMB for Low HWM block: 0x01000208    --------------------------------------------------------    Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0    L2 Array start offset:  0x00001434 @@ -21,7 +23,7 @@    Last Level 1 BMB:  0x01000701    Last Level II BMB:  0x01000209    Last Level III BMB:  0x00000000 -     Map Header:: next  0x00000000  #extents: 25   obj#: 90551  flag: 0x10000000 +     Map Header:: next  0x00000000  #extents: 25   obj#: 90552  flag: 0x10000000    Inc # 0    Extent Map    ----------------------------------------------------------------- --//你可以发现仅仅改动了高低水位标识相关信息,以及obj#. -      Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128 +      Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8    Low HighWater Mark : -      Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128 +      Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8 -     Map Header:: next  0x00000000  #extents: 25   obj#: 90551  flag: 0x10000000 +     Map Header:: next  0x00000000  #extents: 25   obj#: 90552  flag: 0x10000000 --//Extent Map,Auxillary Map信息没有变化. --//这样通过修改数据字典,然后修复高低水位相关信心以及段号,这样就能恢复里面的数据,注意前提条件是对应块没有被覆盖. --//我估计如果覆盖,通过修改对应数据块的段号应该也可以正常读取. 6.确定高低水位信息在块中位置: SCOTT@book> @ bbvi 4 522 BVI_COMMAND ---------------------------------------------------------------------------------------------------- bvi -b 4276224 -s 8192 /mnt/ramdisk/book/users01.dbf xxd -c16 -g 2 -s 4276224 -l 8192 /mnt/ramdisk/book/users01.dbf dd if=/mnt/ramdisk/book/users01.dbf bs=8192 skip=522 count=1 of=4_522.dd conv=notrunc 2>/dev/null od -j 4276224 -N 8192 -t x1 -v /mnt/ramdisk/book/users01.dbf hexdump -s 4276224 -n 8192 -C -v /mnt/ramdisk/book/users01.dbf alter system dump datafile '/mnt/ramdisk/book/users01.dbf' block 522; alter session set events 'immediate trace name set_tsn_p1 level 5'; alter session set events 'immediate trace name buffer level 16777738'; 9 rows selected. $ dd if=/mnt/ramdisk/book/users01.dbf bs=8192 skip=522 count=1 of=4_522.dd conv=notrunc 2>/dev/nul --//0100020b 大小头对调 0b 02 00 01 --//90552=0x161b8 大小头对调 b8 61 01 00 $ xxd -c 32  -g 1 4_522.dd  | grep "b8 61 01 00" --//      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0000100: 00 00 00 00 00 00 00 00 19 00 00 00 00 00 00 00 b8 61 01 00 00 00 00 10 08 02 00 01 08 00 00 00  .................a..............                                                          ~~~~~~~~~~~ --//obj# 位于 0x110=272位置.注前面的标尺为了查看方便我加入的. +      Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8 $ xxd -c 32  -g 1 4_522.dd  | head -20 --//      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0000000: 23 a2 00 00 0a 02 00 01 5e 26 7c 37 03 00 01 04 b2 ab 00 00 00 00 00 00 00 00 00 00 00 00 00 00  #.......^&|7.................... 0000020: 00 00 00 00 19 00 00 00 00 05 00 00 9c 0a 00 00 00 00 00 00 03 00 00 00 08 00 00 00 0b 02 00 01  ................................                                                          ~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~ 0000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0a 00 1f 00 69 53 00 00 01 00 00 00 00 00 00 00  ....................iS..........                                                                                              ~~~~~~~~~~~ 0000060: 03 00 00 00 08 00 00 00 0b 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 02 00 01  ................................          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0000080: 08 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................................ 00000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................................ 00000c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 20 00 00 00 00 00 00 34 14 00 00  ..................... ......4... 00000e0: 00 00 00 00 09 02 00 01 01 00 00 00 01 07 00 01 09 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00  ................................ 0000100: 00 00 00 00 00 00 00 00 19 00 00 00 00 00 00 00 b8 61 01 00 00 00 00 10 08 02 00 01 08 00 00 00  .................a.............. 0000120: 10 02 00 01 08 00 00 00 18 02 00 01 08 00 00 00 20 02 00 01 08 00 00 00 28 02 00 01 08 00 00 00  ................ .......(.......) 0000140: 30 02 00 01 08 00 00 00 a0 02 00 01 08 00 00 00 a8 02 00 01 08 00 00 00 b0 02 00 01 08 00 00 00  0............................... 0000160: b8 02 00 01 08 00 00 00 c0 02 00 01 08 00 00 00 c8 02 00 01 08 00 00 00 d0 02 00 01 08 00 00 00  ........?......?......?...... 0000180: d8 02 00 01 08 00 00 00 e0 02 00 01 08 00 00 00 e8 02 00 01 08 00 00 00 00 03 00 01 80 00 00 00  ?......?......?.............. 00001a0: 80 03 00 01 80 00 00 00 00 04 00 01 80 00 00 00 80 04 00 01 80 00 00 00 00 05 00 01 80 00 00 00  ................................ 00001c0: 80 05 00 01 80 00 00 00 00 06 00 01 80 00 00 00 80 06 00 01 80 00 00 00 00 07 00 01 80 00 00 00  ................................ 00001e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................................ 0000200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................................ 0000220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................................ 0000240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................................ 0000260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................................ --//注意看下划线部分应该对应高低水位信息.你可以改动后转储看看,可以确定前面是高水位信息. --//32+16=48 开始每4各字节分别 高HWM的ext#,高HWM的blk#,高HWM的ext size. 高HWM的dba地址. --//64+28=92 开始每4各字节分别 低HWM的ext#,低HWM的blk#,低HWM的ext size. 低HWM的dba地址. segment header 每个 offset 对应的含义,如下: ---------------------------------------------- offset     desc ---------------------------------------------- 36         total extents 40         total blocks 48         高HWM的ext# 52         高HWM的blk#(从0开始) 56         高HWM的ext size# 60         高HWM的dba地址            76         高HWM下有多少个block              92         低HWM的ext# 96         低HWM的blk#(从0开始) 100        低HWM的ext size 104        低HWM的dba地址            120        高LHWM下有多少个block    124        Level 1 BMB for High HWM block 128        Level 1 BMB for Low HWM block 213        block size    220        L2 Array start offset 224        First Level 3 BMB 228        L2 Hint for inserts    236        Last Level 1 BMB 240        Last Level II BMB 244        Last Level III BMB 264        extents 272        obj#   280        ext#为0的block_id 284        ext#为0的extent blocks 288        ext#为1的block_id 292        ext#为1的extent blocks ......            以此类推循环 2736       aux map信息,ext#为0的L1 dba 2740       aux map信息,ext#为0的data dba   2744       aux map信息,ext#为1的L1 dba 2748       aux map信息,ext#为1的data dba   ......            以此类推循环 5192       Second Level Bitmap block DBAs   --//对于truncate table t reuse storage;操作修改信息就相对较少. 7.修改数据字典: --//A.先修改数据字典。 UPDATE tab$ set dataobj#=90551  where obj#=90551; UPDATE seg$ set hwmincr=90551   where hwmincr=90552; update obj$ set dataobj#=90551  where obj#=90551; commit ; SYS@book> alter system flush buffer_cache; System altered. SYS@book> alter system flush shared_pool ; System altered. SCOTT@book> select * from t where rowid=dbms_rowid.ROWID_CREATE(1,90551,4, 523 ,0); OWNER  OBJECT_NAME SUBOBJECT_  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED             LAST_DDL_TIME       TIMESTAMP           STATUS  T G S  NAMESPACE EDITION_NAME ------ ----------- ---------- ---------- -------------- ----------- ------------------- ------------------- ------------------- ------- - - - ---------- ------------ SYS    ICOL$                          20              2 TABLE       2013-08-24 11:37:35 2013-08-24 11:47:37 2013-08-24:11:37:35 VALID   N N N          1 --//能查询到,说明以上修改没有问题。 --//B.修复高低水位相关信息: --//我这里高低修改一样 --//修改前  Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8 --//修改后  Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128 --// 25=0x19 24=0x18 87=0x57 128=0x80 --// 0x01000757 大小头对调 57 07 00 01  m /x 19 offset 36      --//total extents m /x 19 offset 264     --//extents --//注:这步不需要修改,因为空间没有回收。 --//32+16=48 开始每4各字节分别 高HWM的ext#,高HWM的blk#,高HWM的ext size. 高HWM的dba地址. --//64+28=92 开始每4各字节分别 低HWM的ext#,低HWM的blk#,低HWM的ext size. 低HWM的dba地址. m /x 18 offset 48      --//高HWM的ext# m /x 57 offset 52      --//高HWM的blk#(从0开始) m /x 80 offset 56      --//高HWM的ext size# m /x 5707 offset 60    --//HWM的dba地址(低位) m /x 0001 offset 62    --//HWM的dba地址(高位) m /x 18 offset 92      --//低HWM的ext# m /x 57 offset 96      --//低HWM的blk#(从0开始) m /x 80 offset 100     --//低HWM的ext size m /x 5707 offset 104   --//低HWM的dba地址(低位) m /x 0001 offset 106   --//低HWM的dba地址(高位) --//注意大小头问题。 --//90551=0x161b7 大小头对调 b7 61 01 00 m /x b761 offset 272   --//修改obj# m /x 0100 offset 274   --//修改obj# --//整理如下,别写错了.^_^: $ cat tr_bbed.txt set dba 4,522 m /x 18   offset 48 y m /x 57   offset 52 m /x 80   offset 56 m /x 5707 offset 60 m /x 0001 offset 62 m /x 18   offset 92 m /x 57   offset 96 m /x 80   offset 100 m /x 5707 offset 104 m /x 0001 offset 106 m /x b761 offset 272 m /x 0100 offset 274 sum apply --//注:中间有1行y不是多余的,这样可以通过管道执行.因为是修改,中间有提示如下 Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) --//时就报错.如果害怕错误,使用copy &paste 执行吧. $ cat tr_bbed.txt | bbed parfile=bbed.par cmdfile=cmd.par ... --//检查: BBED> set dba 4,522         DBA             0x0100020a (16777738 4,522) BBED> dump /v offset 48 count 16  File: /mnt/ramdisk/book/users01.dbf (4)  Block: 522                               Offsets:   48 to   63                            Dba:0x0100020a -----------------------------------------------------------------------------------------------------------  18000000 57000000 80000000 57070001                                     l ....W.......W...  <32 bytes per line> BBED> dump /v offset 92 count 16  File: /mnt/ramdisk/book/users01.dbf (4)  Block: 522                               Offsets:   92 to  107                            Dba:0x0100020a -----------------------------------------------------------------------------------------------------------  18000000 57000000 80000000 57070001                                     l ....W.......W...  <32 bytes per line> BBED> dump /v offset 272 count 8  File: /mnt/ramdisk/book/users01.dbf (4)  Block: 522                               Offsets:  272 to  279                            Dba:0x0100020a -----------------------------------------------------------------------------------------------------------  b7610100 00000010                                                       l .a......  <32 bytes per line> --//ok,现在修改完成了. --//C.验证修改是否有效. SCOTT@book> alter system flush shared_pool; System altered. SCOTT@book> alter system flush buffer_cache; System altered. SCOTT@book> alter session set optimizer_dynamic_sampling=0; Session altered. SCOTT@book> select count(*) from t ;   COUNT(*) ----------      84769 --//ok!!现在修复了.你可能问原来的到底水位信息如何获得,自己上可以通过转储日志获得. 8.检查转储日志: $ egrep -A1 "^Low HWM|High HWM" /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_8998.trc Low HWM       Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128 -- High HWM       Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128 -- Low HWM       Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8 -- High HWM       Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8 --//可以发现可以与上面的信息对上. REDO RECORD - Thread:1 RBA: 0x0002ff.00000016.011c LEN: 0x01b8 VLD: 0x01 SCN: 0x0003.377c2626 SUBSCN:  1 12/12/2018 09:24:29 CHANGE #1 TYP:0 CLS:36 AFN:3 DBA:0x00c001c9 OBJ:4294967295 SCN:0x0003.377c2626 SEQ:27 OP:5.1 ENC:0 RBL:0 ktudb redo: siz: 164 spc: 4640 flg: 0x0022 seq: 0x0f52 rec: 0x28             xid:  0x000a.01f.00005369 ktubu redo: slt: 31 rci: 39 opc: 13.29 objn: 90551 objd: 90551 tsn: 4 Undo type:  Regular undo       Undo type:  Last buffer split:  No Tablespace Undo:  No              0x00000000 Segment Header Undo Seghdr dba:  0x0100020a Mapblock dba:  0x00000000 Mapredo Offset: 4 scls: 4 mcls: 7 Both the HWMs Low HWM       Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     #blocks in seg. hdr's freelists: 0   #blocks below: 1239   mapblk  0x00000000  offset: 24 lfdba:  0x01000701 High HWM       Highwater::  0x01000757  ext#: 24     blk#: 87     ext size: 128 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     #blocks in seg. hdr's freelists: 0   #blocks below: 1239   mapblk  0x00000000  offset: 24 lfdba:  0x01000701 hint dba:  0x01000209 Lasts in Header LF: 16779009 LS: 16777737 LT: 0 FT: 0 --//前面部分undo的信息. CHANGE #2 TYP:0 CLS:4 AFN:4 DBA:0x0100020a OBJ:90551 SCN:0x0003.377c2626 SEQ:1 OP:13.28 ENC:0 RBL:0 Both the HWMs Low HWM       Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     #blocks in seg. hdr's freelists: 0   #blocks below: 0   mapblk  0x00000000  offset: 0 lfdba:  0x01000208 High HWM       Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     #blocks in seg. hdr's freelists: 0   #blocks below: 0   mapblk  0x00000000  offset: 0 lfdba:  0x01000208 hint dba:  0x01000209 Lasts in Header LF: 16779009 LS: 16777737 LT: 0 FT: 0 --//修改的信息 CHANGE #3 TYP:0 CLS:8 AFN:4 DBA:0x01000208 OBJ:90551 SCN:0x0003.377c2626 SEQ:3 OP:13.22 ENC:0 RBL:0 Redo on Level1 Bitmap Block Redo to set hwm Opcode: 32      Highwater::  0x0100020b  ext#: 0      blk#: 3      ext size: 8   #blocks in seg. hdr's freelists: 0   #blocks below: 0   mapblk  0x00000000  offset: 0 --//0x01000208=16777736,16777736= alter system dump datafile 4 block 520 --//实际上还修改dba=4,520 ... REDO RECORD - Thread:1 RBA: 0x0002ff.0000001a.0010 LEN: 0x0070 VLD: 0x05 SCN: 0x0003.377c2628 SUBSCN:  1 12/12/2018 09:24:29 (LWN RBA: 0x0002ff.0000001a.0010 LEN: 0001 NST: 0001 SCN: 0x0003.377c2628) CHANGE #1 TYP:0 CLS:8 AFN:4 DBA:0x01000208 OBJ:90551 SCN:0x0003.377c2626 SEQ:4 OP:13.22 ENC:0 RBL:0 Redo on Level1 Bitmap Block Redo to Change Opcode Opcode: 9locking transaction: REDO RECORD - Thread:1 RBA: 0x0002ff.0000001a.0080 LEN: 0x00bc VLD: 0x01 SCN: 0x0003.377c2628 SUBSCN:  1 12/12/2018 09:24:29 CHANGE #1 TYP:0 CLS:36 AFN:3 DBA:0x00c001c9 OBJ:4294967295 SCN:0x0003.377c2626 SEQ:28 OP:5.1 ENC:0 RBL:0 ktudb redo: siz: 72 spc: 4474 flg: 0x0022 seq: 0x0f52 rec: 0x29             xid:  0x000a.01f.00005369 ktubu redo: slt: 31 rci: 40 opc: 13.23 objn: 90551 objd: 90551 tsn: 4 Undo type:  Regular undo       Undo type:  Last buffer split:  No Tablespace Undo:  No              0x00000000 Undo for Lev1 Bitmap Block L1 DBA:  0x01000208 L2 DBA:  0x00000000 fcls: 8 scls: 0 offset: 0 Redo on Level1 Bitmap Block  Change objd Newobjd: 90551 CHANGE #2 TYP:0 CLS:8 AFN:4 DBA:0x01000208 OBJ:90551 SCN:0x0003.377c2628 SEQ:1 OP:13.22 ENC:0 RBL:0 Redo on Level1 Bitmap Block  Change objd Newobjd: 90552 --//新的Newobjd: 90552. --//可以通过如上信息确定如何修改段头. --//总结: 1.truncate reuse storage 没有修改段头的Extent Map,Auxillary Map.恢复相对简单. 2.修复先修复数据字典. UPDATE tab$ set dataobj#=90551  where obj#=90551; UPDATE seg$ set hwmincr=90551   where hwmincr=90552; update obj$ set dataobj#=90551  where obj#=90551; commit ; 3.修复段头的高低水位信息: m /x 18 offset 48      --//高HWM的ext# m /x 57 offset 52      --//高HWM的blk#(从0开始) m /x 80 offset 56      --//高HWM的ext size# m /x 5707 offset 60    --//HWM的dba地址(低位) m /x 0001 offset 62    --//HWM的dba地址(高位) m /x 18 offset 92      --//低HWM的ext# m /x 57 offset 96      --//低HWM的blk#(从0开始) m /x 80 offset 100     --//低HWM的ext size m /x 5707 offset 104   --//低HWM的dba地址(低位) m /x 0001 offset 106   --//低HWM的dba地址(高位) --//注意大小头问题。 --//90551=0x161b7 大小头对调 b7 61 01 00 m /x b761 offset 272   --//修改obj# m /x 0100 offset 274   --//修改obj# 4.相关修改信息可以通过redo转储确定.

相关推荐