Rman 备份异机恢复数据库

异机还原数据库的前提条件:

(1)同os 同版本

(2)同数据库实例名 和 dbid [select dbid from v$database]

(3)数据库spfile 和 pfile [可以用默认spfile]

(4)数据文件列表 [序号和原路径可以在恢复了control 文件后 list backup 获取]

(5)备份集要copy到原机器备份时相同的路径下

(6)如果路径不同,恢复时 set newname... 更换路径

恢复步骤

1. dbca新建同名数据库实例 gcgkdb

配置好 listener 和 tns

2. shutdown immediate;

扫描二维码关注公众号,回复: 8494952 查看本文章

备份新数据库实例 gcgkdb 默认常见的pfile spfile 等

E:\oracle\admin\

E:\oracle\product\11.2.0\dbhome_1\database\PWDGCGKDB.ora

E:\oracle\product\11.2.0\dbhome_1\database\SPFILEGCGKDB.ORA

删除默认的数据文件

E:\oracle\oradata\gcgkdb\*.dbf

3. lsnrctl start

启动空闲服务

SET ORACLE_SID=gcgkdb

orcl是你的数据库实例名

sqlplus sys/sys@gcgkdb as sysdba

已连接到空闲例程(shutdown immediate 之后会连接到空闲例程)

4. 用默认新gcgkdb 的 spfile 或者预先备份的spfile 启动数据库

SQL > startup nomount;

或者

SQL > startup pfile = '全路径/SPFILEGCGKDB.ora'

5. 把完整rman备份copy到和备份相同的路径下(没有就创建)

E:\backup\gcgkdb

6. 用rman先从备份中恢复控制文件

SET ORACLE_SID=gcgkdb

cmd > rman target sys/sys@gcgkdb

RMAN > set dbid=1379996969;

RMAN > restore controlfile from 'D:\backup\gcgkdb\CONTROLFILE_C-1379996969-20180503-00';

dbid 查原数据库的:select dbid from v$database;

如果restore执行成功,则原数据库的控制文件就会还原到新数据库 spfile 中指定的控制文件位置,

但是此时因为目录变更 control 文件里面的路径是不正确的,后面需要 set newname 重新设置路径

7. 挂载数据库

RMAN > alter database mount;

此时可以通过 list backup; 命令来查看备份情况

8. 将已经还原好的 control 控制文件 trace 出来(为了重建 control 文件)

SQL> alter database backup controlfile to trace as 'e:\control_new.txt';

后面的路径无所谓,主要是为了能看到 control 文件里的内容

9. 观察导出的 control_new.txt 文件会发现 backup 中datafile路径是错误的,需要修正

(原数据库在 D盘,新数据库在E盘)如果路径完全相同直接 restore database 就行

执行以下脚本修正路径并 restore 数据库,这个脚本只是个范例,实际的中间的 datafile 文件要和 control_new.txt 中的 datafile 文件对应

这里的 序号 1、2 ...与各数据文件的对应关系,可以通过 list backup 命令来获取

run {

set newname for datafile 1 to 'E:\oracle\ORADATA\gcgkdb\SYSTEM01.DBF';

set newname for datafile 2 to 'E:\oracle\ORADATA\gcgkdb\SYSAUX01.DBF';

set newname for datafile 3 to 'E:\oracle\ORADATA\gcgkdb\UNDOTBS01.DBF';

set newname for datafile 4 to 'E:\oracle\ORADATA\gcgkdb\USERS01.DBF';

set newname for datafile 5 to 'E:\oracle\ORADATA\gcgkdb\EXAMPLE01.DBF';

set newname for datafile 6 to 'E:\oracle\ORADATA\gcgkdb\TS_BIZ_01.DBF';

set newname for datafile 7 to 'E:\oracle\ORADATA\gcgkdb\TS_APPLOG_01.DBF';

restore database;

switch datafile all;

}

这一步如果数据量大,需要的时间会很长, switch datafile all 是将新的路径更新到控制文件

10. restore 恢复成功之后 recover

rman > recover database until cancel using backup controlfile;

RMAN-06054: 介质恢复正在请求未知的线程 1 序列 16 的归档日志以及起始 SCN 81351791 只能不完全恢复

rman > recover database until scn 81351791;

介质恢复正在请求未知的线程 1 序列 8945 的归档日志以及起始 SCN 218684941

recover database until scn 218684941;

recover database until scn 218141409;

11. recover 成功之后

alter database open resetlogs;

12. 重建临时表空间

alter tablespace temp add tempfile 'E:\oracle\oradata\gcgkdb\temp01.dbf' size 500m;

alter tablespace ts_temp add tempfile 'E:\oracle\oradata\gcgkdb\ts_temp_01.dbf' size 500m;

参考:https://blog.csdn.net/tianlesoftware/article/details/6240983

发布了118 篇原创文章 · 获赞 20 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zhang33565417/article/details/103894164