对于物理损坏的数据块,我们可以通过RMAN块介质恢复(BLOCK MEDIA RECOVERY)功能来完成受损块的恢复,而不需要恢复整个数据库或所有文件来修复这些少量受损的数据块。恢复整个数据库或数据文件那不是大炮用来打蚊子,有点不值得!但前提条件是你得有一个可用的RMAN备份存在,因此,无论何时备份就是一切。本文演示了产生坏块即使用RMAN实现坏块恢复的全过程。相关阅读:
使用RMAN的Duplicate功能创建物理DataGuard http://www.linuxidc.com/Linux/2012-04/59330.htmOracle基础教程之通过RMAN复制数据库 http://www.linuxidc.com/Linux/2013-07/87072.htmRMAN备份策略制定参考内容 http://www.linuxidc.com/Linux/2013-03/81695.htmRMAN备份学习笔记 http://www.linuxidc.com/Linux/2013-03/81892.htmOracle数据库备份加密 RMAN加密 http://www.linuxidc.com/Linux/2013-03/80729.htm1、创建演示环境SQL> select * from v$version where rownum<2;BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production--创建用于演示的data file
SQL> create tablespace tbs_tmp datafile "/u02/database/usbo/oradata/tbs_tmp.dbf" size 10m autoextend on;SQL> conn scott/tiger;--基于新的数据文件创建对象tb_tmp
SQL> create table tb_tmp tablespace tbs_tmp as select * from dba_objects;SQL> col file_name format a60
SQL> select file_id,file_name from dba_data_files where tablespace_name="TBS_TMP"; FILE_ID FILE_NAME
---------- ------------------------------------------------------------
6 /u02/database/usbo/oradata/tbs_tmp.dbf--表对象tb_tmp上的信息,包含对应的文件信息,头部块,总块数
SQL> select segment_name , header_file , header_block,blocks
2 from dba_segments
3 where segment_name = "TB_TMP" and owner="SCOTT";SEGMENT_NAME HEADER_FILE HEADER_BLOCK BLOCKS
------------------------------ ----------- ------------ ----------
TB_TMP 6 130 1152--首先使用rman备份对应的数据文件
$ $ORACLE_HOME/bin/rman target /
RMAN> backup datafile 6 tag=health;Starting backup at 2013/08/28 17:03:15
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=24 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=/u02/database/usbo/oradata/tbs_tmp.dbf
channel ORA_DISK_1: starting piece 1 at 2013/08/28 17:03:16
channel ORA_DISK_1: finished piece 1 at 2013/08/28 17:03:17
piece handle=/u02/database/usbo/fr_area/USBO/backupset/2013_08_28/o1_mf_nnndf_HEALTH_91vh6ntb_.bkp tag=HEALTH comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2013/08/28 17:03:17
RMAN> exit2、单块数据块损坏的恢复处理--下面使用了linux自带的dd命令来损坏单块数据块
[oracle@linux1 ~]$ dd of=/u02/database/usbo/oradata/tbs_tmp.dbf bs=8192 conv=notrunc seek=130 <<EOF
> Corrupted block!
> EOF
0+1 records in
0+1 records out
17 bytes (17 B) copied, 0.000184519 seconds, 92.1 kB/s--清空buffer cache
SQL> alter system flush buffer_cache;--查询表对相 tb_tmp,收到ORA-01578
SQL> select count(*) from tb_tmp;
select count(*) from tb_tmp
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block # 130)
ORA-01110: data file 6: "/u02/database/usbo/oradata/tbs_tmp.dbf"--查询视图v$database_block_corruption,提示有坏块,注意该视图可能不会返回任何数据,如无返回,先执行backup validate
SQL> select * from v$database_block_corruption; FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
6 129 1 0 CORRUPT--也可以使用dbv工具来校验坏块,参考: http://www.linuxidc.com/Linux/2013-09/89542.htm --下面使用blockrecover来恢复坏块
RMAN> blockrecover datafile 6 block 130;Starting recover at 2013/08/28 17:22:25
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=24 device type=DISKchannel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00006
channel ORA_DISK_1: reading from backup piece /u02/database/usbo/fr_area/USBO/backupset/2013_08_28/o1_mf_nnndf_HEALTH_91vh6ntb_.bkp
channel ORA_DISK_1: piece handle=/u02/database/usbo/fr_area/USBO/backupset/2013_08_28/o1_mf_nnndf_HEALTH_91vh6ntb_.bkp tag=HEALTH
channel ORA_DISK_1: restored block(s) from backup piece 1
channel ORA_DISK_1: block restore complete, elapsed time: 00:00:01starting media recovery
media recovery complete, elapsed time: 00:00:03Finished recover at 2013/08/28 17:22:31--再次查询表tb_emp正常
SQL> select count(*) from tb_tmp; COUNT(*)
----------
72449
RedHat 6.3安装MySQL-server-5.6.13-1.el6.x86_64.rpmDBVERIFY 工具的使用相关资讯 RMAN恢复 blockrecover
- 如何使用 RMAN 异机恢复部分表空间 (12/19/2014 19:21:47)
- RMAN异机恢复步骤及故障处理 (10/20/2014 18:49:04)
- RMAN备份数据库后到另一台机器上恢 (06/06/2014 19:34:44)
| - RMAN数据库恢复失败解决一例 (11/13/2014 19:00:18)
- RMAN深入解析之--BlockRecover恢复 (07/18/2014 09:45:42)
- 使用RMAN进行表空间TSPITR自动恢复 (05/04/2014 08:45:49)
|
本文评论 查看全部评论 (0)