暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

rman恢复部分数据文件的方法

原创 黄宸宁 2016-03-22
945
继上一篇rman恢复部分表空间 后考虑是否能恢复部分数据文件喃?带着这个问题做了以下测试,该测试只去证明了能否恢复部分数据文件,没有去考虑操作的规范性。
接着上一篇文章中的实验环境继续操作:
1、为测试表所在表空间添加新的数据文件
SQL> 
SQL> alter tablespace test1 add datafile '/oradata/ora11g/test02.dbf' size 100m;
Tablespace altered.
SQL>
SQL>
SQL> select file_id,file_name,tablespace_name from dba_data_files
2 /
FILE_ID FILE_NAME TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
4 /oradata/ora11g/users01.dbf USERS
3 /oradata/ora11g/undotbs01.dbf UNDOTBS1
2 /oradata/ora11g/sysaux01.dbf SYSAUX
1 /oradata/ora11g/system01.dbf SYSTEM
5 /oradata/ora11g/example01.dbf EXAMPLE
6 /oradata/ora11g/test01.dbf TEST1
7 /oradata/ora11g/test21.dbf TEST2
8 /oradata/ora11g/test31.dbf TEST3
9 /oradata/ora11g/test02.dbf TEST1
9 rows selected.
SQL>

SQL> set pages 200
SQL> select owner,segment_name,extent_id,file_id from dba_extents where owner='HCN';
OWNER SEGMENT_NAME EXTENT_ID FILE_ID
------------------------------ --------------------------------------------------------------------------------- ---------- ----------
HCN TEST1 0 6
HCN TEST1 1 6
HCN TEST1 2 6
HCN TEST1 3 6
HCN TEST1 4 6
HCN TEST1 5 6
HCN TEST1 6 6
HCN TEST1 7 6
HCN TEST1 8 6
HCN TEST1 9 6
HCN TEST1 10 6
HCN TEST1 11 6
HCN TEST1 12 6
HCN TEST1 13 6
HCN TEST1 14 6
HCN TEST1 15 6
HCN TEST1 16 6
HCN TEST1 17 6
HCN TEST1 18 6
HCN TEST1 19 6
HCN TEST1 20 6
HCN TEST1 21 6
HCN TEST1 22 6
HCN TEST1 23 6
HCN TEST1 24 6
25 rows selected.
SQL>

测试表test1的所有数据均在数据文件test01.dbf中
2、重新全备数据文件、控制文件以及归档(方法可以参考上一篇文章)
3、异机恢复,通过pfile启动数据库到nomount状态,并恢复控制文件,启动数据库到mount状态,方法参考上一篇文章
4、恢复需要的数据文件
RMAN> 
RMAN> restore datafile 1,2,3,4,5,6,7,8;
Starting restore at 21-MAR-16
Starting implicit crosscheck backup at 21-MAR-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=63 device type=DISK
Crosschecked 2 objects
Finished implicit crosscheck backup at 21-MAR-16
Starting implicit crosscheck copy at 21-MAR-16
using channel ORA_DISK_1
Finished implicit crosscheck copy at 21-MAR-16
searching for all files in the recovery area
cataloging files...
no files cataloged
using channel ORA_DISK_1
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 00001 to /oradata/ora11g/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /oradata/ora11g/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /oradata/ora11g/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /oradata/ora11g/users01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /oradata/ora11g/example01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /oradata/ora11g/test01.dbf
channel ORA_DISK_1: restoring datafile 00007 to /oradata/ora11g/test21.dbf
channel ORA_DISK_1: restoring datafile 00008 to /oradata/ora11g/test31.dbf
channel ORA_DISK_1: reading from backup piece /oradata/rmanbak/full_bkl_07r12qej17.rmn
channel ORA_DISK_1: piece handle=/oradata/rmanbak/full_bkl_07r12qej17.rmn tag=TAG20160321T231427
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
Finished restore at 21-MAR-16
RMAN>
RMAN> recover database skip tablespace test1;
Starting recover at 21-MAR-16
using channel ORA_DISK_1
Executing: alter database datafile 6 offline
Executing: alter database datafile 9 offline
starting media recovery
unable to find archived log
archived log thread=1 sequence=14
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/21/2016 23:20:32
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 14 and starting SCN of 1005801
RMAN>
RMAN>
RMAN> alter database open resetlogs;
database opened
RMAN>
SQL>
SQL> select file#,status,name from v$datafile;
FILE# STATUS NAME
---------- ------- ------------------------------------------------------------
1 SYSTEM /oradata/ora11g/system01.dbf
2 ONLINE /oradata/ora11g/sysaux01.dbf
3 ONLINE /oradata/ora11g/undotbs01.dbf
4 ONLINE /oradata/ora11g/users01.dbf
5 ONLINE /oradata/ora11g/example01.dbf
6 OFFLINE /oradata/ora11g/test01.dbf
7 ONLINE /oradata/ora11g/test21.dbf
8 ONLINE /oradata/ora11g/test31.dbf
9 OFFLINE /oradata/ora11g/test02.dbf
9 rows selected.
SQL>
/* 恢复表数据所在的数据文件file_id=6的数据文件 */
[oracle@orl5 ~]$
[oracle@orl5 ~]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Mon Mar 21 23:24:09 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORA11G (DBID=8338623, not open)
RMAN> restore datafile 6;
Starting restore at 21-MAR-16
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=63 device type=DISK
skipping datafile 6; already restored to file /oradata/ora11g/test01.dbf
restore not done; all files read only, offline, or already restored
Finished restore at 21-MAR-16
RMAN> recover datafile 6;
Starting recover at 21-MAR-16
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 21-MAR-16
RMAN>
RMAN> alter database open;
database opened
RMAN>
SQL>
SQL> alter database datafile 6 online;
Database altered.
SQL>
SQL>
/* 验证数据 */
SQL>
SQL> select count(*) from hcn.test1;
COUNT(*)
----------
86956
SQL>

实验证明如果一个表空间中存在多个数据文件,其实是可以只恢复部分数据文件的,不需要的数据文件可以继续保持offline的状态。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论