zoukankan      html  css  js  c++  java
  • BBED制作空块并用rman恢复(修改坏块前一定要做rman备份!!!)

    一、BBED(Oracle Block Browerand EDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接。
    二、配置BBED
    oracle11g缺失bbed的文件,需要将oracle10g的文件复制到oracle11g的相应目录
    三、操作
    在10g的数据库中
    cd /u01/oracle/product/10.2.0/rdbms/lib
    [oracle@dba lib]$ scp ssbbded.o sbbdpt.o oracle@10.10.6.51:/home/oracle
    cd /u01/oracle/product/10.2.0/rdbms/mesg

    [oracle@dba mesg]$ scp bbedus.msb oracle@10.10.6.51:/home/oracle

    在11g数据库中
    [oracle@dbtest123 ~]$ ls
    bbedus.msb sbbdpt.o ssbbded.o

    cp bbedus.msb $ORACLE_HOME/rdbms/mesg
    cp sbbdpt.o ssbbded.o $ORACLE_HOME/rdbms/lib

    [oracle@dbtest123 lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed

    [oracle@dbtest123 lib]$ cp bbed $ORACLE_HOME/bin
    四、使用

    首先做个rman全备

    $ bbed
    Password:
    BBED是Oracle 内部使用的命令,所以Oracle 不提供技术支持。 为了安全,BBED设置了口令保护,默认密码为blockedit。


    SQL> select file#||' '||name||' '||bytes from v$datafile ;


    bbed parfile=/home/oracle/bbed_parameter.txt

    BBED> show
    FILE# 1
    BLOCK# 1
    OFFSET 0
    DBA 0x00400001 (4194305 1,1)
    FILENAME /u01/app/oracle/oradata/testdb/system01.dbf
    BIFILE bifile.bbd
    LISTFILE /home/oracle/xxzx/BBED/psdb_file.txt
    BLOCKSIZE 8192
    MODE Edit
    EDIT Unrecoverable
    IBASE Dec
    OBASE Dec
    WIDTH 80
    COUNT 512
    LOGFILE log.bbd
    SPOOL No

    BBED> info all
    File# Name Size(blks)
    ----- ---- ----------
    1 /u01/app/oracle/oradata/testdb/system01.dbf 134400
    2 /u01/app/oracle/oradata/testdb/sysaux01.dbf 78080
    3 /u01/app/oracle/oradata/testdb/undotbs01.dbf 245632
    4 /u01/app/oracle/oradata/testdb/users01.dbf 52320
    5 /home/oracle/xxzx/CALS7_DATA.dbf 150016
    6 /home/oracle/xxzx/CALS7_CONT.dbf 414720

    BBED>

    五、制作坏块

    select
    dbms_rowid.ROWID_RELATIVE_FNO(rowid) fno,
    dbms_rowid.ROWID_BLOCK_NUMBER(rowid) bno,
    dbms_rowid.ROWID_ROW_NUMBER(rowid) rowno,
    a from scott.test;


    BBED> set dba 4,151
    DBA 0x01000097 (16777367 4,151)

    BBED> dump /v dba 9,134 offset 0

    BBED> modify /x 12345678 dba 9,134 offset 0


    BBED> sum dba 9,134 apply

    SYS@testdb> alter system flush buffer_cache;

    System altered.
    SCOTT@testdb> select * from t1;
    ERROR:
    ORA-01578: ORACLE data block corrupted (file # 4, block # 151)
    ORA-01110: data file 4: '/u01/app/oracle/oradata/testdb/users01.dbf'
    坏块制作成功。
    六、通过dev工具检查

    oracle@cpxyts01:~> dbv file= /u01/app/oracle/oradata/testdb/users01.dbf

    发现坏块


    Total Pages Marked Corrupt : 1

    七、通过rman检查验证坏块

    RMAN> backup check logical validate database;


    validate found one or more corrupt blocks
    See trace file /u01/app/oracle/diag/rdbms/testdb/testdb/trace/testdb_ora_10686.trc for details
    channel ORA_DISK_1: starting full datafile backup set
    channel ORA_DISK_1: specifying datafile(s) in backup set
    including current control file in backup set
    including current SPFILE in backup set
    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
    List of Control File and SPFILE
    ===============================
    File Type Status Blocks Failing Blocks Examined
    ------------ ------ -------------- ---------------
    SPFILE OK 0 2
    Control File OK 0 704
    Finished backup at 21-JAN-19

    发现有坏块信息
    查看 /u01/app/oracle/diag/rdbms/testdb/testdb/trace/testdb_ora_10686.trc
    发现Data in bad block:
    type: 18 format: 4 rdba: 0x01000097
    last change scn: 0x0000.00337329 seq: 0x1 flg: 0x06
    spare1: 0x56 spare2: 0x78 spare3: 0x0
    consistency value in tail: 0x73290601
    check value in block header: 0xf017
    computed block checksum: 0x0
    坏块上有数据

    单独检查数据文件
    RMAN> backup check logical validate datafile 4;
    通过数据库中的视图v$database_block_corruption查看坏块
    SYS@testdb> select file#,block#,blocks from v$database_block_corruption;

    FILE# BLOCK# BLOCKS
    ---------- ---------- ----------
    4 151 1


    坏块恢复


    RMAN> blockrecover datafile 9 block 134;


    (得有备份才能恢复,在修改坏块之前要做全备。)

    set 设定当前的环境
    show 查看当前的环境参数,跟sqlplus的同名命令类似。
    dump 列出指定block的内容
    find 在指定的block中查找指定的字符串,结果是显示出字符串,及其偏移量–offset,偏移量就是在block中的字节数
    modify 修改指定block的指定偏移量的值,可以在线修改。
    copy 把一个block的内容copy到另一个block中
    verify 检查当前环境是否有坏块
    sum 计算block的checksum,modify之后block就被标识为坏块,current checksum与reqired checksum不一致,sum命令可以计算出新的checksum并应用到当前块。
    undo 回滚当前的修改操作,如果手误做错了,undo一下就ok了,回到原来的状态。
    revert 回滚所有之前的修改操作,意思就是 undo all

  • 相关阅读:
    第五课 按键控制文本
    第四课:怎么去掉Activity的标题和邮件图标-20160705
    第三课:控件的使用及按键响应-20160705
    第二课:Android Studo 各文件作用-20160705
    第一课:如何创建Android Studo 工程-20160705
    JTAG各类接口针脚定义及含义
    c# 定时器的实现
    二进制及十进制文件的读写方法
    c# 检测设备改变
    Vue(四)事件和属性
  • 原文地址:https://www.cnblogs.com/Wardenking/p/10318211.html
Copyright © 2011-2022 走看看