1104File Space Bitmap Block损坏能修复吗

简介: [20161104]File Space Bitmap Block损坏能修复吗?.txt -- 链接http://www.itpub.net/thread-2071023-1-1.

[20161104]File Space Bitmap Block损坏能修复吗?.txt

-- 链接http://www.itpub.net/thread-2071023-1-1.html提到File Space Bitmap Block损坏,问能修复吗?

1.环境:

SCOTT@book> @ &r/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

CREATE TABLESPACE SUGAR DATAFILE
  '/mnt/ramdisk/book/sugar01.dbf' SIZE 40M AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

create table t1 tablespace sugar as select rownum id ,lpad('A',32,'A') name from dual connect by level<=1e5;
--建立大小5M的表。

create table t2 tablespace sugar as select rownum id ,lpad('B',32,'B') name from dual connect by level<=2e5;
create table t3 tablespace sugar as select rownum id ,lpad('C',32,'C') name from dual connect by level<=2e5;
alter system checkpoint;

2.假设File Space Bitmap Block损坏了。
--全部选择F看看。

SYS@book> execute dbms_space_admin.tablespace_dump_bitmaps('SUGAR');
PL/SQL procedure successfully completed.

*** 2016-11-04 16:23:39.634
*** SESSION ID:(24.507) 2016-11-04 16:23:39.634
*** CLIENT ID:() 2016-11-04 16:23:39.634
*** SERVICE NAME:(SYS$USERS) 2016-11-04 16:23:39.634
*** MODULE NAME:(sqlplus@gxqyydg4 (TNS V1-V3)) 2016-11-04 16:23:39.634
*** ACTION NAME:() 2016-11-04 16:23:39.634

Header Control:
RelFno: 6, Unit: 8, Size: 5120, Flag: 9
AutoExtend: YES, Increment: 2048, MaxSize: 4194302
Initial Area: 126, Tail: 5119, First: 400, Free: 224
Deallocation scn: 925704.0
Header Opcode:
Save: No Pending Op
File Space Bitmap Block:
BitMap Control:
RelFno: 6, BeginBlock: 128, Flag: 0, First: 400, Free: 63088
FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFF000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000

-- 16*6+4=100
-- 1bit 表示 64K。 F(0x1111) 表示4 bits.
-- 100*4*64*1024/8192=3200块 ,3200*8192/1024/1024=25, 位图信息对的。

--假设现在坏了,我全部修改为F是否可行呢?

--文件大小40M,40*1024*1024/8192=5120块。40*1024*1024/64/1024=640bit,640/4=160个F。

3.我直接使用bvi修改文件看看:

SYS@book> alter tablespace sugar offline ;
Tablespace altered.

--安全期间,做一个备份:
$ cp /mnt/ramdisk/book/sugar01.dbf /u01/backup/sugar01.dbf_0161104

--正常数据文件第1块OS。第2块是文件头,第3块开始-128块是位图区。

--我文件很小,估计在1块里面:
--8192*3=24576

$ bvi -b 24576 -s 8192 /mnt/ramdisk/book/sugar01.dbf

--前面已经100个F,我仅仅加入60个。

--修改如下:
00006000  1E A2 00 00 03 00 80 01 64 F8 26 00 00 00 01 04 22 B1 00 00 06 00 00 00 80 00 00 00 00 00 00 00 ........d.&....."...............
00006020  90 01 00 00 70 F6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF ....p...........................
00006040  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................................
00006060  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................................
00006080  FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
000060A0  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 ................................
000060C0  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 ................................
000060E0  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 ................................
00006100  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 ................................
00006120  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 ................................
00006140  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 ................................
00006160  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 ................................
"

BBED> set dba 6,3
        DBA             0x01800003 (25165827 6,3)

BBED> map
File: /mnt/ramdisk/book/sugar01.dbf (6)
Block: 3                                     Dba:0x01800003
------------------------------------------------------------
BBED-00400: invalid blocktype (30)

BBED> sum
Check value for File 6, Block 3:
current = 0xb122, required = 0x4edd

BBED> sum apply
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
Check value for File 6, Block 3:
current = 0x4edd, required = 0x4edd

BBED> verify
DBVERIFY - Verification starting
FILE = /mnt/ramdisk/book/sugar01.dbf
BLOCK = 3


DBVERIFY - Verification complete
Total Blocks Examined         : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing   (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing   (Index): 0
Total Blocks Empty            : 0
Total Blocks Marked Corrupt   : 0
Total Blocks Influx           : 0
Message 531 not found;  product=RDBMS; facility=BBED

$ dbv file=sugar01.dbf
DBVERIFY: Release 11.2.0.4.0 - Production on Fri Nov 4 16:42:32 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
DBVERIFY - Verification starting : FILE = /mnt/ramdisk/book/sugar01.dbf
Page 3 failed with check code 18018
DBVERIFY - Verification complete
Total Pages Examined         : 5120
Total Pages Processed (Data) : 2974
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 201
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 1945
Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 2553960 (0.2553960)


SYS@book> alter tablespace sugar  online;
Tablespace altered.

SYS@book> alter tablespace sugar  read only;
Tablespace altered.

SYS@book> select count(*) from scott.t1;
  COUNT(*)
----------
    100000

SYS@book> select count(*) from scott.t2;
  COUNT(*)
----------
    200000

SYS@book> select count(*) from scott.t3;
  COUNT(*)
----------
    200000

--OK!问题在与如何构造这个信息块。

4.其他测试:
SYS@book> execute dbms_space_admin.tablespace_dump_bitmaps('SUGAR');
BEGIN dbms_space_admin.tablespace_dump_bitmaps('SUGAR'); END;

*
ERROR at line 1:
ORA-03219: Tablespace 'SUGAR' is dictionary-managed, offline or temporary
ORA-06512: at "SYS.DBMS_SPACE_ADMIN", line 322
ORA-06512: at line 1

--在只读情况执行报错。

SYS@book> alter tablespace sugar  read write;
Tablespace altered.

SYS@book> execute dbms_space_admin.tablespace_dump_bitmaps('SUGAR');
PL/SQL procedure successfully completed.

SYS@book> alter system dump datafile 6 block 3 ;
System altered.

SYS@book> alter tablespace sugar  read only;
Tablespace altered.

BBED> set dba 6,3
        DBA             0x01800003 (25165827 6,3)

BBED> dump /v count 8192
File: /mnt/ramdisk/book/sugar01.dbf (6)
Block: 3                                 Offsets:    0 to  255                            Dba:0x01800003
-----------------------------------------------------------------------------------------------------------
1ea20000 03008001 64f82600 00000104 dd4e0000 06000000 80000000 00000000 l ........d.&......N..............
90010000 70f60000 00000000 00000000 00000000 00000000 ffffffff ffffffff l ....p...........................
ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff l ................................
ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff l ................................
ffffffff ffffffff 00000000 00000000 00000000 00000000 00000000 00000000 l ................................
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 l ................................
....
00000000 00000000 00000000 00000000 00000000 00000000 00000000 011e64f8 l ..............................d.
<32 bytes per line>

--问题在与前面部分如何构造。

5.在建立一个相同大小的表空间看看。

CREATE TABLESPACE TEA DATAFILE
  '/mnt/ramdisk/book/tea01.dbf' SIZE 40M AUTOEXTEND ON NEXT 16M MAXSIZE UNLIMITED
LOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

BBED> set dba 7,3
        DBA             0x01c00003 (29360131 7,3)

BBED> dump /v count 8192
File: /mnt/ramdisk/book/tea01.dbf (7)
Block: 3                                 Offsets:    0 to 8191                            Dba:0x01c00003
-----------------------------------------------------------------------------------------------------------
1ea20000 0300c001 18fd2600 00000104 7c410000 07000000 80000000 00000000 l ..........&.....|A..............
00000000 00f80000 00000000 00000000 00000000 00000000 00000000 00000000 l ................................
...
00000000 00000000 00000000 00000000 00000000 00000000 00000000 011e18fd l ................................
<32 bytes per line>

--顺便取一个数据块分析对照:
BBED> p kcbh
struct kcbh, 20 bytes                       @0
   ub1 type_kcbh                            @0        0x06
   ub1 frmt_kcbh                            @1        0xa2
   ub1 spare1_kcbh                          @2        0x00
   ub1 spare2_kcbh                          @3        0x00
   ub4 rdba_kcbh                            @4        0x018000e6
   ub4 bas_kcbh                             @8        0x0026f7c5
   ub2 wrp_kcbh                             @12       0x0000
   ub1 seq_kcbh                             @14       0x02
   ub1 flg_kcbh                             @15       0x04 (KCBHFCKV)
   ub2 chkval_kcbh                          @16       0x1c51
   ub2 spare3_kcbh                          @18       0x0000
------

--做一个不完全分析:
1ea20000 相同。
0300c001 这个dba地址。

BBED> set dba 6,3
        DBA             0x01800003 (25165827 6,3)

BBED> set dba 7,3
        DBA             0x01c00003 (29360131 7,3)

18fd2600 scn号,低字节18fd与tail对应一样。

-- 7c41是检查和。
BBED> set dba 7,3
        DBA             0x01c00003 (29360131 7,3)
BBED> sum
Check value for File 7, Block 3:
current = 0x417c, required = 0x417c

07000000 ==> 我看了其他文件这个视乎是文件号,乱猜。

--后面我不敢猜测了。
--主要是 90010000 70f60000 , 我猜测不出来。

目录
相关文章
|
算法 开发者
关于 加载图片"Corrupt JPEG data: premature end of data segment" 的解决方法
关于 加载图片"Corrupt JPEG data: premature end of data segment" 的解决方法
关于 加载图片"Corrupt JPEG data: premature end of data segment" 的解决方法
|
缓存 Oracle 关系型数据库
1128PAGETABLE SEGMENT HEADER损坏恢复
[20161128]PAGETABLE SEGMENT HEADER损坏恢复2.txt --昨天在做段头损坏测试时,发现一个奇特现象,我破坏了段头,但是我select依旧能正常访问,检查发现我在数据缓存相应的块是OK的, --虽然我破坏了数据文件中相应表的段头,但是数据缓存的信息是好的,所以能正常访问,而我执行alter system checkpoint并没有将 --缓存信息写盘(也许前面已经发出过checkpoint命令),这样才出现问题。
930 0
|
测试技术
1110File Space Bitmap Block损坏能修复吗3
[20161110]File Space Bitmap Block损坏能修复吗3.txt --今天仔细检查才发现我原来的链接存在问题,http://blog.itpub.
838 0
|
Oracle 关系型数据库 数据库
20161114File Space Bitmap Block修复机制2
[20161114]File Space Bitmap Block修复机制2.txt --前几天在测试File Space Bitmap Block时执行了,execute dbms_space_admin.TABLESPACE_REBUILD_BITMAPS('SUGAR') --这样位图区全部设置为1,显示都是F。
662 0
|
SQL 测试技术 数据库管理
1108File Space Bitmap Block损坏能修复吗2
[20161108]File Space Bitmap Block损坏能修复吗? --这阵子做了数据文件的一些探究,还是回到File Space Bitmap Block损坏修复的问题。
1213 0