版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39945369/article/details/78031363
备份数据文件:
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>
至此,数据块的损坏模拟及恢复完成。