【转自】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. You must have a TTY to run sudo

    1.方法一,给命令行添加tty ssh -t user@foo.com 2.使用sudo visudo修改配置: Defaults:user !requiretty 表示用户user使用sudo命令时 ...

  2. 十二.spring-boot使用spring-boot-freemarker

    ①.在springMVC中:它代表着view层组件 ②.为什么使用freemarker:简单容易学.逻辑分明 ③.freemarker优点:它不依赖servlet.网络或者web环境 一.创建一个ma ...

  3. 你以为border-radius只是圆角吗?【各种角度】

    border-radius,国内翻译成圆角,你可能以为这个属性就是用来画圆角,没错,但是除此之外,它还可以做点别的事情. radius其实指的是边框所在圆的半径,这个CSS3属性不仅能够创建圆角,还可 ...

  4. python 将编码转为汉字

    print '\u57fa\u7840\u5316\u5de5\u4e1a'.decode('unicode-escape') print urllib.unquote("%C0%FA%CA ...

  5. [视频解说]Java(JDK的下载安装及第一个程序执行)

    (JDK的下载安装及第一个程序执行) 内容:Java JDK 的安装以及HelloWorld 程序的执行 欢迎童鞋们前往围观 http://v.youku.com/v_show/id_XODA3Mzk ...

  6. Python Matplotlib绘制气温图表

    代码中数据从 www.wunderground.com/history/ 下载 #coding=utf-8 import csv from datetime import datetime from ...

  7. 极客技术专题【011期】:EasyUI初级教程

    来源:GBin1.com 技术专题:EasyUI初级教程 分享人:极客标签技术编辑 - html580(请站内关注分享人) 资深Web前端工程师,HTML580创始人,目前就职于广州一间软件公司.多年 ...

  8. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何在同一台PC上运行多个TwinCAT程序

    右击桌面右下角的TC2图标,切换到PLC Configuration,然后在Plc Settings中设置数量为4(TC2最多可以运行的数量是4个),然后点击Apply   可能需要输入登录用户名和密 ...

  9. iOS程序发布测试-生成ad hoc证书

    转自: http://blog.sina.com.cn/s/blog_68444e230100srdn.html iOS程序发布测试3-生成ad hoc证书 iOS证书分2种,1种是开发证书,用来给你 ...

  10. php求斐波那契数列

    <?php function feibonaqi(){ //参数$num表示为第$num个数之前的所有斐波那契数列 $arr = array(); //定义一个空变量用来存放斐波那契数列的数组 ...