资讯专栏INFORMATION COLUMN

记录几种坏块处理方式

IT那活儿 / 1552人阅读
记录几种坏块处理方式

点击上方“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=y
DBVERIFY: Release 12.2.0.1.0 - Production on Tue Jan 19 17:24:26 2021
Copyright (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 on
DECLARE 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_DESCRIPTION
from REPAIR_TABLE;

REM Mark the identified blocks as corrupted
DECLARE 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那活儿微信公众号(上海新炬王翦团队)


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129681.html

相关文章

  • 微软为OCP计算项目推出云SSD存储新规范

    摘要:微软正在继续向提交潜在的新规范。微软方面表示,预计在未来几个月内完成规范,并在今年晚些时候推出。此外,微软还在推进另一个开放计算贡献的项目。去年年底,微软推出了加密微控制器标准。微软正在继续向Open Compute Project提交潜在的新规范。在美国圣何塞举行的Open Compute Project(OCP)美国峰会上,微软推出了Project Denali,一项用于SSD固件接口标...

    mmy123456 评论0 收藏0
  • Vue.js中引入图片路径的几种方式

    摘要:记录总结一下的中引入图片路径的几种书写方式中静态资源的引入机制关于静态资源的官方文档静态资源可以通过两种方式进行处理在被导入或在中通过相对路径以开头被引用。如果是一个绝对路径,例如,它将会被保留不变。 vue --version 3.6.3记录总结一下的Vue中引入图片路径的几种书写方式 vue中静态资源的引入机制 Vue.js关于静态资源的官方文档 静态资源可以通过两种方式进行处理...

    adam1q84 评论0 收藏0
  • 总结跨域的几种方式

    摘要:比如域的页面通过嵌入了一个域的页面,可以通过以下方法实现和的通信通过跨域以上几种都是双向通信的,即两个,页面与或是页面与页面之间的,下面说几种单项跨域的一般用来获取数据,因为通过标签引入的是不受同源策略的限制的。 跨域整理@(前端笔记) 跨域 只要协议、域名、端口有任何一个不同,都被当作是不同的域。由于浏览器的同源策略,其限制之一是不能通过ajax的方法情趣请求不同源的文档。第二个限制...

    diabloneo 评论0 收藏0
  • Java日志组件间关系

    摘要:一总览本文章不对日志组件进行优劣评价,只是对关系进行对比。在日志中组件中存在这样的几种关系,这几种关系理解清楚,有助于我们对日志的引入和使用。 一、 总览 本文章不对日志组件进行优劣评价,只是对关系进行对比。在日志中组件中存在这样的几种关系, 这几种关系理解清楚, 有助于我们对日志的引入和使用。 showImg(https://segmentfault.com/img/bVbow7o?...

    warmcheng 评论0 收藏0
  • 浅析前端上传

    摘要:项目上也用到很多上传文件的地方,七牛云,阿里云,讯飞上传都接触过,所以在这里做一个记录,总结一下前端上传的几种方式。类型的文件名七牛云上传浅析是一个基于七牛开发的前端。 showImg(https://segmentfault.com/img/bVbvibu?w=1920&h=1080); 图片,音频,视频等等这几种常见的资源类型,如果需要从前端上传到服务端,有几种方式呢?不妨回顾一下...

    terro 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<