一、背景

今天有用户反映数据库连不上了,查看日志发现有数据库坏块。

查看数据库日志,有如下报错:

ORA-01578: ORACLE , 93642)
ORA-01110: 1: '/oracle/app/orcldata/orcl/system01.dbf'
ORACLE Instance orcl (pid = 13) - Error 1578 encountered while recovering transaction (89, 2) on object 226.
Errors in file /oracle/app/diag/rdbms/orcl/orcl/trace/orcl_smon_3345.trc:

二、查询坏块方法

(1)通过trc文件查看

查看上面err的具体trc:

如上,坏块信息很明确。

(2)简单语句查询

select * from v$database_block_corruption;

(3)DBV查看坏块

dbv file=system01.dbf  blocksize=8192

有一个坏块

三、坏块的处理

根据文件号和块号查出损坏的是对象,表还是LOB segment

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

其中1是文件号,93642是block号

(1)索引损坏

#如果被损坏的块是索引,通常可以通过索引重建来解决

alter index indexname rebuild;

(1)表损坏

segment_type为table

#可以使用10231事件忽略坏块,然后使用CTAS方式重建表最后rename table,别忘记rebuild index

alter session SET EVENTS '10231 trace name context forever,level 10';

create table tab_new as select * from tab;

rename tab to tab_bak;

rename tab_new to new;

alter index indexname rebuild;

alter session SET EVENTS '10231 trace name context off';

注:根据表名查看索引名

SELECT * FROM ALL_INDEXES WHERE TABLE_NAME='IDL_CHAR$';

使用rman工具恢复:

---使用rman工具的blockrecover 

blockrecover datafile xx block xx;--修复单个坏块
blockrecover corruption list;--修复全部坏块

  

(3)LOB segment损坏

如果损坏的是LOB segment

#先找出segment信息
select owner, segment_name, segment_type from dba_extents where file_id = 38 and 295563 between block_id and block_id + blocks - 1; #输出如下
owner=HGHIS
segment_name=SYS_LOB0000119493C00006$$
segment_type=LOBSEGMENT #找到表明和LOB字段
select table_name, column_name from dba_lobs where segment_name = 'SYS_LOB0000119493C00006$$' and owner = 'HGHIS'; #输出如下
table_name = EMR_CASE
column_name = WORD #找到坏块的bad rowid,使用以下plsql脚本
create table bad_rows (row_id ROWID,oracle_error_code number);

oracle坏块问题的处理的更多相关文章

  1. Oracle - 坏块修复(一)

    一.概述 本文将介绍如何模拟坏块,以及出现坏块该如何修复.实验分为以下几个步骤. 1. 表出现坏块 2. 索引出现坏块 二.环境准备 本实验都是在oracle 11G归档模式下进行. 1. 准备相关表 ...

  2. ORACLE 坏块的模拟和查看

    坏块的模拟和查看使用bbed工具修改数据文件的块,然后使用dbv和rman工具查看坏块. 1.创建数据:根据dbv查看没有坏块Total Pages Marked Corrupt : 0create ...

  3. oracle坏块处理记录

    1. 执行sql:select count(distinct id) from bw_fpzxx ,报错如下: ORA-01578: ORACLE 数据块损坏 (文件号 16, 块号 195428)O ...

  4. [Oracle]坏块处理:确认坏块的对象

    如果已经知道 FILE#,BLOCK#,则 可以通过如下查询来看: SQL> SELECT SEGMENT_TYPE,OWNER||'.'||SEGMENT_NAME FROM DBA_EXTE ...

  5. Oracle数据库坏块的恢复

    模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发 ...

  6. 使用BBED模拟Oracle数据库坏块

    BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢 ...

  7. 对Oracle数据库坏块的理解

    1.物理坏块和逻辑坏块 在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那就对应到了我们今天要要说 ...

  8. Oracle corrupt block(坏块) 详解

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

  9. ORACLE模拟一个数据文件坏块并使用RMAN备份来恢复

    1.创建一个实验用的表空间并在此表空间上创建表 create tablespace blocktest datafile '/u01/oradata/bys1/blocktest.dbf' size ...

随机推荐

  1. scrapy中css选择器初识

    由于最近做图片爬取项目,涉及到网页中图片信息的选择,所以边做边学了点皮毛,有自己的心得 百度图库是ajax加载的,所以解析json数据即可 hjsons = json.loads(response.b ...

  2. (计算几何基础 叉积) nyoj68-三点顺序

    68-三点顺序 内存限制:64MB 时间限制:1000ms 特判: No通过数:27 提交数:43 难度:3 题目描述: 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断 ...

  3. SQL Server 序列(SEQUENCE)使用

    众所周知,在之前的SQL SERVER版本中,一般采用GUID或者IDENTITY来作为标示符,但是IDENTITY是一个表对象,只能保证在一张表里面的序列,当我们遇到以下情况时, 如上表,我们需要在 ...

  4. python 包和模块间的引入

    ##############################总结####################### 主要内容: 1. 模块 2. import 3. from xxx import xxx ...

  5. jmeter(高并发测试)

    1.首先jmeter需要JDK8以上得运行环境 2.下载jmeter,官方网址:http://jmeter.apache.org/download_jmeter.cgi 3.安装jmeter.jmet ...

  6. wordcloud制作logo

    准备工作: 1.txt文本(ASCII) 2.参照图(色差大或自行调整扫描参数) 3.pycharm安装wordcloud 源码: from os import path from PIL impor ...

  7. [复现]蝉知cms 5.6 前台注入

    https://share.weiyun.com/5cbff06337d32a9748d0f1bead5ddbd5 前台注入 在/chanzhieps/system/module/cart/contr ...

  8. Linux常用bash命令

    目录 bash命令 基础操作 export | whereis | which | clear 文件操作 ls | touch | cat | more | head | tail | mv | cp ...

  9. None.js 第四步 事件驱动程序

    Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件 // 导入events模块 var events = require ...

  10. 持续集成CI相关的几个概念

    持续集成 https://en.wikipedia.org/wiki/Continuous_integration 为什么要持续? 持续集成, 可以避免集成地狱(由于工作的源码 和 库中的源码的差异导 ...