|
做dataguard也是有风险的。楼主的办法也是可行的。
但步骤需要修改一下:
1.生产环境为归档模式,我用rman做好full backup,包括控制文件和pfile,传递到目标机器
2.目标机器上搭建相同的目录结构,装好oracle软件,用生产环境的pfile文件启动到nomount,从生产机的full backup里恢复控制文件,然后mount,还原所有数据文件,还原所有归档文件,然后recover。这时虽然可以resetlogs打开,但不要打开.
3.在生产库切换日志归档,将最新产生的归档传到目标机器。
4.在目标机器采用sqlplus 启动到mount状态,然后SQL> recover database using backup controlfile until cancel;
根据提示输入归档的文件路径应用归档
5.在生产库最后切换一次日志,然后停库shutdown immediate(只是这边shutdown停库的一个短暂时间)
6.将归档传至目标库,继续4步骤应用完毕后resetlogs打开即可。(这个时间很短)
7.修改客户端的tnsnames连接IP等等。
第6步没有必要将控制文件也传递,如果生产库一直没有发生数据结构变化(比如新建表空间,新加数据文件等),目标库可以自动应用。
如果发生了结构变化,类似下面例子,会报错,但只需create datafile as即可:
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 492287 (在 03/14/2008 13:46:32 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\JYC\ARCHIVELOG\2008_03_14\O1_MF
1_%U_.ARC
ORA-00280: 更改 492287 (用于线程 1) 在序列 #11 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\flash_recovery_area\JYC\ARCHIVELOG\2008_03_14\O1_MF
1_3XN6GZF5_.ARC
ORA-00283: 恢复会话因错误而取消
ORA-01244: 未命名的数据文件由介质恢复添加至控制文件
ORA-01110: 数据文件 5: 'D:\BAK\TEST.DBF'
ORA-01112: 未启动介质恢复
SQL> select name from v$datafile;
NAME
----------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\JYC\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\JYC\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\JYC\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\JYC\USERS01.DBF
D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00005
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
TEST
已选择6行。
SQL> alter database create datafile 5 as 'd:\bak\test.dbf';
数据库已更改。
SQL> recover database using backup controlfile until cancel;
然后继续应用归档。
最后SQL> alter database open resetlogs;
打开即可。 |
|