设为首页 加入收藏

TOP

oracleblockcorrupt坏块(二)
2015-07-24 10:07:01 来源: 作者: 【 】 浏览:1
Tags:oracleblockcorrupt 坏块
坏两种,那么当oracle发现物理或者逻辑损坏之后是如何标记数据块从而使之后的操作知道该块是损坏块的那?

对于物理损坏,oracle不会进行任何的处理,在进行后续处理时oracle会重新计算checksum,只要发现checksum不一致则认为该块时物理损坏,并抛出01578错误。

对于逻辑损坏,当oracle第一次对数据块进行逻辑检测时,会抛出ora 600等错误,并修改数据块中的标记位,当下次访问该数据块时,oracle检测标志位,如果发现标志位以置为逻辑损坏,则抛出ora 01578错误。当使用DBMS_REPAIR对坏块进行修改时,如果时物理损坏不作任何处理,如果时逻辑损坏,修改数据块的标志位。

在数据块中存在两个位置表示数据块为逻辑损坏(不标示物理损坏),如下:

BBED> map /v
 File: /home/app/oraten/oradata/oraten/tbs201.dbf (5)
 Block: 20                                    Dba:0x01400014
------------------------------------------------------------
 KTB Data Block (Table/Cluster)

 struct kcbh, 20 bytes                      @0       
    ub1 type_kcbh                           @0       
    ub1 frmt_kcbh                           @1       
    ub1 spare1_kcbh                         @2       
    ub1 spare2_kcbh                         @3       
    ub4 rdba_kcbh                           @4       
    ub4 bas_kcbh                            @8       
    ub2 wrp_kcbh                            @12      
    ub1 seq_kcbh                            @14      
    ub1 flg_kcbh                            @15      
    ub2 chkval_kcbh                         @16      
    ub2 spare3_kcbh                         @18      

 struct ktbbh, 96 bytes                     @20      
    ub1 ktbbhtyp                            @20      
    union ktbbhsid, 4 bytes                 @24      
    struct ktbbhcsc, 8 bytes                @28      
    b2 ktbbhict                             @36      
    ub1 ktbbhflg                            @38      
    ub1 ktbbhfsl                            @39      
    ub4 ktbbhfnx                            @40      
    struct ktbbhitl[3], 72 bytes            @44      

 struct kdbh, 14 bytes                      @124     
    ub1 kdbhflag                            @124     
    b1 kdbhntab                             @125     
    b2 kdbhnrow                             @126     
    sb2 kdbhfrre                            @128     
    sb2 kdbhfsbo                            @130     
    sb2 kdbhfseo                            @132     
    b2 kdbhavsp                             @134     
    b2 kdbhtosp                             @136     

 struct kdbt[1], 4 bytes                    @138     
    b2 kdbtoffs                             @138     
    b2 kdbtnrow                             @140     

 sb2 kdbr[7]                                @142     

 ub1 freespace[7905]                        @156     

 ub1 rowdata[127]                           @8061    

 ub4 tailchk                                @8188?
BBED> set offset 14
	OFFSET         	14

BBED> dump /v count 12
 File: /home/app/oraten/oradata/oraten/tbs201.dbf (5)
 Block: 20      Offsets:   14 to   25  Dba:0x01400014
-------------------------------------------------------
 ff0425fe 00000100 0000fcca          l ..%.........

 <16 bytes per line>

BBED> set offset 8188
	OFFSET         	8188

BBED> dump /v count 12
 File: /home/app/oraten/oradata/oraten/tbs201.dbf (5)
 Block: 20      Offsets: 8188 to 8191  Dba:0x01400014
-------------------------------------------------------
 ff060000                            l ....
这里的ff即标示数据块位逻辑损坏块,我们可以将其手工修改位01 或者 02 从而取消逻辑损坏标示。??

对于已经标示为逻辑损坏的数据块,dbv等工具的检测结果如下:

Total Blocks Examined         : 1
Total Blocks Processed (Data) : 1
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
而对于没有标示的逻辑损坏,dbv等工具检测结果如下:
Total Blocks Examined         : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing   (Data) : 1
Total Blocks Processed (Index): 0
Total Blocks Failing   (Index): 0
Total Blocks Empty            : 0
Total Blocks Marked Corrupt   : 0
Total Blocks Influx           : 0
于物理损坏,dbv检测结果如下
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   : 1
Total Blocks Influx           : 0

对于dbms_repair包,如果是物理损坏,则REPAIR_TABLE的marked_corrupt列始终为true,fix方法并不会发生作用。对于逻辑损坏,首先repair_table 的marked_corrupt列为false,fix方法修正后,marked_corrupt修改为true,此时数据块的标志位已发生修改。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇oracle视图建主键 下一篇oracle常用语言

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何从内核协议栈到 (2025-12-27 03:19:09)
·什么是网络协议?有哪 (2025-12-27 03:19:06)
·TCP/ IP协议有哪些 (2025-12-27 03:19:03)
·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)