• 【转载】 使用rman进行坏块修复(ORA-01578、ORA-01110)


    【转自】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:oracleproduct10.2.0adminorcldumporcl_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:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.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:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.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:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.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:ORACLEPRODUCT10.2.0ORADATAORCLSYSAUX01.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;

  • 相关阅读:
    旺旺狗
    写在父亲离世周年
    老家老院
    玉米粒自传
    记念父亲
    26年前来蒙阴
    玉米粒自传
    pywin32安装
    linux中源码安装mysql
    在Linux上搭建禅道
  • 原文地址:https://www.cnblogs.com/dudu-java/p/6656539.html
Copyright © 2020-2023  润新知