初始设定:
假设两台服务器a和b(虽然我这儿只有一台,您就把它假装是两台吧),服务器A中运行的库sid为mydb,现在将它复制一份到服务器b
准备工作:
1 、记录下源数据库的DBID,DBID的获取方式上节讲过的。
3 、确认备份(含控制文件,数据文件,归档文件)有效,并已拷贝至目标服务器(没归档应该也可以,只要能确认数据文件和控制文件是一致备份。)
步骤:
1. 首先创建源库的全库备份,(由于只有一台机器,所以备份完之后,通过dbca删除源库,正式情况下务必要等备份库完全建立并正常运行之后才能决定是否要删除源库啊)。 前面讲了太多的备份,这里就不列详细的操作步骤了。本例中我创建了一个新库,并在库中建了一个tmp表,插入了4条记录。
2. 在目标服务器配置oracle_sid。
C:\DocumentsandSettings\Administrator>oradim-new-sidmydb
添加一个名为mydb的sid,由于是异机恢复,sid要与源库相同。
3. 连接到该sid
C:\DocumentsandSettings\Administrator> setoracle_sid=mydb C:\DocumentsandSettings\Administrator>rmantarget/ 恢复管理器:版本9.2.0.1.0-Production Copyright(c)1995,2002,OracleCorporation.Allrightsreserved. 已连接到目标数据库(未启动) RMAN> setdbid2543439098; 正在执行命令:SETDBID RMAN>startupnomount; 启动失败:ORA-01078:failureinprocessingsystemparameters LRM-00109:N^7(4r?*2NJ}ND<~¨F:\ORAHOME1\DATABASE\INITMYDB.ORA¨ 正在尝试在没有参数文件的情况下启动Oracle例程... Oracle 例程已启动 系统全局区域总计97589952字节 FixedSize453312 字节 VariableSize46137344 字节 DatabaseBuffers50331648 字节 RedoBuffers667648 字节
4. 先恢复初始化参数文件
RMAN> restorespfiletopfile¨F:\ORAHOME1\DATABASE\INITMYDB.ORA¨from¨d:\backup\mydb\C-2543439098-20070720-02¨; 启动restore于20-7月-07 正在使用目标数据库控制文件替代恢复目录 分配的通道:ORA_DISK_1 通道ORA_DISK_1:sid=9devtype=DISK 通道ORA_DISK_1:已找到的自动备份:d:\backup\mydb\C-2543439098-20070720-02 通道ORA_DISK_1:从自动备份复原SPFILE已完成 完成restore于20-7月-07
然后使用刚刚创建的参数文件重新启动到未加载状态(注意,你最好打开该参数文件,看一下路径是否都确实存在,或者是否正确。)
RMAN> startupforcenomountpfile=¨F:\ORAHOME1\DATABASE\INITMYDB.ORA¨; Oracle 例程已启动 系统全局区域总计135338868字节 FixedSize453492 字节 VariableSize109051904 字节 DatabaseBuffers25165824 字节 RedoBuffers667648 字节
5. 恢复控制文件并进入到加载状态
RMAN> restorecontrolfilefrom¨f:\backup\mydb\C-2543439098-20070720-01¨; 启动restore于20-7月-07 使用通道ORA_DISK_1 通道ORA_DISK_1:正在恢复控制文件 通道ORA_DISK_1:恢复完成 正在复制控制文件 输出文件名=F:\ORAHOME1\ORADATA\MYDB\CONTROL01.CTL 输出文件名=F:\ORAHOME1\ORADATA\MYDB\CONTROL02.CTL 输出文件名=F:\ORAHOME1\ORADATA\MYDB\CONTROL03.CTL 完成restore于20-7月-07 RMAN> alterdatabasemount; RMAN-00571:=========================================================== RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS=============== RMAN-00571:=========================================================== RMAN-03002:failureofalterdbcommandat07/20/200717:44:22 ORA-01990: 打开口令文件¨F:\OraHome1\DATABASE\PWDmydb.ORA¨时出错 ORA-27041: 无法打开文件 OSD-04002: 无法打开文件 O/S-Error:(OS2) 系统找不到指定的文件。
奇怪,我这里报错了,但再次执行加载,发现提供已经是加载状态了,报错不奇怪,奇怪的是报错了还能进加载,呵呵,不就是缺少密码文件嘛,不管它,一会儿恢复完了再重建,继续进行。
RMAN>alterdatabasemount; RMAN-00571:=========================================================== RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS=============== RMAN-00571:=========================================================== RMAN-03002:failureofalterdbcommandat07/20/200717:44:51 ORA-01100: 数据库已安装
6. 修复数据库,我这里是源路径修复,如果你要恢复的文件地址与源库地址不同的话,需要通过SETNEWNAMEFORDATAFILE命令来为数据文件重新设定路径。
RMAN> restoredatabase; 启动restore于20-7月-07 分配的通道:ORA_DISK_1 通道ORA_DISK_1:sid=11devtype=DISK 通道ORA_DISK_1:正在开始恢复数据文件备份集 通道ORA_DISK_1:正在指定从备份集恢复的数据文件 正将数据文件00001恢复到F:\ORAHOME1\ORADATA\MYDB\SYSTEM01.DBF 正将数据文件00002恢复到F:\ORAHOME1\ORADATA\MYDB\UNDOTBS01.DBF 正将数据文件00003恢复到F:\ORAHOME1\ORADATA\MYDB\DRSYS01.DBF 正将数据文件00004恢复到F:\ORAHOME1\ORADATA\MYDB\INDX01.DBF 正将数据文件00005恢复到F:\ORAHOME1\ORADATA\MYDB\TOOLS01.DBF 正将数据文件00006恢复到F:\ORAHOME1\ORADATA\MYDB\USERS01.DBF 正将数据文件00007恢复到F:\ORAHOME1\ORADATA\MYDB\XDB01.DBF 通道ORA_DISK_1:已恢复备份段1 段handle=D:\BACKUP\MYDB\03INAL1I_1_1tag=TAG20070720T162417params=NULL 通道ORA_DISK_1:恢复完成 完成restore于20-7月-07
7. 恢复数据库
RMAN> recoverdatabase; 启动recover于20-7月-07 使用通道ORA_DISK_1 正在开始介质的恢复 通道ORA_DISK_1:正在启动到默认目标的存档日志恢复 通道ORA_DISK_1:正在恢复存档日志 存档日志线程=1序列=10 通道ORA_DISK_1:已恢复备份段1 段handle=D:\BACKUP\MYDB\04INAL2V_1_1tag=TAG20070720T162503params=NULL 通道ORA_DISK_1:恢复完成 存档日志文件名=F:\ORAHOME1\ORADATA\MYDB\ARCHIVE\1_10.DBF线程=1序列=10 无法找到存档日志 存档日志线程=1序列=11 RMAN-00571:=========================================================== RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS=============== RMAN-00571:=========================================================== RMAN-03002:failureofrecovercommandat07/20/200717:50:36 RMAN-06054:mediarecoveryrequestingunknownlog:thread1scn143893
报错了,但是没关系,并非严重错误,只是提醒你恢复到一个未知的scn号。如果要避免这个错误,可以在alterdatabasemount之后,通过setuntilscn或者setuntiltime命令设置恢复到的scn号或时间。
8. 然后通过openresetlogs方式打开数据库
RMAN> alterdatabaSEOpenresetlogs; 数据库已打开
呵呵,成功打开,这是个好消息,我们需要连接到数据库来验证一下。
C:\DocumentsandSettings\Administrator>sqlplus/nolog sql*Plus:Release9.2.0.1.0-Productionon 星期五7月2017:55:242007 Copyright(c)1982,OracleCorporation.Allrightsreserved. sql>connsystem/manager 已连接。 sql>select*fromtmp; COL -------------------------------------------------- 11111 22222 33333 44444 sql>