重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2064|回复: 0
打印 上一主题 下一主题

ORACLE 数据库12.1.0.2 从LINUX 恢复至 WINDOWS

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-21 20:07:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 郑全 于 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;

到此,全部恢复完成.

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-4-26 03:01 , Processed in 0.092020 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表