当前位置:  数据库>oracle

rman恢复方案和oracle异机恢复

    来源: 互联网  发布时间:2014-10-04

    本文导语:  注:①恢复的前提是已经做好备份②完全恢复数据库是数据库遇到故障,在恢复时候没有丢失任何已经提交事物数据的恢复不完全恢复数据库是数据库遇到故障,在恢复时候丢失部分数据的恢复③在linux下需要设置环境变量,...

注:
①恢复的前提是已经做好备份
②完全恢复数据库是数据库遇到故障,在恢复时候没有丢失任何已经提交事物数据的恢复
不完全恢复数据库是数据库遇到故障,在恢复时候丢失部分数据的恢复
③在linux下需要设置环境变量,即需要恢复的oracle数据库的实例名:export ORACLE_SID=orcl
④当用resetlogs启动数据库时,应该要对数据库进行一次全备份

一、恢复方案
1、丢失数据文件,进行完全恢复

代码如下:

RMAN>startup mount;
RMAN>restore database;
RMAN>recover database;
RMAn>sql 'alter database open';

2、丢失重做日志文件,进行不完全恢复
代码如下:

SQL>startup mount;
SQL>recover database until cancel;
SQL>alter database open resetlogs;

3、丢失数据文件、控制文件和重做日志文件,进行不完全恢复
代码如下:

RMAN>startup nomount;
RMAN>restore controfile from autobackup;
RMAN>alter database mount;
RMAN>restore database;
SQL>recover database using backup controlfile until cancel;
SQL>alter database open resetlogs;

4、丢失初始化文件、控制文件数据文件和重做日志文件,进行不完全恢复
代码如下:

SQL>startup nomount pfile='D:oracleproduct10.2.0db_1adminorclpfileinit.ora.27201414210'; #pfile的路径
RMAN>restore spfile from autobackup;
SQL>shutdown immediate;
SQL>startup nomount;
RMAN>restore controlfile from autobackup;
RMAN>alter database mount;
RMAN>restore database;
SQL>recover database using backup controlfile until cancel;
SQL>alter database open resetlogs;

5、基于时间点的恢复(常用)
代码如下:

RMAN>startup mount;
RMAN>restore database;
RMAN>sql 'alter session set nls_date_format="yyyymmdd hh24:mi:ss"'; #设置显示时间格式
RMAN>recover database until time '20140312 17:07:00'; #把数据库恢复到2014-03-12 17:07:00这一时间点上
RMAN>sql 'alter database open resetlogs';

6、基于SCN的恢复
代码如下:

RMAN>startup mount;
RMAN>restore database;
RMAN>recover database until scn  963915;
RMAN>sql 'alter database open resetlogs';

①查询当前SCN号:
代码如下:

SQL>select dbms_flashback.get_system_change_number from dual;

②根据SCN号查询时间:
代码如下:

SQL>select to_char(scn_to_timestamp(963959),'yyyymmdd hh24:mi:si') from dual;

③根据时间查询SCN号:
代码如下:

SQL>select timestamp_to_scn(to_date('20140309 17:55:10','yyyymmdd hh24:mi:ss')) from dual;

④查询一段时间内的SCN号:
代码如下:

SQL>select * from (select time_dp,scn from smon_scn_time order by time_dp desc) where  rownumreset database to incarnation 11;

8、recover database的四条语句区别
① SQL>recover database using backup controlfile
如果丢失当前控制文件,用冷备份的控制文件恢复的时候,用来告诉oracle,不要以controlfile中的scn作为恢复的终点。
②SQL>recover database until cancel
如果丢失current/active redo的时候,手动指定终点。
③SQL>recover database using backup controlfile until cancel;
如果丢失当前controlfile并且current/active redo都丢失,会先去自动应用归档日志,可以实现最大的恢复;
④SQL>recover database until cancel using backup controlfile;
如果丢失当前controlfile并且current/active redo都丢失,以旧的redo中的scn为恢复终点,因为没有应用归档日志,所有会丢失数据。

要理解recover database using backup controlfile,先理解 recover database;在普通的recover database 或者 recover tablespace, recover datafile时, Oracle会以当前controlfile所纪录的SCN为准,利用archive log和 redo log的redo entry, 把相关的datafile 的 block恢复到“当前controlfile所纪录的SCN”;而某些情况下,Oracle需要把数据恢复到比当前controlfile所纪录的SCN还要靠后的位置(比如说,control file是backup controlfile , 或者 controlfile是根据trace create的。),这时候,就需要用using backup controlfile.   恢复就不会受“当前controlfile所记录的SCN”的限制。这时候的限制就来自于你的语句(until time , until scn),或者可用的archive log(until cancel) 。如果控制文件丢失,restore备份的控制文件后,则必须使用using backup controlfile选项。而until cancel则是不完全恢复,即current/active redo丢失,或者从restore数据库后某个归档文件缺失,则终止。
结论:
如果有旧的数据库备份,在归档日志和在线日志全部保存完好的情况下,使用recover database或recover database using backup controlfile,则不丢失数据
如果存在备份数据文件restore后,归档日志或者在线日志(active、current)丢失情况下,使用recover database using backup controlfile until cancel,则可以实现最大恢复。

二、RMAN异机恢复(源数据库和目标数据库的实例名要一致)

1、对源数据库进行备份

代码如下:

RMAN>backup database plus archivelog;
RMAN>backup current controlfile;

2、生成源数据库的参数文件,修改后传至目标数据库
3、在windows平台下进行恢复
代码如下:

C:>oradim -new -sid orcl  #创建一个orcl服务
C:>set ORACLE_SID=orcl
C:>sqlplus "/as sysdba";
SQL>startup nomount pfile='C:INITorcl.ORA';
SQL> create spfile from pfile='C:INITorcl.ORA';
SQL> shutdown immediate;
SQL>exit;
C:>set ORACLE_SID=orcl
C:>rman target/
RMAN>startup nomount;
RMAN>restore controlfile to '目标数据库控制文件放置的位置及名称' from '备份控制文件放置的位置';
RMAN>alter database mount;
RMAN>catalog start with '备份集放置的位置'; #向控制文件中添加备份集
RMAN>crosscheck backup;
RMAN>report schema;

编写下边脚本并运行
代码如下:

run
{
set newname for datafile 1
  to 'C:oracleproduct10.2.0oradataorclSYSTEM.DBF';  #实例中SYSTEM.DBF放置的位置
   set newname for datafile 2
   to 'C:oracleproduct10.2.0oradataorclUNDOTBS1.DBF';
   set newname for datafile 3
   to 'C:oracleproduct10.2.0oradataorclSYSAUX.DBF';
   set newname for datafile 4
   to 'C:oracleproduct10.2.0oradataorclUSERS.DBF';
   set newname for datafile 5
   to 'C:oracleproduct10.2.0oradataorclBANK_DATA02.DBF';
restore database;
switch datafile all;
}
RMAN>recover database;
RMAN>sql 'alter database open resetlogs';

恢复成功

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • win平台oracle rman备份和删除dg备库归档日志脚本
  • Oracle相关:Rman Crosscheck删除失效归档
  • Oracle RMAN快速入门指南
  • rman备份脚本和rman增量备份脚本分享
  • rman配置及rman常用命令操作
  • linux自动运行rman增量备份脚本


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3