oracle用户下执行dbv file='/var/oradata/test/system01.dbf'  检查这个文件是否有坏块

示例如下:

1.获取所有数据文件的检查脚本

select 'dbv file='||''''||name||'''' from v$datafile;  --得出所有数据文件的检查脚本

dbv file='/var/oradata/test/system01.dbf'
dbv file='/var/oradata/test/TEST_D_TEST86_TEMP2.dbf'
dbv file='/var/oradata/test/sysaux01.dbf'
dbv file='/var/oradata/test/undotbs01.dbf'

2.将以上都放到1.sh文件中

vi 1.sh

dbv file='/var/oradata/test/system01.dbf'
dbv file='/var/oradata/test/TEST_D_TEST86_TEMP2.dbf'
dbv file='/var/oradata/test/sysaux01.dbf'
dbv file='/var/oradata/test/undotbs01.dbf'

3.执行脚本sh 1.sh > 1.log >2&1

4.最后查看结果

cat 1.log | egrep "FILE|Total Pages Marked Corrupt"

如果每个文件的Total Pages Marked Corrupt这一列都是0的话证明没有坏块。

补充说明:sql语句的拼接。

select 'dbv file='||''''||name||'''' from v$datafile;

用||进行拼接,其他字符串需要使用两个单引号括起来,特殊字符也需要用单引号进行转义。

select tablespace_name,segment_type,owner,segment_name from dba_extents where file_id=28 and 3085095 between block_id AND block_id + blocks - 1;

案例分享:

用dbv扫的时候发现某个文件坏了4个块:

dbv扫描之后,视图V$DATABASE_BLOCK_CORRUPTION为空,不确定是哪个块号有问题。

于是用如下的语句找出具体哪个文件的块坏了

发现是69号文件的1772816,1772885,1773338,1773402这4个块坏了。

具体语句如下:(因为是from dual,所以随便查那个库都可以)

select dbms_utility.data_block_address_file(291179792),dbms_utility.data_block_address_block(291179792),

dbms_utility.data_block_address_file(291179861),dbms_utility.data_block_address_block(291179861),      dbms_utility.data_block_address_file(291180314),dbms_utility.data_block_address_block(291180314),      dbms_utility.data_block_address_file(291180378),dbms_utility.data_block_address_block(291180378)

from dual;

再根据如下语句查这些块对应的对象是哪个

SELECT segment_type, owner, segment_name
  FROM dba_extents
 WHERE (file_id = 69 and 1772816 between block_id AND block_id + blocks - 1)
    or
       (file_id = 69 and 1772885 between block_id AND block_id + blocks - 1)
    or  
       (file_id = 69 and 1773338 between block_id AND block_id + blocks - 1)
    or
       (file_id = 69 and 1773402 between block_id AND block_id + blocks - 1)

如果对应的对象是lob对象的话,再查这个lob是属于哪个表

select e.owner, l.table_name, l.segment_name
        from dba_extents e, dba_lobs l
       where e.owner = l.owner
         and e.segment_name = l.segment_name
         and e.segment_type = 'LOBSEGMENT'
         and l.segment_name='SYS_LOB0001459936C00001$$';

停业务,重建表

如果是表的lob字段损坏的话,可以考虑重建这个表,如果表的数据量不大的话,可以先执行

alter system set events='10231 trace name context forever,level 10';

然后在create table as select * from 表这种方式重建表,重建索引,然后alter system set events '10231 trace name errorstack off'; 关闭跟踪。

如果表很大的话,可以先执行alter system set events='10231 trace name context forever,level 10';然后用数据泵导出导入表。然后alter system set events '10231 trace name errorstack off'; 关闭跟踪。(检查索引有效性)

如果业务不能停的话可以先将表重命名再重建或在导。

当时重建表的时候有这个报错

(create table T_CSL_CLSREPORT_bak0731 as select * from T_CSL_CLSREPORT不会报错,但是create table T_CSL_CLSREPORT as select * from T_CSL_CLSREPORT_bak0731 再建回去的时候会报下面的错)

解决方法可以参考链接:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/126119132

最后记得索引要重新建上,关闭跟踪

dbv 检查数据文件是否有坏块相关推荐

  1. ORACLE使用dbv工具检验数据文件是否有坏块

    使用dbv工具检验数据文件是否有坏块 dbv工具可以用来验证数据文件的有效性,在数据库恢复之前可以使用该命令对备份文件进行有效性检查, 防止因备份文件本身的问题导致数据库无法恢复. 当然,dbv命令也 ...

  2. 【dbv】使用dbv工具检验数据文件是否有坏块

    dbv工具可以用来验证数据文件的有效性,在数据库恢复之前可以使用该命令对备份文件进行有效性检查,防止因备份文件本身的问题导致数据库无法恢复. 当然,dbv命令也可以对在线的数据文件进行检查. 注意,d ...

  3. oracle dbv 离线,bbed和dbv检查数据文件结果不一致?

    本帖最后由 latch_free 于 2019-11-3 20:55 编辑 数据库执行查询,发现存在坏块: ERROR: ORA-01578: ORACLE data block corrupted ...

  4. Oracle 坏块 总结

    racle数据库出现坏块现象是指:在Oracle数据库的一个或多个数据块(一个数据块的容量在创建数据库时由db_block_size参数指定,缺省为8K)内出现内容混乱的现象.由于正常的数据块都有固定 ...

  5. oracle坏块修复

    Oracle数据库出现坏块现象是指:在Oracle数据库的一个或多个数据块(一个数据块的容量在创建数据库时由db_block_size参数指定,缺省为8K)内出现内容混乱的现象.由于正常的数据块都有固 ...

  6. 数据文件检验坏块的利器-dbv

    使用dbv工具检验数据文件是否有坏块 dbv工具可以用来验证数据文件的有效性,在数据库恢复之前可以使用该命令对备份文件进行有效性检查, 防止因备份文件本身的问题导致数据库无法恢复. 当然,dbv命令也 ...

  7. oracle 数据块 修复,案例:Oracle坏块 使用RMAN工具的命令clear标记数据块为corrupt 修复坏块...

    天萃荷净 运维DBA巡检发现数据文件中存在坏块,使用RMAN工具的命令clear标记数据坏块,使用bbed修复坏块 在rman中有隐藏的命令clear,可以标记数据块为corrupt,从而实现数据库坏 ...

  8. Oracle corrupt block(坏块) 详解

    转自:http://blog.csdn.net/tianlesoftware/article/details/5024966 一. 坏块说明 1.1 相关链接 在看坏块之前,先看几个相关的链接,在后面 ...

  9. oracle 提示存在lob,Oracle数据库出现ORA-19566 LOB坏块的处理记录

    1.故障现象: 在晚上的生产库自动备份时,备份失败,出现以下错误提示: RMAN-03009: failure of backup command on c1 channel at 06/11/202 ...

  10. 一道面试题:遇到大规模Oracle坏块该怎么处理?

    最近一两个月,一直有场景化运维.场景化大数据分析的声音围绕在耳畔,以Gdevops全球敏捷运维峰会杭州站上新炬网络执行副总裁程永新的"一切没有场景驱动的运维平台建设都是假大空!"最 ...

最新文章

  1. linux 下使用crontab 定时打包日志并删除已被打包的日志
  2. 变分法理解1——泛函简介
  3. VBScript是什么?有什么优缺点?
  4. Java 根据枚举的名字得到枚举的实例
  5. 【转】android fragment 博客 学习
  6. volatile的总结
  7. Android init.rc on property
  8. java.util.concurrent 同步器框架详解
  9. 妙!云服务器远程登录,本地听声音
  10. dubbo中 provider和 comsumer端timeout的设置区别
  11. 怎么查看笔记本内存条型号_笔记本如何加内存条之如何查看笔记本内存品牌和型号...
  12. 签到方式出“新招”!人脸识别考勤系统
  13. 三菱伺服电机编码器故障判断方法
  14. redis查看某一个key的大小_redis查询key的内存大小
  15. 如何设计一个简单的KV数据库
  16. 史上最详细Mysql免安装版教程
  17. http请求返回302处理方案
  18. gitlab批量下载projects
  19. AD7656六通道同步采集出现数据串通道的问题处理
  20. 电力电子技术第二章要点

热门文章

  1. Objective-C 入门篇
  2. win7计算机高级还原,最好用的win7一键恢复64位方法
  3. 横渡办公室里的银河:一座名为企业智慧屏的桥
  4. 根据列表内车牌号,统计各省市车牌占有量
  5. 《微观经济学》博弈论入门:囚徒困境、智猪博弈、性别战、斗鸡博弈
  6. 计算机故障报警声2声,电脑开机报警声音2短4短是什么問題?
  7. 搜狗输入法界面简化设置
  8. plot 串口助手,DataScope软件的数据,导入matlab绘图。温度曲线
  9. Educational Codeforces Round 118 (Rated for Div. 2)
  10. 回归分析中f多少合适_问下,spss回归分析得出的R方值、F值、t值各有何含义,数值大小有何含义?...