【转自】http://blog.itpub.net/21256317/viewspace-1062055/

使用rman进行坏块修复(ORA-01578ORA-01110

2012年的一天,处理的一个坏块问题。

环境:

Windows server 2003

Oracle 10.2.0.3 单实例

医院HIS系统

故障:

医药行业的某用户的一台数据库服务器(部署的HIS系统)断电后,开启数据库,某一部分业务无法操作,查看告警日志发现类似如下的坏块报错信息:

Dump file d:\oracle\product\10.2.0\admin\orcl\bdump\orcl_j002_1872.trc部分内容如下:
Mon Jul 02 22:17:29 2012
ORACLE V10.2.0.3.0 - Production vsnsta=0
vsnsql=14 vsnxtr=3
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
Windows Server 2003 Version V5.2 Service Pack 2
CPU                 : 8 - type 586, 2 Physical Cores
Process Affinity    : 0x00000000
Memory (Avail/Total): Ph:14514M/16382M, Ph+PgF:16031M/17822M, VA:2626M/4095M
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 28
Windows thread id: 1872, image: ORACLE.EXE (J002)
*** 2012-07-02 22:17:29.718
*** ACTION NAME:(GATHER_STATS_JOB) 2012-07-02 22:17:29.703
*** MODULE NAME:(DBMS_SCHEDULER) 2012-07-02 22:17:29.703
*** SERVICE NAME:(SYS$USERS) 2012-07-02 22:17:29.703
*** SESSION ID:(147.1) 2012-07-02 22:17:29.703
ORA-00604: error occurred at recursive SQL level 2
ORA-01578: ORACLE data block corrupted (file # 1, block # 71013)
ORA-01110: data file 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
*** 2012-07-02 22:17:29.734
GATHER_STATS_JOB: GATHER_TABLE_STATS('"SYSMAN"','"MGMT_SEVERITY"','""', ...)
ORA-00604: error occurred at recursive SQL level 2
ORA-01578: ORACLE data block corrupted (file # 1, block # 71013)
ORA-01110: data file 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
*** 2012-07-02 22:17:52.515
GATHER_STATS_JOB: GATHER_TABLE_STATS('"SYS"','"HISTGRM$"','""', ...)
ORA-01578: ORACLE data block corrupted (file # 1, block # 71013)
ORA-01110: data file 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
*** 2012-07-02 22:20:55.312
GATHER_STATS_JOB: GATHER_TABLE_STATS('"ZLHIS"','"病人医嘱记录"','""', ...)
ORA-00604: error occurred at recursive SQL level 2
ORA-01578: ORACLE data block corrupted (file # 3, block # 56437)
ORA-01110: data file 3: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF'
……

分析:

SYSTEM和SYSAUX表空间数据文件出现坏块。

先查看损坏的是什么类型的数据库对象:

SQL>select  owner,segment_name,segment_type from dba_extents where file_id=1 and 71013 between block_id and block_id+blocks-1;

这是sys用户的一个簇,还有一个是sys 用户的一个索引。

处理:

还好系统是归档模式,有rman备份,这样处理就比较简单了,使用blockrecover 对坏块进行在线修复。

rman target /

RMAN> blockrecover datafile 1 block 71013;

RMAN> blockrecover datafile 3 block 56437;

通常使用rman进行坏块修复的步骤:

适应场景:归档模式,有近期数据库的rman全备份

用dbv实用程序对该文件做数据块的检验:(此处最好使用绝对路径,否则可能报错DBV-00600 Fatal Error – [21] [2] [0] [0])

$ dbv file=/u01/app/oracle/oradata/ora10g/system01.dbf  blocksize=8192

对数据库中的坏块进行验证。

RMAN> backup validate database;

检验后检查视图 V$DATABASE_BLOCK_CORRUPTION

SQL> select * from v$database_block_corruption;

为了不影响现有业务的运行,通过RMAN使用oracle BMR(Block Media Recover).

BMR可以比使用restore database节省大量的宕机时间,在恢复期间只有坏块的文件不可访问,而其他可以继续访问。

RMAN> blockrecover datafile 10 block 36,85,126,321;

还可以通过blockrecover corruption list进行块的恢复,这是在大量块损坏时使用,前提是先执行backup validate database,在V$DATABASE_BLOCK_CORRUPTION里有对应的坏块的列表。

RMAN> blockrecover corruption list;

【转载】 使用rman进行坏块修复(ORA-01578、ORA-01110)的更多相关文章

  1. 【转】基于RMAN实现坏块介质恢复(blockrecover)

    本文转自:乐沙弥的世界 对于物理损坏的数据块,我们可以通过RMAN块介质恢复(BLOCK MEDIA RECOVERY)功能来完成受损块的恢复,而不需要恢复整个数据库或所有文件来修复这些少量受损的数据 ...

  2. 基于rman的坏块恢复

    转载请注明出处 http://blog.csdn.net/guoyjoe/article/details/30965303   实验过程例如以下: 1.使用rman备份全库 Recovery Mana ...

  3. Oracle - 坏块修复(一)

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

  4. Oracle--DBV命令行工具用法详解及坏块修复

    一,介绍 DBV(DBVERIFY)是Oracle提供的一个命令行工具,它可以对数据文件物理和逻辑两种一致性检查.但是这个工具不会检查索引记录和数据记录的匹配关系,这种检查必须使用analyze va ...

  5. 使用 DBMS_REPAIR 修复坏块

    对于Oracle数据块物理损坏的情形,在我们有备份的情况下可以直接使用备份来恢复.对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等.对于这几种方式我们需要 ...

  6. 无备份时用dbms_repair恢复坏块的方法

    份的情况下可以直接使用备份来恢复. 对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等. 对于这几种方式我们需要实现基于数据库以及文件级别的恢复.RMAN同 ...

  7. [Oracle]ORA-600[kdBlkCheckError]LOB坏块处理

    [Oracle]ORA-600[kdBlkCheckError]LOB坏块处理 客户环境报如下错误: ORA - 00600: Internal error code, arguments: [kdB ...

  8. ORACLE 坏块的模拟和查看

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

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

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

随机推荐

  1. 手Q游戏中心上线 完美释放娱乐基因

        今年A股市场上手游概念股的表现可谓“独当一面”,不少和手游沾边的公司股价都翻了倍.在笔者看来,这些手游企业的股价明显高得离谱,这轮行情可以证明资本市场对手游的关注度非常高,但并不意味着这些手游 ...

  2. C# 中的.pdb/ .vshost.exe/ .vshost.exe.manifest文件

    转自 C# 中的.pdb/ .vshost.exe/ .vshost.exe.manifest文件讨论 pdb文件: 英文全称:Program Database File 中文全称:程序数据库 文件 ...

  3. Oracle下的ArcSDE创建的空间数据库的备份与恢复

    对Oracle下ArcSDE创建的空间数据库, 整体备份.恢复或迁移. 一.imp和exp命令方式 1.1 数据库完整备份 检查数据库字符集是否一致 SQL>select userenv(‘la ...

  4. Vue-router路由基础总结(二)

    一.命名路由 有时我们通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候.你可以在创建 Router 实例的时候,在 routes 配置中给某个路由设置名称. 我 ...

  5. JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序

    定义:用本地特定的顺序来比较两个字符串. 语法:stringObject.localeCompare(target) 参数:target——要以本地特定的顺序与 stringObject 进行比较的字 ...

  6. http://my.oschina.net/China2012/blog/178655

    http://my.oschina.net/China2012/blog/178655 http://git.oschina.net/huangyong/smart-framework

  7. [Tools] Add a Dynamic Tweet Button to a Webpage

    To let people easily share the patio11bot, we'll add a "Tweet" button to the page. You can ...

  8. Swift教程之运算符

    import Foundation //4.复合赋值操作符 var a = 1 a += 2 //一元减运算符(一个数值前加了符号-,叫作一元减运算符) let three = 3 let minus ...

  9. swift 常用第三方库

    1.Network: Alamofire:著名的AFNetworking网络基础库Swift版  -https://github.com/Alamofire/Alamofire SwiftyJSON: ...

  10. Cocos2d-x设置吞没单击属性来避免精灵重叠被点击后的事件续传

    代码如下: Size visibleSize = Director::getInstance()->getVisibleSize(); /* create two sprites which h ...