1.什么是块损坏:

所谓损坏的数据块,是指块没有採用可识别的 Oracle 格式,或者其内容在内部不一致。

通常情况下,损坏是由硬件故障或操作系统问题引起的。Oracle 数据库将损坏的块标识为“逻辑损坏”或“介质损坏”。

假设是逻辑损坏,则是 Oracle 内部错误。

Oracle 数据库检測到不一致之后,就将逻辑损坏的块标记为损坏。假设是介质损坏,则是块格式不对;从磁盘读取的块不包括有意义的信息。

通过恢复块,或者删除包括损坏块的数据库对象(或同一时候採用这两种方式)。能够修复介质损坏的块。

假设介质损坏是由硬件故障引起的,则仅仅有修复了硬件故障后,才干彻底解决这个问题。

仅仅要对块运行读或写操作。就会运行下列一致性检查:

--块版本号

--快速缓存中的 DBA(数据块地址)值与块缓冲区中的 DBA 值比較的结果

--块校验和(假设启用)

损坏的块被标识为下面类别:

--介质损坏

--逻辑(或软件)损坏

2.块损坏故障现象:ORA-01578

ORA-01578 错误:“ORACLE data block corrupted (file # %s, block # %s)”:

--发现损坏的数据块时生成此信息

--始终返回相对文件号和块号

--返回到发出查询的会话(该查询在发现损坏时运行)

--显示在 alert.log 文件里

普通情况下。ORA-01578 错误是由硬件问题引起的。

假设 ORA-01578 错误始终返回同样的參数,则最可能的原因是块介质损坏。

假设返回的參数每次都有变化,则可能存在硬件问题。应检查内存和页面空间。并检查 I/O 子系统,以便查找有问题的控制器。

注:ORA-01578 会返回相对文件号,但随之出现的 ORA-01110 错误会显示绝对文件号。

3.怎样处理损坏

--检查预警日志和操作系统日志文件。

--使用可用的诊断工具,找出损坏的类型。

--多次执行检查功能,确定错误是否持续存在。

--依据须要。从损坏的对象中恢复数据。

--解决硬件问题:

内存条、

磁盘控制器、

磁盘

--依据须要。从损坏的对象中恢复或还原数据。

始终尝试确定错误是否持续出现。多次执行 ANALYZE 命令;假设可能,可执行关闭再启动操作,然后再次尝试早先发生问题的操作。查找是否有其他损坏。假设发现一个损坏的块。则可能还存在其他损坏的块。

硬件故障必须马上解决。

遇到硬件问题时,应与供应商取得联系,在检查并修复了计算机后再继续工作。此时应执行一次全面的硬件诊断会话。

硬件故障的类型可能会有非常多种:

--I/O 硬件或固件故障

--操作系统

--I/O 或快速缓存问题

--内存或分页问题

--磁盘修复有用程序

4.实时验证块完整性:DB_BLOCK_CHECKING :

可通过将 DB_BLOCK_CHECKING 初始化參数设置为 TRUE 启用数据库块检查。

仅仅要改动了数据块或索引块,此项检查就会检查数据块和索引块的内部一致性。

DB_BLOCK_CHECKING 是一个动态參数。可使用 ALTER SYSTEM SET 语句改动此參数。对于系统表空间,将始终启用块检查。块检查一般会产生 1% 到 10% 的开销,详细取决于工作量。正在运行的更新或插入操作越多,运行块检查的开销就会越高。DB_BLOCK_CHECKING 有下面四个可能的值:

--OFF:除 SYSTEM 之外的全部表空间都不运行块检查。

--LOW:在内存中块的内容发生更改之后(比如。在运行 UPDATE 或 INSERT 语句以及在运行磁盘上读取后)。运行主要的块头检查。

--MEDIUM:运行全部 LOW 检查, 对全部不是按索引组织的表块运行语义块检查。

--FULL:运行全部 LOW 和 MEDIUM 检查, 对索引块运行语义检查。

初始化參数 DB_BLOCK_CHECKING:

--在对每一个块运行自我一致性检查时,控制检查的处理程度

--可防止内存和数据损坏

--可使用 ALTER SESSION 命令或 ALTER SYSTEM DEFERRED 命令进行设置

5.块介质恢复

大多数情况下。第一次遇到损坏时,数据库会将块标记为介质损坏。然后将其写到磁盘上。

在该块得到恢复之前,不能对其运行不论什么兴许读取操作。

仅仅能对标记为损坏或者未通过损坏检查的块运行块恢复。

可使用 RMAN RECOVER...BLOCK 命令运行块介质恢复。默认情况下,RMAN 会在闪回日志中搜索好的块副本。然后在全然备份或 0 级增量备份中搜索块。假设 RMAN 找到了好的副本。则会还原这些副本,并对块运行介质恢复。

块介质恢复仅仅能将重做日志用于介质恢复,不能使用增量备份。

V$DATABASE_BLOCK_CORRUPTION 视图显示由数据库组件(如 RMAN 命令、ANALYZE、dbv、SQL 查询等)标记为损坏的块。对于下面类型的损坏此视图会添加对应的行:

--物理/介质损坏:数据库无法识别块:校验和无效、块内容所有为零或者块头不完整。默认情况下。物理损坏检查处于启用状态。

--逻辑损坏:块的校验和有效,块头和块尾也匹配。可是内容不一致。块介质恢复不能修复逻辑块损坏。默认情况下,逻辑损坏检查处于禁用状态。通过指定 BACKUP、RESTORE、RECOVER 和 VALIDATE 命令的 CHECK LOGICAL 选项。能够启用逻辑损坏检查。

块介质恢复:

--减少平均恢复时间 (MTTR)

--提高介质恢复期间的可用性

--恢复期间数据文件保持联机状态

--仅仅有正在恢复的块是不可訪问的

--使用 RMAN RECOVER...BLOCK 命令调用

--使用闪回日志以及全然备份或 0 级备份还原块

--使用重做日志运行介质恢复

--V$DATABASE_BLOCK_CORRUPTION 视图显示标记为损坏的块

6.块介质恢复的先决条件

--目标数据库必须处于 ARCHIVELOG 模式

--包括损坏块的数据文件的备份必须是全然备份或 0 级备份。

--要使用代理副本,必须先将它们还原到非默认位置

--RMAN 仅仅能使用归档的重做日志进行恢复

--要使用闪回日志。必须启用闪回数据库

下面先决条件适用于 RECOVER ... BLOCK 命令:

--目标数据库必须以 ARCHIVELOG 模式执行。而且必须是打开的。或是使用当前控制文件装载的。

--包括损坏块的数据文件备份必须是全然备份或 0 级备份,不能是代理副本。假设仅仅存在代理副本备份。则可将它们还原到磁盘上的非默认位置。在这样的情况下。RMAN 会觉得它们是数据文件副本,在块介质恢复过程中会在当中搜索块。

--RMAN 仅仅能使用归档的重做日志进行恢复。

RMAN 不能使用 1 级增量备份。块介质恢复不能恢复丢失或无法訪问的归档重做日志。但有时能够恢复丢失的重做记录。

--必须在目标数据库上启用闪回数据库。这样 RMAN 才干在闪回日志中搜索损坏块的好副本。假设启用了闪回事件记录,而且此事件记录包括损坏块的较旧但未损坏的版本号,则 RMAN 能够使用这些块,因而可能会提高恢复的速度。

7.RECOVER...BLOCK 命令

--确定包括要进行恢复的块的备份

--读取备份并将请求的块累积到内存缓冲区

--必要时。通过从备份中读取归档日志来管理块介质恢复会话

RECOVER DATAFILE 6 BLOCK 3;  Recover a single block

RECOVER                   Recover multiple blocks

DATAFILE 2 BLOCK 43   in multiple data files

DATAFILE 2 BLOCK 79

DATAFILE 6 BLOCK 183;

RECOVER CORRUPTION LIST;         Recover all blocks logged in                     V$DATABASE_BLOCK_CORRUPTION

恢复单个块:

在进行块恢复之前,必须确定损坏的块。普通情况下,会在下面位置中报告块损坏:

--LIST FAILURE、VALIDATE 或 BACKUP ...VALIDATE 命令的结果

--V$DATABASE_BLOCK_CORRUPTION 视图

--标准输出中的错误消息

--预警日志文件和用户跟踪文件(在 V$DIAG_INFO 视图中标识)

--SQL ANALYZE TABLE 和 ANALYZE INDEX 命令的结果

--DBVERIFY 有用程序的结果

比如,可能会在用户跟踪文件里发现下面消息:

ORA-01578: ORACLE data block corrupted (file # 7, block # 3)

ORA-01110: data file 7: '/oracle/oradata/orcl/tools01.dbf'

ORA-01578: ORACLE data block corrupted (file # 2, block # 235)

ORA-01110: data file 2: '/oracle/oradata/orcl/undotbs01.dbf'

--确定了块以后,在 RMAN 提示符下执行 RECOVER ...BLOCK 命令。指定损坏块的文件号和块编号。

RECOVER

DATAFILE 7 BLOCK 3

DATAFILE 2 BLOCK 235;

8.使用10231事件进行处理:

(块损坏但没有备份,没办法回复的情况下)

在sqlplus中运行例如以下命令:

ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10';

然后导出该表:

exp test/test file=t.dmp tables=t;

在数据库中删除该表

drop table t;

然后导入

imp test/test file=t.dmp tables=t;

最后关闭10231事件:

ALTER SYSTEM SET EVENTS='10231 trace name context off';

Oracle 数据块损坏与恢复具体解释的更多相关文章

  1. Oracle数据块损坏的恢复实例

    测试环境:11.2.0.4 1.构建数据块损坏的测试环境 2.有备份:常规恢复坏块 3.无备份:跳过坏块 1.构建数据块损坏的测试环境 1.1 创建测试表 --Create Table t_test ...

  2. java.sql.SQLException: ORA-01578: ORACLE 数据块损坏问题解决办法

    错误信息: java.sql.SQLException: ORA-01578: ORACLE 数据块损坏 (文件号 17, 块号 315703) ORA-01110: 数据文件 17: 'D:\ORA ...

  3. Oracle数据块损坏篇之10231内部事件

    实验:某个分区数据块损坏,不完全恢复此分区表数据 背景:数据库没有有效备份,某个分区中有数据块损坏. 要求:最大限度恢复此分区数据. 环境:RHEL 6.4 + Oracle 11.2.0.4 1. ...

  4. ORA-01578: ORACLE 数据块损坏 (文件号 10, 块号 57896)ORA-01110: 数据文件 10: '/data/oradata/prod35.dbf'

    https://community.oracle.com/thread/3540795 概述 ------------- 数据库坏块(corruption) 的类型可以按照坏块所属对象的不同,分为用户 ...

  5. ORA-01578: ORACLE 数据块损坏 (文件号 13, 块号 2415081) ORA-01110: 数据文件XXXXXX

    1.使用DBV检查数据文件,在cmd执行:dbv file='E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' blocksize=8192:然后等待检测结 ...

  6. [转]Oracle数据块体系的详细介绍

    数据块概述Oracle对数据库数据文件(datafile)中的存储空间进行管理的单位是数据块(data block).数据块是数据库中最小的(逻辑)数据单位.与数据块对应的,所有数据在操作系统级的最小 ...

  7. oracle数据块核心剖析

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp57 数据块(Oracle Data Blocks),本文简称为" ...

  8. 数据块损坏(block corruption)

    分为物理损坏和逻辑损坏-物理损坏一般指数据块头部不可以访问.数据块校验值不合法,数据块格式不再是oracle承认的格式-逻辑损坏一般是在物理性结构完整的情况下,数据的内容在含义上不正确,比如保存了不允 ...

  9. Oracle 数据块

    以emp表为例 SYS@ prod>select * from scott.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ...

随机推荐

  1. [LnOI2019]长脖子鹿省选模拟赛 东京夏日相会

    这里来一发需要开毒瘤优化,并且几率很小一遍过的模拟退火题解... 友情提醒:如果你很久很久没有过某一个点,您可以加上特判 可以像 P1337 [JSOI2004]平衡点 / 吊打XXX 那道题目一样 ...

  2. 数据库操作通用函数,增强可重复利用性能C#,asp.net.sql2005

    using System;using System.Data;using System.Data.SqlClient; namespace com.hua..li{ /// <summary&g ...

  3. 6月7号shiro

    Retains all Cache objects maintained by this cache manager :保留此缓存管理器维护的所有缓存对象 Destroyable可毁灭的 retain ...

  4. SQLServer2008 关于数值字段列的累计

    create table #temp20110610(     id int identity(1,1),     date varchar(8),     qty float) insert int ...

  5. Android @Field parameters can only be used with form encoding

    今天在学习Retrofit的时候,当post请求时 public interface NewsDataService { @POST("news/list") Call<Ne ...

  6. 苹果双系统win8.1遇到的一些问题

    MacBook air是一款不错的电脑,详细没研究就不叙述好与坏了.只此记录自己使用这款笔记本遇到的问题. 一.安装双系统win8.1 1.下载镜像文件—>拷贝到ios内存中,一个8GU盘.ht ...

  7. Excel 批量出来数据

    try { string sheetname = TextBox1.Text.Trim(); HttpPostedFile upLoadPostFile = FileUpload1.PostedFil ...

  8. 【Oracle】rollup函数

    当我们在做报表统计的时候,很多时候需要用到‘合计’这个功能,比如我们想得到如下格式的报表: 这张表是按照deptno分组,然后按照deptno分组合计.rollup函数可以完美的解决这个问题. 1.建 ...

  9. Eclipse Rap开发 异步刷新UI处理

    1.Display.getCurrent()获取的是当前线程的display对象,如果当前在非UI线程中那么获取到的display对象为空:      一般Display.getCurrent() 用 ...

  10. 复习java基础第三天(集合:Collection、Set、HashSet、LinkedHashSet、TreeSet)

    一.Collection常用的方法: Java 集合可分为 Set.List 和 Map 三种体系: Set:无序.不可重复的集合. List:有序,可重复的集合. Map:具有映射关系的集合. Co ...