本帖最后由 郑全 于 2020-3-21 20:19 编辑
一.要求:
ORACLE 数据库12.1.0.2 从LINUX 快速恢复至 WINDOWS
二.环境:
源端:
centos 7.7 +ASM+12.1.0.2
dbname:orcl
文件位置: +data/orcl/datafile
目的端:
windows 10+文件系统+12.1.0.2
文件位置: d:\oracle\oradata\orcl\
dbname:orcl
三.操作步骤:
1.第一步 在源端操作
--备份主库的数据文件归档日志
rman>backup database format '/home/oracle/db_%U.bak' plus archivelog format '/home/oracle/arc_%U.bak;
-- 备份参数文件和控制文件
rman>backup spfile format '/home/oracle/spfile.bak';
rman>backup current controlfile format '/home/oracle/control.bak';
--列出产生的备份
[oracle@dbserver ~]$ ls -l /home/oracle/*.bak
-rw-r----- 1 oracle asmadmin 101949440 Mar 21 17:07 /home/oracle/db_a5urliv3_1_1.bak
-rw-r----- 1 oracle asmadmin 719298560 Mar 21 17:07 /home/oracle/db_a6urliv6_1_1.bak
-rw-r----- 1 oracle asmadmin 607453184 Mar 21 17:07 /home/oracle/db_a7urliv9_1_1.bak
-rw-r----- 1 oracle asmadmin 121405440 Mar 21 17:07 /home/oracle/db_a8urlivc_1_1.bak
-rw-r----- 1 oracle asmadmin 2934784 Mar 21 17:07 /home/oracle/arc_a4urliv2_1_1.bak
-rw-r----- 1 oracle asmadmin 4608 Mar 21 17:07 /home/oracle/arc_a9urlive_1_1.bak
-rw-r----- 1 oracle asmadmin 98304 Mar 21 17:09 /home/oracle/spfile.bak
-rw-r----- 1 oracle asmadmin 13336576 Mar 21 17:09 /home/oracle/control.bak
2.拷贝文件到目的地,比如我们这里的WINDOWS
过程略,放到d:\oracle\bak
D:\>cd oracle\bak
D:\oracle\bak>dir
驱动器 D 中的卷是 新加卷
卷的序列号是 7038-25DA
D:\oracle\bak 的目录
2020/03/21 17:20 <DIR> .
2020/03/21 17:20 <DIR> ..
2020/03/21 17:07 2,934,784 arc_a4urliv2_1_1.bak
2020/03/21 17:07 4,608 arc_a9urlive_1_1.bak
2020/03/21 17:09 13,336,576 control.bak
2020/03/21 17:07 101,949,440 db_a5urliv3_1_1.bak
2020/03/21 17:07 719,298,560 db_a6urliv6_1_1.bak
2020/03/21 17:07 607,453,184 db_a7urliv9_1_1.bak
2020/03/21 17:07 121,405,440 db_a8urlivc_1_1.bak
2020/03/21 17:23 505 initorcl.ora
2020/03/21 17:09 98,304 spfile.bak
2020/03/21 17:16 3,584 SPFILEORCL.ORA
10 个文件 1,566,484,985 字节
2 个目录 70,751,989,760 可用字节
D:\oracle\bak>
3.在WINDOWS上为ORCL库创建服务注册表
当前首先,要在WINDOWS上安装ORACLE 12.1.0.2软件,我们这里默认前提已经安装该软件.
如果没有事先安装ORCL实例,可以通过DBCA去创建一个ORCL实例,
也可以通过命令行创建这个ORCL实例
D:\> oradim -new -sid orcl
之后,你可以在服务里面多了一个 OracleServiceORCL 服务
4.恢复参数文件 在目标端WINDOWS机器上操作
--设置oracle_sid环境变量
D:\oracle\bak>set oracle_sid=ORCL
--恢复参数文件
D:\oracle\bak>rman target /
RMAN> startup nomount;
RMAN> restore spfile to 'd:\oracle\bak\spfileorcl.ora' from 'd:\oracle\bak\spfile.bak';
5.根据实际情况修改目标端参数文件的内容
--通过SPFILE创建一个PFILE,方便修改
sql>create pfile='d:\oracle\bak\initorcl.ora' from spfile='d:\oracle\bak\spfileorcl.ora';
修改参数文件 d:\oracle\bak\initorcl.ora ,修改adump的位置,及控制文件的位置,修改后如下:
*.audit_file_dest='D:\oracle\admin\orcl\adump' --这个参数虚拟修改,原始的文件位置为LINUX各式
*.audit_trail='db'
*.compatible='12.1.0.2.0'
*.control_files='D:\oracle\oradata\orcl\control01.ctl' --这个参数虚拟修改,原始的文件位置为LINUX各式
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='D:\oracle\fast_recovery_area' --这个参数虚拟修改,原始的文件位置为LINUX各式
*.db_recovery_file_dest_size=4560m
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.open_cursors=300
*.pga_aggregate_target=256m
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=768m
*.undo_tablespace='UNDOTBS1'
注意: D:\oracle\admin\orcl\adump ,这个文件目录要确认建立,如果没有建立: c:\> mkdir D:\oracle\admin\orcl\adump
数据文件目录 D:\oracle\oradata\orcl\ ,如果事先没有建立,也需要建立: d:\> mkdir D:\oracle\oradata\orcl
修改后,重新创建为SPFILE
SQL>create spfile from pfile='d:\oracle\bak\initorcl.ora';
6.以新的参数文件重启实例
sql>startup nomount force;
7.恢复目标端控制文件
d:\>rman target /
rman>restore controlfile from 'd:\oracle\bak\control.bak';
8.使用新的控制文件启动到MOUNT
rman>alter database mount;
9.目标端注册备份,让windows认识到备份位置
rman>catalog start with 'd:\oracle\bak\';
回答 YES
10.在目标端机器删除以前的备份元信息
WINDOWS机器上没有LINUX的目录,所以,需要把这些元信息删除,通过CROSSCHECK BACKUP来完成
rman>crosscheck backup;
rman>delete expired backup;
11.确定目标端WINDOWS机器需要恢复到的SCN
在源端LINUX机器去操作:
SQL> select group#,sequence#,status,FIRST_CHANGE# from v$log;
GROUP# SEQUENCE# STATUS FIRST_CHANGE#
---------- ---------- ---------------- -------------
1 4 INACTIVE 3063217
2 5 INACTIVE 3065416
3 6 CURRENT 3065439
找到STATUS=CURRENT 的那个 FIRST_CHANGE#,使用他作为目标端机器需要恢复的SCN
当前为 3065439.
12.创建恢复脚本,并执行.
RMAN> run{
set until scn 3065439;
set newname for datafile 1 to 'D:\oracle\oradata\orcl\system01.dbf'; --源端为:+DATA/ORCL/DATAFILE/system.258.1032447273,WINDOWS上是文件系统,需要进行转换,其他文件同样
set newname for datafile 2 to 'D:\oracle\oradata\orcl\tsp_test01.dbf';
set newname for datafile 3 to 'D:\oracle\oradata\orcl\sysaux01.dbf';
set newname for datafile 4 to 'D:\oracle\oradata\orcl\undotbs101.dbf';
set newname for datafile 5 to 'D:\oracle\oradata\orcl\example01.dbf';
set newname for datafile 6 to 'D:\oracle\oradata\orcl\users01.dbf';
ALTER DATABASE RENAME FILE '+DATA/ORCL/ONLINELOG/group_1.262.1035645739' to 'D:\oracle\oradata\orcl\redo01a.log'; --改变联机日志文件位置
ALTER DATABASE RENAME FILE '+FRA/ORCL/ONLINELOG/group_1.257.1035645739' to ''D:\oracle\oradata\orcl\redo01b.log';
ALTER DATABASE RENAME FILE '+DATA/ORCL/ONLINELOG/group_2.263.1035645739' to 'D:\oracle\oradata\orcl\redo02a.log';
ALTER DATABASE RENAME FILE '+FRA/ORCL/ONLINELOG/group_2.258.1035645739' to 'D:\oracle\oradata\orcl\redo02b.log';
ALTER DATABASE RENAME FILE '+DATA/ORCL/ONLINELOG/group_3.264.1035645739' to 'D:\oracle\oradata\orcl\redo03a.log';
ALTER DATABASE RENAME FILE '+FRA/ORCL/ONLINELOG/group_3.261.1035645739' to 'D:\oracle\oradata\orcl\redo03b.log';
restore database; --还原数据库
switch datafile all; --切换目录位置
recover database; --恢复数据库
}
13.使用RESETLOGS打开数据库
rman>alter database open resetlogs;
14.处理临时文件的问题
sql>alter tablespace temp add tempfile 'd:\oracle\oradata\orcl\temp01b.dbf' size 10m autoextend on;
sql>alter tablespace temp drop tempfile 1;
到此,全部恢复完成.
|