暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

记录几种坏块处理方式

IT那活儿 2022-01-22
2659

点击上方“IT那活儿”,关注后了解更多精彩内容!!!


01

坏块概述


物理坏块:
通常由于硬件问题导致,比如磁盘异常,存储链路问题,HBA卡问题,文件系统问题,第三方软件问题等。
逻辑坏块:
大部分是由于软件问题导致,比如说oracle bug,导致数据块和索引块数据不一致。

02

坏块检测


2.1 RMAN 工具

生产接入rman备份,遇到坏块会备份失败,不会接着备份,如下图:
结合rman命令,查询相关视图可以查看出具体坏块信息:
backup validate check logical database;命令检查全库,如下如图:
backup validate check logical datafile 5;命令检查单个文件。
可以参考:How to identify all the Corrupted Objects in the Database with RMAN ( Doc ID 472231.1 )。
存在一种特殊情况,标记是有坏块,但状态是OK。如下图:

2.2 DBV工具

dbv help=yDBVERIFY: Release 12.2.0.1.0 - Production on Tue Jan 19 17:24:26 2021Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.Keyword Description (Default)----------------------------------------------------FILE        File to Verify                 (NONE)START       Start Block                    (First Block of File)END         End Block                      (Last Block of File)BLOCKSIZE   Logical Block Size             (8192)LOGFILE     Output Log                     (NONE)FEEDBACK Display Progress (0)PARFILE Parameter File                 (NONE)USERID Username/Password              (NONE)SEGMENT_ID Segment ID (tsn.relfile.block) (NONE)HIGH_SCN Highest Block SCN To Verify    (NONE)(scn_wrap.scn_base OR scn)
注意:dbv不更新数据字典以及alert日志
示例1:检测全库。
dbv file=+DATADG/xxx/DATAFILE/system.1135.1061813741 blocksize=8192 USERID=sys/xxxx logfile=system.1135.1061813741.1.log
示例2:检测单个segment header_block。
示例3:每个分区都是独立的segment,有独立的header_block。

2.3 EXP/EXPDP检测

 exp导出直接报错(更新alert日志,只打印出遇到的坏块,不能全部打印,数据字典)。

2.4 ANALYZE命令

遇到坏块就报错,但不能检测出有多少个坏块,遇到第一个坏块就返回报错,打印alert日志,和rman发起真实的备份类似。


03

坏块修复


3.1 RMAN工具

使用Data Recovery Advisor
3.1.1 LIST FAILURE;
3.1.2 ADVISE FAILURE;
3.1.3 REPAIR FAILURE;
使用RECOVER...BLOCK命令:
RECOVER DATAFILE 8 BLOCK 13 DATAFILE 2 BLOCK 19;RECOVER CORRUPTION LIST;(V$DATABASE_BLOCK_CORRUPTION)
注:
By default, RMAN first searches for good blocks in the real-time query physical standby database, then flashback logs and then blocks in full or level 0 incremental backups.<https://docs.oracle.com/database/121/BRADV/rcmblock.htm#BRADV89782>

3.2 EXPDP

既可以用来做检测也可以用来抢救数据,跳过坏块导出。

3.3 DBMS_REPAIR

代码如下:
REM Create the repair table in a given tablespace:BEGIN  DBMS_REPAIR.ADMIN_TABLES (  TABLE_NAME => 'REPAIR_TABLE',  TABLE_TYPE => dbms_repair.repair_table,  ACTION => dbms_repair.create_action,  TABLESPACE => '&tablespace_name');END;/REM Identify corrupted blocks for schema.object (it also can be done at partition level with parameter PARTITION_NAME):set serveroutput onDECLARE num_corrupt INT;BEGIN  num_corrupt := 0;  DBMS_REPAIR.CHECK_OBJECT (  SCHEMA_NAME => '&schema_name',  OBJECT_NAME => '&object_name',  REPAIR_TABLE_NAME => 'REPAIR_TABLE',  corrupt_count => num_corrupt);  DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));END;/REM Optionally display any corrupted block identified by check_object:select BLOCK_ID, CORRUPT_TYPE, CORRUPT_DESCRIPTIONfrom REPAIR_TABLE;REM Mark the identified blocks as corruptedDECLARE num_fix INT;BEGIN  num_fix := 0;  DBMS_REPAIR.FIX_CORRUPT_BLOCKS (  SCHEMA_NAME => '&schema_name',  OBJECT_NAME=> '&object_name',  OBJECT_TYPE => dbms_repair.table_object,  REPAIR_TABLE_NAME => 'REPAIR_TABLE',  FIX_COUNT=> num_fix);  DBMS_OUTPUT.PUT_LINE('num fix: ' || to_char(num_fix));END;/REM Allow future DML statements to skip the corrupted blocks:BEGIN  DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (  SCHEMA_NAME => '&schema_name',  OBJECT_NAME => '&object_name',  OBJECT_TYPE => dbms_repair.table_object,  FLAGS => dbms_repair.SKIP_FLAG);END;/
可以通过REPAIR_TABLE来查看跳过了多少坏块。
NO_SKIP取消标记:

3.4 Event 10231

启用10231内部事件 :
alter system set events='10231 trace name context forever,level 10’;
关闭10231内部事件:
alter system set events='10231 trace name context off';
设置该事件后可以进行move表操作。

3.5 特殊情况

DBV或者rman validata命令标记有坏块,但V$DATABASE_BLOCK_CORRUPTION查不到file#,block#。
可以参考How to Format Corrupted Block Not Part of Any Segment (Doc ID 336133.1)

04

总   结


4.1 有备份或者有adg环境且主备有一端是好的,backup validate后,可以使用recover block方式进行修复;
4.2 无备份或者无adg环境可以使用dbms_repair包,event 10231,expdp常规手段去抢救正常数据。

本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论