media recovery oracle,oracle 数据块损坏 Oracle 数据块损坏与恢复详解
本文主要对RMAN块级别介质恢复进行解释并举例,以帮助大家理解相应概念并灵活使用
块级别介质恢复(Block-Level Media Recovery)
注意: 此恢复无法对数据文件块头(第一个块)进行恢复。
块级别介质恢复对于仅需要介质恢复很小部分数据文件块的场景来说非常好用。
在Oracle 9i之前,如果单个块需要进行恢复的话,DBA需要将整个数据文件恢复出来并应用所有之后的redo记录。
块级别介质恢复极大降低了从备份恢复块的时间,仅需针对坏块部分进行备份恢复和redo应用即可。
在进行数据块介质恢复的过程中,由于是坏块,所以对查询和DML来说这些块是无法访问的,不过数据文件仍能保持online状态。不过,相比文件级别恢复来说这已经极大地提升了可用性。仅是正被修复的块对用户不可见而已,恢复完成后即可访问了。
RMAN命令接口
RMAN通过BLOCKRECOVER命令支持BMR恢复
BLOCKRECOVER bmr_block_specifier_list bmr_option_list;
bmr_block_specifier_list: bmr_block_specifier |
bmr_block_specifier_list bmr_block_specifier
bmr_block_specifier: DATAFILE datafile_specifier BLOCK block_list |
TABLESPACE tablespace_specifier DBA dba_list
CORRUPTION LIST
datafile_specifier: text_string | integer
block_list: integer |
block_list , integer
tablespace_specifier: text_string
dba_list: integer |
dba_list , integer
bmr_option_list: bmr_option |
bmr_option_list | bmr_option
bmr_option: from backupset |
from datafilecopy |
from tag text_string |
restore until time_clause |
nofileupdate |
save final blocks |
save all blocks
time_clause: TIME date_string |
SCN integer |
LOGSEQ integer THREAD integer
命令块恢复可以指定从哪个备份中进行恢复。如果用户在之前从没用过RMAN,而他们仅有的备份是直接用的镜像copy备份。
那么他们应该使用catalog datafilecopy命令先将这些文件注册到RMAN中,然后再使用blockrecover命令。
而catalog archivelog命令也同样需要在指定并注册归档日志时使用。
在用户之前并未用过RMAN的情况下,这些步骤是非常有必要的。
% rman target /
RMAN> catalog datafilecopy '';
catalog archivelog '';
See also :
相关可查文档可参考
Note 342972.1 HOW TO PERFORM BLOCK MEDIA RECOVERY (BMR) WHEN BACKUPS ARE NOT TAKEN BY RMAN
如果用户的备份或归档日志需要从磁带上进行恢复,那么就需要在进行blockrecover命令前分配好管道(channel)。
对于BMR需要的归档日志可以并行在多个管道上运行,不过所有运行的数据文件/备份集扫描和恢复会话都必须运行在同一个系统会话上。
为了可以在块修复时对备份源做选择,blockrecover在命令中支持以下命令项:
FROM BACKUPSET -- 从备份集中恢复块
FROM DATAFILECOPY -- 仅从数据文件拷贝中恢复块
FROM TAG -- 从打了标签的备份中恢复块
RESTORE UNTIL TIME|SCN|LOGSEQ -- 限定找在某个时间点之前的备份
从Oracle 9.0.1开始,就有V$DATABASE_BLOCK_CORRUPTION这张视图来反应从最近RMAN备份时发现的坏块。
举例:
如何确定需要恢复的块。
SQL> select * from mine;
select * from mine
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 5, block # 114)
ORA-01110: data file 5: '/u02/oradata/DB1/users01.dbf'
使用RMAN进行备份并将检查到的坏块记录在V$DATABASE_BLOCK_CORRUPTION视图中。
RMAN> run {BACKUP VALIDATE DATABASE;}
Starting backup at 09-MAY-01
using channel ORA_DISK_1
using channel ORA_DISK_2
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00002 name=/u02/oradata/DB1/undotbs01.dbf
input datafile fno=00003 name=/u02/oradata/DB1/indx01.dbf
input datafile fno=00005 name=/u02/oradata/DB1/users01.dbf
input datafile fno=00008 name=/u02/oradata/DB1/repcat01.dbf
input datafile fno=00004 name=/u02/oradata/DB1/tools01.dbf
channel ORA_DISK_2: starting full datafile backupset
channel ORA_DISK_2: specifying datafile(s) in backupset
including current controlfile in backupset
input datafile fno=00001 name=/u02/oradata/DB1/system01.dbf
input datafile fno=00006 name=/u02/oradata/DB1/joanes/joanes_1.dbf
input datafile fno=00007 name=/u02/oradata/DB1/joanes/joanes_test_1.dbf
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:28
channel ORA_DISK_2: backup set complete, elapsed time: 00:01:54
Finished backup at 09-MAY-01
查看反馈结果:
SQL> select * from V$backup_corruption;
RECID STAMP SET_STAMP SET_COUNT PIECE# FILE# BLOCK#
---------- ---------- ---------- ---------- ---------- ---------- ----------
BLOCKS CORRUPTION_CHANGE# MAR
---------- ------------------ ---
1 429201733 429201725 8 1 5 114
1 0 YES
然后通过坏块清单(corruption list - v$backup_corruption)来进行块级别恢复。
使用指定文件和块位置来进行指定恢复:
$ rman catalog rman/rman@DB2 target / log=rman1.log
RMAN> run {blockrecover datafile 5 block 114;}
RMAN> exit
Recovery Manager: Release 9.0.0.0.0 - Beta
(c) Copyright 2000 Oracle Corporation. All rights reserved.
connected to target database: DB1 (DBID=1021434286)
connected to recovery catalog database
RMAN>
Starting blockrecover at 08-MAY-01
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=8 devtype=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: sid=7 devtype=DISK
channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00005
channel ORA_DISK_1: restored block(s) from backup piece 1
piece handle=/u02/oradata/DB1/joanes/04cp9jk9_1_1 tag=null params=NULL
channel ORA_DISK_1: block restore complete
channel ORA_DISK_1: block restore complete
starting media recovery
media recovery complete
Finished blockrecover at 08-MAY-01
你也可以使用Data Recovery Advisor (DRA)来进行推荐恢复:
RMAN> list failure;
List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
---------- -------- --------- ------------- -------
441 HIGH OPEN 20-SEP-13 Datafile 4: '/u01/V112_oradata/users01.dbf' contains one or more corrupt blocks
RMAN> advise failure;
List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
---------- -------- --------- ------------- -------
441 HIGH OPEN 20-SEP-13 Datafile 4: '/u01/V112_oradata/users01.dbf' contains one or more corrupt blocks
analyzing automatic repair options; this may take some time
using channel ORA_DISK_1
analyzing automatic repair options complete
Mandatory Manual Actions
========================
no manual actions available
Optional Manual Actions
=======================
no manual actions available
Automated Repair Options
========================
Option Repair Description
------ ------------------
1 Perform block media recovery of block 520 in file 4
Strategy: The repair includes complete media recovery with no data loss
Repair script: /u02/app/oracle/diag/rdbms/v112/V112/hm/reco_4024241654.hm
RMAN> repair failure preview;
Strategy: The repair includes complete media recovery with no data loss
Repair script: /u02/app/oracle/diag/rdbms/v112/V112/hm/reco_4024241654.hm
contents of repair script:
# block media recovery
recover datafile 4 block 520;
RMAN> repair failure noprompt;
Strategy: The repair includes complete media recovery with no data loss
Repair script: /u02/app/oracle/diag/rdbms/v112/V112/hm/reco_4024241654.hm
contents of repair script:
# block media recovery
recover datafile 4 block 520;
executing repair script
Starting recover at 20-SEP-13
using channel ORA_DISK_1
channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00004
channel ORA_DISK_1: reading from backup piece /u01/temp/flash_areas/V112/V112/backupset/2013_09_20/o1_mf_nnndf_TAG20130920T092224_93rm0khr_.bkp
channel ORA_DISK_1: piece handle=/u01/temp/flash_areas/V112/V112/backupset/2013_09_20/o1_mf_nnndf_TAG20130920T092224_93rm0khr_.bkp tag=TAG20130920T092224
channel ORA_DISK_1: restored block(s) from backup piece 1
channel ORA_DISK_1: block restore complete, elapsed time: 00:00:01
starting media recovery
archived log for thread 1 with sequence 187 is already on disk as file /u01/temp/flash_areas/V112/V112/archivelog/2013_09_20/o1_mf_1_187_93rmnqwg_.arc
archived log for thread 1 with sequence 188 is already on disk as file /u01/temp/flash_areas/V112/V112/archivelog/2013_09_20/o1_mf_1_188_93rmq47g_.arc
archived log for thread 1 with sequence 189 is already on disk as file /u01/temp/flash_areas/V112/V112/archivelog/2013_09_20/o1_mf_1_189_93rn7994_.arc
archived log for thread 1 with sequence 190 is already on disk as file /u01/temp/flash_areas/V112/V112/archivelog/2013_09_20/o1_mf_1_190_93rnymmf_.arc
media recovery complete, elapsed time: 00:00:03
Finished recover at 20-SEP-13
repair failure complete
使用坏块清单进行恢复 :
RMAN> run {blockrecover corruption list;}
Starting blockrecover at 08-MAY-01
using channel ORA_DISK_1
using channel ORA_DISK_2
channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00005
channel ORA_DISK_1: restored block(s) from backup piece 1
piece handle=/u02/oradata/DB1/joanes/08cpa69t_1_1 tag=null params=NULL
channel ORA_DISK_1: block restore complete
channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00005
channel ORA_DISK_1: restored block(s) from backup piece 1
piece handle=/u02/oradata/DB1/joanes/04cp9jk9_1_1 tag=null params=NULL
channel ORA_DISK_1: block restore complete
starting media recovery
media recovery complete
Finished blockrecover at 08-MAY-01
Oracle 11.2 RMAN块恢复语法
在11.2版本你可以使用RMAN进行:
1) 对存在物理和逻辑坏块的所有数据库文件和归档日志进行查验:
BACKUP VALIDATE CHECK LOGICAL DATABASE ARCHIVELOG ALL;
2) 单独检查某些数据库块,可以使用以下命令方式,如:
VALIDATE DATAFILE 4 BLOCK 10 TO 13;
3) 查验数据集:
VALIDATE BACKUPSET 3;
可以通过指定备份集主键来进行指定查验,LIST BACKUP可以查到备份集主键编号。
使用以下RMAN命令来恢复讹误的块:
1) 通过v$database_block_corruption来恢复所有报告错误的块
RMAN> RECOVER CORRUPTION LIST;
2) 恢复单个块
RMAN> RECOVER DATAFILE 1 BLOCK 233, 235 DATAFILE 2 BLOCK 100 TO 200;
注意限制:
不能用于数据文件块头(block 1)恢复!
# 举例使用blockrecover进行块头恢复:
在本例中数据文件头(1号块)存在物理损坏.
使用rman块恢复命令并不会报不发恢复的错误,但是在alert log中会有记录:
RMAN> blockrecover datafile 7 block 1;
Starting recover at 19-MAR-13
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 19-MAR-13
# 可见命令执行并未报错,但是alert.log可以看到问题:
...
Corrupt block relative dba: 0x01c00001 (file 7, block 1)
Bad header found during kcvxfh v10
Data in bad block:
type: 99 format: 7 rdba: 0x0a747075
last change scn: 0x0000.00000000 seq: 0x1 flg: 0x04
spare1: 0x72 spare2: 0x72 spare3: 0x0
consistency value in tail: 0x00000b01
check value in block header: 0xf5c4
computed block checksum: 0xc4da
Reading datafile '/emea/bde/64bit/app/oracle/oradata/EMB11203/tc.dbf' for corruption at rdba: 0x01c00001 (file 7, block 1)
Reread (file 7, block 1) found same corrupt data (no logical check)
Tue Mar 19 13:31:46 2013
alter database recover datafile list clear
Completed: alter database recover datafile list clear
media recovery oracle,oracle 数据块损坏 Oracle 数据块损坏与恢复详解相关推荐
- Oracle Database 12c RMAN全量+增量备份+归档日志恢复详解
Oracle可以非常方便的把数据库恢复到具体某个时间的状态,而且还支持全备和多级增备,备份无需停止应用服务.比起DB2需要手动逐级恢复增量备份和归档日志,RMAN是非常简单好用的数据库商业解决方案. ...
- 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)...
不多说,直接上干货! 这个很简单,在集群机器里,选择就是了,本来自带就有Impala的. 扩展博客 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解) 欢迎大 ...
- [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- oracle重做日志详解,oracle数据文件、控制文件、重做日志文件详解
什么是数据文件.控制文件.重做日志文件? 首先从Oracle的官方文档里摘录下面内容: The following sections explain the physical database str ...
- Oracle数据库不同损坏级别的恢复详解
墨墨导读:在 DBA 的日常工作中不可避免存在着数据库的损坏,本文将主要介绍 Oracle 数据库遇到不同损坏级别下的应该采用的恢复方法,供读者在遇到此类情景时,能的找到适合自己的恢复方法,提高工作效 ...
- oracle表稅片整理,oracle_Oracle表碎片整理操作步骤详解,高水位线(HWL)下的许多数据 - phpStudy...
Oracle表碎片整理操作步骤详解 高水位线(HWL)下的许多数据块都是无数据的,但全表扫描的时候要扫描到高水位线的数据块,也就是说oracle要做许多的无用功!因此oracle提供了shrink s ...
- oracle看一条sql的trace,SQL_TRACE和10046事件详解
sql_trace和10046事件都是我们在优化sql上面应用的非常多的工具,我们可以使用这两个工具知道当前正在执行的sql究竟在做什么 一,SQL_TRACE: SQL_TRACE命令会将执行的整个 ...
- oracle如何启动和停止服务,CentOS启动和停止服务详解
CentOS启动和停止服务详解 服务简介 Linux 系统服务是在Linux启 动时自动加载, 服务的添加.删除.自动运行及状态 CAMS 在安装过程中会自动添加相关的服务,例如: service c ...
- oracle大对象实例_Oracle解析复杂json的方法实例详解
问题背景: 当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的PLSQL脚本大多也只可以解析结构较单一的json串,对于结构复杂的json串还无法解析.如此 ...
最新文章
- 阿里妈妈:基于动态背包的多场景广告序列投放算法
- 朴素贝叶斯(Naive Bayes),“Naive”在何处?
- IDEA远程调试服务器代码
- AI+药物研发:人工智能赋能新药研发(人工智能应用案例)
- Vue之实例的生命周期
- 和vc的正确服用时间_最新研究:口服VC吸收远高于我们的意料
- excel vb ppap_vb是什么平台-常见问题
- plt导致的_tkinter.TclError: no display name and no $DISPLAY environment variable的问题
- 我的小导师-天津大学张梅山老师要招NLP方向的研究生啦!
- 《编写高质量代码:改善Java程序的151条建议》读书笔记
- DRF的解析器和渲染器
- Adobe Flash Player30.0.0.113离线安装包
- 用java代码模拟鼠标双击事件
- 如何查看android应用签名信息
- 如何手动控制Mac的风扇
- 算法-使用双指针遍历删除链表节点
- R语言逻辑回归Logistic回归分析预测股票涨跌
- 联想小新24/27寸一体机 酷睿版2022款评测
- html怎么修改版权信息,微擎修改免费版标题、logo、页脚版权信息教程(仅供学习)...
- 从零到一编写一个 spark 程序并提交到集群中运行