rman恢复方案和oracle异机恢复

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

一、恢复方案1、丢失数据文件,进行完全恢复复制代码 代码如下:RMANstartup mount;RMANrestore
database;RMANrecover database;RMAnsql ‘alter database
open’;2、丢失重做日志文件,进行不完全恢复复制代码 代码如下:SQLstartup mount;SQLrecover
database until cancel;SQLalter database open
resetlogs;3、丢失数据文件、控制文件和重做日志文件,进行不完全恢复复制代码 代码如下:RMANstartup
nomount;RMANrestore controfile from autobackup;RMANalter database
mount;RMANrestore database;SQLrecover database using backup controlfile
until cancel;SQLalter database open
resetlogs;4、丢失初始化文件、控制文件数据文件和重做日志文件,进行不完全恢复复制代码 代码如下:SQLstartup nomount
pfile=’D:\oracle\product\澳门金沙vip,10.2.0\db_1\admin\orcl\pfile\init.ora.27201414210′;
#pfile的路径RMANrestore spfile from autobackup;SQLshutdown
immediate;SQLstartup nomount;RMANrestore controlfile from
autobackup;RMANalter database mount;RMANrestore database;SQLrecover
database using backup controlfile until cancel;SQLalter database open
resetlogs;5、基于时间点的恢复复制代码
代码如下:RMANstartup mount;RMANrestore database;RMANsql ‘alter session
set nls_date_format=”yyyymmdd hh24:mi:ss”‘;
#设置显示时间格式RMANrecover database until time ‘20140312 17:07:00’;
#把数据库恢复到2014-03-12 17:07:00这一时间点上RMANsql ‘alter database
open resetlogs’;6、基于SCN的恢复复制代码
代码如下:RMANstartup mount;RMANrestore database;RMANrecover database
until scn 963915;RMANsql ‘alter database open
resetlogs’;①查询当前SCN号:复制代码
代码如下:SQLselect dbms_flashback.get_system_change_number from
dual;②根据SCN号查询时间:复制代码
代码如下:SQLselect to_char(scn_to_timestamp(963959),’yyyymmdd
hh24:mi:si’) from dual;③根据时间查询SCN号:复制代码 代码如下:SQLselect
timestamp_to_scn(to_date(‘20140309 17:55:10′,’yyyymmdd hh24:mi:ss’))
from dual;④查询一段时间内的SCN号:复制代码 代码如下:SQLselect * from (select
time_dp,scn from smon_scn_time order by time_dp desc) where
rownum20;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,才能找回我们需要的数据。RMANreset database to incarnation 11;

8、recover database的四条语句区别① SQLrecover database using backup
controlfile如果丢失当前控制文件,用冷备份的控制文件恢复的时候,用来告诉oracle,不要以controlfile中的scn作为恢复的终点。②SQLrecover
database until cancel如果丢失current/active
redo的时候,手动指定终点。③SQLrecover database using backup controlfile
until cancel;如果丢失当前controlfile并且current/active
redo都丢失,会先去自动应用归档日志,可以实现最大的恢复;④SQLrecover
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还要靠后的位置,这时候,就需要用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后,归档日志或者在线日志丢失情况下,使用recover
database using backup controlfile until cancel,则可以实现最大恢复。

二、RMAN异机恢复

1、对源数据库进行备份复制代码
代码如下:RMANbackup database plus archivelog;RMANbackup current
controlfile;2、生成源数据库的参数文件,修改后传至目标数据库3、在windows平台下进行恢复复制代码 代码如下:C:\oradim -new -sid orcl
#创建一个orcl服务C:\set ORACLE_SID=orclC:\sqlplus “/as
sysdba”;SQLstartup nomount pfile=’C:\INITorcl.ORA’;SQL create spfile
from pfile=’C:\INITorcl.ORA’;SQL shutdown immediate;SQLexit;C:\set
ORACLE_SID=orclC:\rman target/RMANstartup nomount;RMANrestore
controlfile to ‘目标数据库控制文件放置的位置及名称’ from
‘备份控制文件放置的位置’;RMANalter database mount;RMANcatalog start with
‘备份集放置的位置’; #向控制文件中添加备份集RMANcrosscheck
backup;RMANreport 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;}RMANrecover database;RMANsql ‘alter
database open resetlogs’;恢复成功