Oracle 学习之RMAN(十三)恢复实战--数据块修复

在很多情况下,数据库只是某个数据文件的些许数据块发生损坏。这种情况,我们当然可是使用数据库恢复或者数据文件恢复的方式来解决问题。但是有点高射炮打蚊子的感觉。幸好RMAN提供了块级别的恢复。下面我们来演示一下。

1. 创建一个表空间,大小小一点。

SQL> conn / as sysdba
Connected.
SQL> create tablespace tbs_blkerr datafile ‘/u01/app/oracle/oradata/devdb/blkerr01.dbf‘ size 128K;

Tablespace created.

2. 在这个表空间上创建一个表,并且装满数据。

SQL> create table emp_blk tablespace tbs_blkerr as select * from scott.emp;

Table created.

SQL> insert into emp_blk select * from scott.emp;

14 rows created.

SQL> /

14 rows created.

。。。。

SQL> insert into emp_blk select * from scott.emp;
insert into emp_blk select * from scott.emp
*
ERROR at line 1:
ORA-01653: unable to extend table SYS.EMP_BLK by 8 in tablespace TBS_BLKERR

SQL> commit;

Commit complete.

SQL> select count(*) from emp_blk;

  COUNT(*)
----------
       686

SQL>

3. 备份该表空间或者数据文件。

RMAN> backup datafile ‘/u01/app/oracle/oradata/devdb/blkerr01.dbf‘;

Starting backup at 2015/07/09 10:30:11
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/u01/app/oracle/oradata/devdb/blkerr01.dbf
channel ORA_DISK_1: starting piece 1 at 2015/07/09 10:30:11
channel ORA_DISK_1: finished piece 1 at 2015/07/09 10:30:12
piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T103011_bsvq5mw9_.bkp tag=TAG20150709T103011 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2015/07/09 10:30:12

4. 使用vi编辑数据文件blkerr01.dbf,对文件尾部做稍微的修改

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size		    2233000 bytes
Variable Size		  553651544 bytes
Database Buffers	  281018368 bytes
Redo Buffers		    2379776 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: ‘/u01/app/oracle/oradata/devdb/blkerr01.dbf‘
RMAN> restore datafile 7;

Starting restore at 2015/07/09 10:36:25
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/devdb/blkerr01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T103011_bsvq5mw9_.bkp
channel ORA_DISK_1: piece handle=/u01/app/oracle/fast_recovery_area/DEVDB/backupset/2015_07_09/o1_mf_nnndf_TAG20150709T103011_bsvq5mw9_.bkp tag=TAG20150709T103011
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 2015/07/09 10:36:27

RMAN> recover datafile 7;

Starting recover at 2015/07/09 10:36:40
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 2015/07/09 10:36:41

此次修改破坏了文件的头部,发生了意外。(也可能是编辑datafile时,没有关闭数据库)我们先恢复数据文件。再次编辑文件。

此实验始终没有做成功,后续有时间再研究。

恢复的方法如下:

RMAN TARGET / 
BLOCKRECOVER DATAFILE 12 BLOCK 12;
时间: 2024-10-09 10:51:10

Oracle 学习之RMAN(十三)恢复实战--数据块修复的相关文章

[转]Oracle DB 使用RMAN执行恢复

? 在丢失关键或非关键数据文件后执行完全恢复 ? 使用增量更新的备份进行恢复 ? 切换到映像副本进行快速恢复 ? 将数据库还原到新主机上 ? 使用备份控制文件进行恢复 使用RMAN RESTORE和RECOVER命令 ? RESTORE命令:从备份中还原数据库文件 ? RECOVER命令:通过应用增量备份和重做日志文件中记录的更改来恢复已还原文件 RMAN> SQL 'ALTER TABLESPACE inv_tbs OFFLINE IMMEDIATE'; RMAN> RESTORE TABL

hadoop 之hdfs数据块修复方法

hadoop 之hdfs数据块修复方法: 1.手动修复 hdfs fsck / #检查集群的健康状态 hdfs debug recoverLease -path 文件位置 -retries 重试次数 #修复指定的hdfs数据块.也就是关闭打开的文件. 检查坏块: hadoop fsck /user -files -blocks -locations 检查是否有数据块正在写入: hadoop fsck /user openforwrite 原文地址:https://www.cnblogs.com/

Oracle 学习之RMAN(十二)恢复实战--控制文件丢失

首先我们进行一次全库备份 RMAN> run {   backup database    format '/backup/full_%d_%T_%s'   plus archivelog    format '/backup/arch_%d_%T_%s'   delete all input;  }  Starting backup at 2015/07/09 09:35:03 current log archived using channel ORA_DISK_1 channel ORA_

Oracle 学习之RMAN(一)架构

Recovery Manager(RMAN)是Oracle提供的一个实用工具,使用RMAN可以对Oracle数据库进行备份.还原.恢复等.此程序无需单独安装,她作为Oracle数据库的一部分,一单你安装了Oracle数据库软件,那么RMAN即可使用.RMAN是一个Client/Server程序,她使用Oracle服务器会话进行备份与恢复.RMAN备份的元数据存储在备份目标数据库的控制文件中,或者是一个单独的称之为catalog的数据库中. 为什么要使用RMAN? 可以管理复杂的备份与恢复操作 最

Oracle 学习之RMAN(四)增量备份

RMAN不但能进行数据库.数据文件等全量备份,而且还能做增量备份.增量备份有两大优点: 减少数据库恢复的时间. 数据库恢复是利用归档日志,不断的应用归档日志,将数据库恢复到最新(或者指定状态).但是增量备份只备份被修改了的数据块,在执行恢复时,直接用备份出来的数据块去覆盖数据文件中被更改的数据块. 减少备份时间 增量备份只需备份被修改过的数据块,备份时间和备份存储空间都有相应的减少. 做增量备份的前提,是需要一个基准备份,所有的增量都是针对这个基准来说的.要不然,增量备份无从谈起. 增量备份使用

Oracle 学习之RMAN(五)镜像copy

我们上一讲讲到了RMAN能提供全库备份.表空间备份.数据文件备份.归档日志备份.控制文件及参数文件的备份.RMAN备份出来的文件称之为备份集,RMAN在备份的过程中,只备份已经使用过的数据块.RMAN将多个数据文件打包到一起,生成一个备份集.数据文件与备份集文件不再是一一对应的关系.关于备份集的概念,我们下一讲再详细介绍.本将我们说说RMAN的另一种备份方式--镜像copy. 镜像copy是单个数据文件.控制文件.归档日志的克隆.备份出来的备份文件与数据库文件一一对应.下图描述了备份集与镜像co

Oracle 学习之RMAN(六)备份集备份片

我们回过头来看看进行数据库备份时生成的文件. RMAN> backup database;   Starting backup at 2015/07/08 00:58:27 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=

Oracle数据库truncate table后恢复原来数据的方法,留着万一用得到呢

概述:北京某国企客户 Oracle 11g R2 数据库误truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,此时发现数据库的备份不能用,表数据无法查询. 客户Oracle 11g R2 数据库误truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,此时发现数据库的备份不能用,表数据无法查询.Truncate数据的机理是,ORACLE会在数据字典和Segment?Header中更新表的Data?Obje

Oracle 学习之RMAN(十四)恢复实战--基于时间点恢复

1. 我们先做一个全备 RMAN> backup database ; Starting backup at 2015/07/09 13:40:47 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in b