oracle数据库基于RMAN的异机迁移
说明:此迁移方案适用于oracle rac 的迁移
一、数据库迁移前准备
- 查看数据库版本
su - oracle [oracle@rac1 ~] $sqlplus / as sysdba SQL > select * from v$version
- 查看OS信息
SQL > select dbms_utility.prot_string from dual;
- 查看数据库用户信息
SQL > select * from dba_users;
- 查看数据库实例信息
SQL > select instance_name ,status from v$instance;
- 查询数据库DBID信息
SQL > select dbid from v$instance;
- 查询归档路径
SQL > archive log list;
- 查询数据库日志文件路径
SQL > select name from v$controlfile;
- 查询参数文件路径
SQL > show parameter pfile;
二、增量备份
做备份前确认数据库处于归档模式,检查数据库是否处于归档模式,当返回的信息中的Automatic archival为enabled时,说明处于归档模式,如果是disabled则需要开启归档模式
SQL > archive log list;
- 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;
- 0级备份的恢复,目的端创建了一个和源端实例名相同的数据库
- 将前期查询到的源数据库的参数文件pfile复制到目的端相同的路径下,将目的端原有的参数文件删除
- 关闭目的端数据库实例
su - oracle [oracle@rac01 ~] $sqlplus / as sysdba SQL > shutdown immediate;
- 设置目的端DBID,这里的DBID是设置成和源端一直,dbid号根据具体查询为准
RMAN > set dbid 4222488;
- 数据库启动到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';
- 还原控制文件
RMAN > restore controlfile from '/backup/ctl0_%d_%U.bak';
还原控制文件后会生成一个控制文件,也会体现出一个控制文件的路径,在参数文件中找到control_file那行,将路径修改为生成的控制文件路径
- 挂载数据库
RMAN > alter database mount;
- 恢复日志文件
RMAN > restore archivelog all;
- 还原数据文件,recover数据库有报错为scn值不对,可以调整scn值,RMAN> recover database until scn 5584289;scn值是报错时提示的scn值。
RMAN > restore database;
RMAN > recover database;
- 创建spfile,路径和源端spfile一致
RMAN > create spfile '+MGMT/PROD/PARAMETERFILE/spfile.ora' from pfile='/u01/app/oracle/admin/prod/pfile/init.ora.51120129';
- 开启数据库
RMAN > alter database open resetlogs;
- 恢复数据完成后启动数据库,启动步骤如下
- 在数据库用户sysdba下操作
【oracle@rac01 ~】$ sqlplus / as sysdba SQL > shutdown immediate SQL > startup mount; SQL > alter database open; SQL > select status from v$instance;
- 重新关闭数据库,开启数据库查看书否正常
SQL > shutdown immediate; SQL > startup;
- 在数据库用户sysdba下操作
- rac集群下其他节点数据恢复步骤
- 关闭数据库
【oracle@rac02 ~】$ rman target / RMAN > shutdown immediate
- 设置环境变量
【oracle@rac02 ~】$ export ORACLE_SID=prod2
- 将目的端rac01的参数文件复制到rac02节点上,路径保持一致
- 启动数据库
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
- 关闭数据库
- 为了检测增量的备份和还原,给源数据库新增一些数据
- 做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,其他的步骤一致,只是还原的控制文件和日志文件要和备份时生成的文件名要一致
三、迁移完成后的检测
- 数据检测:在目的端进入迁移开始前源端创建的用户下检查数据的完整性
- 目的端实例监听检测:【oracle@rac01 ~】$ lsnrctl status检测监听是否正常,如果监听不到实例状态,可以线关闭监听服务然后重新启动。