数据块损坏恢复


备份数据文件:

1、创建一个数据库用户
SQL>  create user test identified by test default tablespace users;
User created.
SQL>  grant dba to test;
Grant succeeded.
SQL>
 
2、登陆 test 用户,创建一个表
SQL>  create table t1 as select * from dba_objects;
Table created.
SQL>
 
3、查询出想要破坏数据块的信息,文件号、块号
SQL>  show user
USER is  "TEST"
SQL>  set linesize 500 pagesize 5000
select object_id,rowid,dbms_rowid.rowid_relative_fno(rowid)||'_'||dbms_rowid.rowid_block_number(rowid) from t1 where rownum<10;
SQL>
 OBJECT_ID ROWID              DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID)||'_'||DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
---------- ------------------ ---------------------------------------------------------------------------------
        20 AAAWh+AAEAAAAJDAAA 4_579
        46 AAAWh+AAEAAAAJDAAB 4_579
        28 AAAWh+AAEAAAAJDAAC 4_579
        15 AAAWh+AAEAAAAJDAAD 4_579
        29 AAAWh+AAEAAAAJDAAE 4_579
         3 AAAWh+AAEAAAAJDAAF 4_579
        25 AAAWh+AAEAAAAJDAAG 4_579
        41 AAAWh+AAEAAAAJDAAH 4_579
        54 AAAWh+AAEAAAAJDAAI 4_579
9 rows selected.
SQL>
 
 
4、导出想要破坏的数据块 (root 用户执行 )
[root@db11g db11g]# dd if=/oradata/db11g/users01.dbf of=/root/users.block skip=579 bs=8192 count=1
1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 0.000659 seconds, 12.4 MB/s

将数据块使用xshell放到桌面上
 
5、导出 /root/users.block 文件,使用 UE 工具进行编辑,破坏该数据块
 
 
 
更改 16 进制部分数字,保存退出
 
6、清空数据库内存的缓存 :
SQL>  alter system flush buffer_cache;
System altered.
SQL>
 
7、导入破坏的数据块:
[root@db11g db11g]#  dd if=/root/users.block of=/oradata/db11g/users01.dbf seek=579 bs=8192 count=1 conv=notrunc
1+0 records in
1+0 records out
8192 bytes (8.2 kB) copied, 3.9e-05 seconds, 210 MB/s
[root@db11g db11g]#
 
8、验证破坏的数据文件
SQL>  set linesize 500 pagesize 5000
select file#,name from v$datafile;
SQL>
     FILE#
----------
NAME
----------------------------------------------------------------------------------------
         1
/oradata/db11g/system01.dbf
         2
/oradata/db11g/sysaux01.dbf
         3
/oradata/db11g/undotbs01.dbf
          4
/oradata/db11g/users01.dbf
         5
/oradata/db11g/example01.dbf
SQL>
 
[oracle@db11g ~]$  rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Fri Jul 24 17:08:42 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database: DB11G (DBID=310134383)
RMAN>  validate datafile 4; #检查损坏数据块。
Starting validate at 24-JUL-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=30 device type=DISK
channel ORA_DISK_1: starting validation of datafile
channel ORA_DISK_1: specifying datafile(s) for validation
input datafile file number=00004 name=/oradata/db11g/users01.dbf
channel ORA_DISK_1: validation complete, elapsed time: 00:00:03
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
4    FAILED 0              252          2112            1706891
  File Name: /oradata/db11g/users01.dbf
  Block Type Blocks Failing Blocks Processed
  ---------- -------------- ----------------
   Data       1              1343 --验证发现一个数据类型的坏块
  Index      0              44
  Other      0              441
validate found one or more corrupt blocks
See trace file /u01/app/oracle/diag/rdbms/db11g/db11g/trace/db11g_ora_8834.trc for details
Finished validate at 24-JUL-15
RMAN>
 
9、查询损坏的数据块
SQL>  select * from v$database_block_corruption;
     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
         4        579          1                  0 CHECKSUM
SQL>
发现 4 号数据文件,即 users01.dbf 数据文件的第 579 块是坏块
 
10、恢复坏块
方法 1 、   
  RMAN>  run{blockrecover datafile 4 block 579;}
Starting recover at 24-JUL-15
using target database control file instead of recovery catalog
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: SID=153 device type=SBT_TAPE
channel ORA_SBT_TAPE_1: Oracle Secure Backup
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=31 device type=DISK
channel ORA_SBT_TAPE_1: restoring block(s)
channel ORA_SBT_TAPE_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00004
channel ORA_SBT_TAPE_1: reading from backup piece /backup/rmanfull/full13qcrv7d_1_120150724
channel ORA_SBT_TAPE_1: piece handle=/backup/rmanfull/full13qcrv7d_1_120150724 tag=TAG20150724T152740
channel ORA_SBT_TAPE_1: restored block(s) from backup piece 1
channel ORA_SBT_TAPE_1: block restore complete, elapsed time: 00:00:01
starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished recover at 24-JUL-15
RMAN>
 
 
方法 2
RMAN>   recover corruption list;
Starting recover at 24-JUL-15
using channel ORA_SBT_TAPE_1
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 24-JUL-15
RMAN>
 
 
至此,数据块的损坏模拟及恢复完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值