oracle数据库基于RMAN的异机迁移

说明:此迁移方案适用于oracle rac 的迁移

一、数据库迁移前准备

  1. 查看数据库版本
    su - oracle
    [oracle@rac1 ~] $sqlplus / as sysdba
    SQL > select * from v$version
    
  2. 查看OS信息
    SQL > select  dbms_utility.prot_string from dual;
    
  3. 查看数据库用户信息
    SQL > select * from dba_users;
    
  4. 查看数据库实例信息
    SQL > select instance_name ,status from v$instance;
    
  5. 查询数据库DBID信息
    SQL > select dbid from v$instance;
    
  6. 查询归档路径
    SQL > archive log list; 
    
  7. 查询数据库日志文件路径
    SQL > select name from v$controlfile;
    
  8. 查询参数文件路径
    SQL > show parameter pfile;
    

二、增量备份

做备份前确认数据库处于归档模式,检查数据库是否处于归档模式,当返回的信息中的Automatic archival为enabled时,说明处于归档模式,如果是disabled则需要开启归档模式

SQL > archive log list;
  1.  0级备份和恢复,以下是0级备份的脚本,视情况而确定是否要备份日志文件
    【oracle@rac1 ~】$ mkdir -p /backup
    【oracle@rac1 ~】$ export ORACLE_SID=prod1
    【oracle@rac1 ~】$ rman target /
    RMAN > run {
    allocate channel c1 type disk;
    backup incremental level 0 database format '/backup/db0%u_%s_%p';
    backup current controlfile format '/backup/ctl0_%d_%U.bak';
    backup format '/backup/arch0%u_%s_%p' archivelog all delete input;
    release channel c1;
    }
    

    备份后检查备份文件

    RMAN > list backup;
    
  2. 0级备份的恢复,目的端创建了一个和源端实例名相同的数据库
    1. 将前期查询到的源数据库的参数文件pfile复制到目的端相同的路径下,将目的端原有的参数文件删除
    2. 关闭目的端数据库实例
      su - oracle
      [oracle@rac01 ~] $sqlplus / as sysdba
      SQL > shutdown immediate;
      
    3. 设置目的端DBID,这里的DBID是设置成和源端一直,dbid号根据具体查询为准
      RMAN > set dbid 4222488;
      
    4. 数据库启动到nomount状态,pfile是从源端复制到目的端的参数文件路径
      【oracle@rac01 ~】$ export ORACLE_SID=prod1
      【oracle@rac01 ~】$ sqlplus / as sysdba
      SQL > startup nomount pfile='/u01/app/oracle/admin/prod/pfile/init.ora.51120129';
      
    5. 还原控制文件
      RMAN > restore controlfile from  '/backup/ctl0_%d_%U.bak';
      

      还原控制文件后会生成一个控制文件,也会体现出一个控制文件的路径,在参数文件中找到control_file那行,将路径修改为生成的控制文件路径

    6. 挂载数据库
      RMAN > alter database mount;
      
    7. 恢复日志文件
      RMAN > restore archivelog all;
      
    8. 还原数据文件,recover数据库有报错为scn值不对,可以调整scn值,RMAN> recover database until scn 5584289;scn值是报错时提示的scn值。
      RMAN > restore database;
      RMAN > recover database;
    9. 创建spfile,路径和源端spfile一致
      RMAN > create spfile '+MGMT/PROD/PARAMETERFILE/spfile.ora' from pfile='/u01/app/oracle/admin/prod/pfile/init.ora.51120129';
      
    10. 开启数据库
      RMAN > alter database open resetlogs;
      
    11. 恢复数据完成后启动数据库,启动步骤如下
      1. 在数据库用户sysdba下操作
        【oracle@rac01 ~】$ sqlplus / as sysdba
        SQL > shutdown immediate
        SQL > startup mount;
        SQL > alter database open;
        SQL > select status from v$instance;
        
      2. 重新关闭数据库,开启数据库查看书否正常
        SQL > shutdown immediate;
        SQL > startup; 
  3. rac集群下其他节点数据恢复步骤
    1. 关闭数据库
      【oracle@rac02 ~】$ rman target /
      RMAN > shutdown immediate
      
    2. 设置环境变量
      【oracle@rac02 ~】$ export ORACLE_SID=prod2
      
    3. 将目的端rac01的参数文件复制到rac02节点上,路径保持一致
    4. 启动数据库
      RMAN > startup nomount pfile='/u01/app/oracle/admin/prod/pfile/init.ora.51120129';
      RMAN > startup nomount;
      RMAN > alter database open;
      RMAN > create spfile '+MGMT/PROD/PARAMETERFILE/spfile.ora' from pfile='/u01/app/oracle/admin/prod/pfile/init.ora.51120129';
      RMAN > shutdown immediate
      RMAN > startup
  4. 为了检测增量的备份和还原,给源数据库新增一些数据
  5. 做1级备份,和0级备份一样,写一个备份脚本
    RMAN > run {
    allocate channel c1 type disk;
    backup incremental level 1 database format '/backup/db1%u_%s_%p';
    backup current controlfile format '/backup/ctl1_%d_%U.bak';
    backup format '/backup/arch1%u_%s_%p' archivelog all delete input;
    release channel c1;
    }
    

    做完1级备份后检查备份文件

    RMAN > list backup;
    

     1级备份的还原和0级备份相比较,不用再创建spflie,其他的步骤一致,只是还原的控制文件和日志文件要和备份时生成的文件名要一致

三、迁移完成后的检测

  1. 数据检测:在目的端进入迁移开始前源端创建的用户下检查数据的完整性
  2. 目的端实例监听检测:【oracle@rac01 ~】$ lsnrctl  status检测监听是否正常,如果监听不到实例状态,可以线关闭监听服务然后重新启动。
原文地址:https://www.cnblogs.com/shiguoqiang/p/11302178.html