Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1117986
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2013-09-16 15:13:37

恢复分为完全恢复和不完全恢复,不完全恢复需要resetlogs,重置日志序列号。
 
一、完全恢复
  完全恢复要求在线日志里的记录没丢。
1.全库恢复
 
  RMAN> startup nomount;
  RMAN> restore database;
  RMAN> alter database mount;
  RMAN> recover database;
  RMAN> alter database open;
 
2.表空间完全恢复
 
  RMAN> startup mount;
  RMAN> restore tablespace ldytbs;
  RMAN> recover tablespace ldytbs;
  RMAN> alter database open;
 
3.数据文件完全恢复
 
  RMAN> startup mount;
  RMAN> restore datafile 5;
  RMAN> recover datafile 5;
  RMAN> alter database open;
 
二、不完全恢复
 
1.基于时间点的恢复
 
  RMAN> startup mount;
  RMAN> run{
  2>       set until time "to_date('20121108-16:44:00','yyyymmdd-hh24:mi:ss')";
  3>       restore database;
  4>       recover database;
  5>       }
  RMAN> alter database open resetlogs;

 
2.从全备中基于时间点恢复一个表空间
 
由于基于时间点,在恢复之前,可能需要设置一下环境变量,让rman备份集中的时间显示得更清楚
 
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
set NLS_DATE_FORMAT=YYYYMMDD-HH24:MI:SS
 
如果是异机恢复,或需要变更初始化参数文件,需要确保参数中路径的描述正确且路径有效,如后台dump目录等。
 
如果需要恢复controlfile,restore controlfile时不要指定时间,直接恢复即可。
例如:
  RMAN> run
  2>  {
  3>     allocate channel d1 type disk;
  4>     restore controlfile to 'E:\oracle\oradata\CONTROL01.CTL';
  5>     release channel d1;}
 

恢复数据文件,restore时,只需要恢复system表空间、sysaux表空间、undo表空间,以及想要恢复的用户表空间的相关数据文件。
如果需要rename数据文件名称,使用set newname for datafile命令异机switch datafile命令。
恢复到某个时间点使用set until time '时间',其中时间格式需要满足前面设置的NLS_DATE_FORMAT环境变量格式。
recover时跳过其他不需要恢复的表空间。注意,如果有些表空间名称包含关键字,如"TEST",那么需要用引号引起,否则会报错。
 

  RMAN> run
  2> {
  3> allocate channel d1 type disk;
  4> allocate channel d2 type disk;
  5> allocate channel d3 type disk;
  6> set newname for datafile 1 to 'E:\oracle\oradata\SYSTEM01.DBF';
  7> set newname for datafile 2 to 'E:\oracle\oradata\UNDOTBS01.DBF';
  8> set newname for datafile 3 to 'E:\oracle\oradata\SYSAUX01.DBF';
  9> set newname for datafile 9 to 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\EAGLE01.DBF';
  10> set until time '20100827-11:54:54';
  11> restore datafile 1,2,3,9;
  12> switch datafile 1;
  13> switch datafile 2;
  14> switch datafile 3;
  15> switch datafile 9;
  16> recover database skip forever tablespace USERS,LDY,"TEST";
  17> release channel d1;
  18> release channel d2;
  19> release channel d3;
  20> }
 

恢复完之后,需要检查一下redo log和tempfile的名称,是否为有效路径,如果不是,需要rename:
alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO01.LOG' to 'E:\oracle\oradata\REDO01.LOG';
alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO02.LOG' to 'E:\oracle\oradata\REDO02.LOG';
alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\REDO03.LOG' to 'E:\oracle\oradata\REDO03.LOG';
alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\TEMP01.DBF' to 'E:\ORACLE\ORADATA\TEMP01.DBF';
 

rename之后,就可以用resetlogs方式open了。
alter database open resetlogs;
 
三、其他恢复
 
1.恢复spfile
 
  RMAN> restore spfile to 'g:\oracle\backup\1.txt';
 
2.恢复controlfile
 
  RMAN> run
  2> {
  3> allocate channel d1 type disk;
  4> restore controlfile to 'E:\oracle\oradata\CONTROL01.CTL';
  5> release channel d1;}
 
3.非SYSTEM表空间丢失:

run {
sql 'alter tablespace u1 offline immediate';
Restore tablespace u1;
Recover tablespace u1;
Sql 'alter tablespace u1 online';
}
 

4.SYSTEM表空间丢失:

run {
Startup mount;
Restore tablespace system;
Recover tablespace system;
Alter database open;
}
 

5.丢失了其中一个控制文件:

STARTUP NOMOUNT
CP FILE TO NEW
ALTER DATABASE MOUNT
ALTER DATABASE OPEN
 

6.所有控制文件都丢失:

Startup nomount;
Restore controlfile from autobackup;
Alter database mount;
Recover database;
Alter database open resetlogs;
 
7.在线日志丢失一个成员:

alter database drop logfile member '/ora/oradata/log1a.log';
alter database add logfile member to group 1
 
8.所有在线日志都丢失:

startup nomount
restore controlfile from autobackup;
Alter database mount;
restore database;
recover database until cancle using backup controlfile ;
alter database open resetlogs;

阅读(1043) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~