在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
注: 一、恢复方案 复制代码 代码如下: 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:\oracle\product\10.2.0\db_1\admin\orcl\pfile\init.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 rownum<20; 7、深入理解incarnation:就是可以跨越resetlogs进行数据恢复 ①每一次resetlogs就会使incarnation + 1;如果想要恢复到之前incarnation的scn,就需要先恢复到之前的incarnation; ②Incarnation 11 and 12都包括scn 900000 的spot,所以当incarnation 12 做 until scn的时候,是恢复到当前incarcation 的 scn;但是根据我们的需要,我们需要的是incarnation 11的scn 900000;所以就需要切换incarnation到incarnation 11,才能找回我们需要的数据。 8、recover database的四条语句区别 要理解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数据库后某个归档文件缺失,则终止。 二、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:\oracle\product\10.2.0\oradata\orcl\SYSTEM.DBF'; #实例中SYSTEM.DBF放置的位置 set newname for datafile 2 to 'C:\oracle\product\10.2.0\oradata\orcl\UNDOTBS1.DBF'; set newname for datafile 3 to 'C:\oracle\product\10.2.0\oradata\orcl\SYSAUX.DBF'; set newname for datafile 4 to 'C:\oracle\product\10.2.0\oradata\orcl\USERS.DBF'; set newname for datafile 5 to 'C:\oracle\product\10.2.0\oradata\orcl\BANK_DATA02.DBF'; restore database; switch datafile all; } RMAN>recover database; RMAN>sql 'alter database open resetlogs'; 恢复成功 |
请发表评论