迁移数据库的方法有多种,较为常用的则是使用RMAN来迁移。使用RMAN迁移数据库属于数据库的物理备份与恢复范畴,整个过程中数据库的相关信息是完整地镜像。因此,基于此种方式还原恢复的数据库用于测试会使得与真实的生产环境差异相对较小。
一、主要步骤
1、备份数据库
2、拷贝备份到目的服务器
3、为目标数据库创建项目目录
4、为目标数据库创建pfile或spfile(使用RMAN还原或复制原pfile到目的服务器)
5、还原控制文件
6、还原数据文件
7、OPEN 数据库
二、迁移演示
目的:将在一台机器的orcl数据库迁移到另一台机器上
1. 备份数据库:
备份脚本参考:RMAN的实战篇--备份脚本
2. 将用RAMN备份的文件拷贝到目标服务器上。
这里使用scp的方式拷贝到异机
scp -r 20161231/ oracle@192.168.0.92:/u02/database/orcl/backup/rman/
3. 创建目录
mkidr -p /u01/app/oracle/oradata/orcl
mkdir -p /u01/app/oracle/flash_recovery_area
mkdir -p /u01/app/oracle/flash_recovery_area/orcl
mkdir -p /u01/app/oracle/oradata/orcl
mkdir -p /u01/ARCHLOG
mkdir -p /u02/ARCHLOG
mkdir -p /u03/ARCHLOG
mkdir -p /u01/app/oracle/admin/orcl/dpdump
mkdir -p /u01/app/oracle/admin/orcl/adump
mkdir -p /u01/orcl/onlinelog/
mkdir -p /u02/orcl/onlinelog/
mkdir -p /u03/orcl/onlinelog/
4.创建密码文件
[oracle@oracledb ~]$ orapwd file=orapworcl password=oracle force=y entries=10
5、使用pfile启动实例到nomount状态
[oracle@oracledb dbs]$ cp /u02/database/orcl/backup/rman/20161231/initorcl.ora $ORACLE_HOME/dbs
[oracle@oracledb dbs]$ export ORACLE_SID=orcl
SQL> startup nomount;
注意检查参数文件中的目录是否都建立了。
6. 恢复控制文件并切换到mount状态
RMAN> restore controlfile from '/u02/database/orcl/backup/rman/20161231/cntl_lev0.bak'; 启动 restore 于 30-12月-16
使用通道 ORA_DISK_1 通道 ORA_DISK_1: 已复制控制文件副本
输出文件名=/u01/app/oracle/oradata/orcl/control01.ctl
输出文件名=/u01/app/oracle/flash_recovery_area/orcl/control02.ctl
完成 restore 于 30-12月-16 RMAN> alter database mount; 数据库已装载
释放的通道: ORA_DISK_1
7. 指定备份文件所在目录
RMAN> catalog start with '/u02/database/orcl/backup/rman/20161231';
8. 还原数据库
RMAN> restore database;
9.恢复数据库
SQL> conn / as sysdba SQL> recover database until cancel;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done SQL> recover database using backup controlfile until cancel;
********
....
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel #输入cancel,完成介质恢复
Media recovery cancelled.
10. open数据库
SQL> alter database open resetlogs;
11.一致性关闭数据库并重启数据库
SQL> shutdown immediate; SQL> startup
#如果open 不成功,请尝试shutdown 之后再次open,如果仍然不成功使用隐藏参数_allow_resetlogs_corruption打开数据库
SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile; System altered. SQL> startup force
ORACLE instance started. Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 88082000 bytes
Database Buffers 192937984 bytes
Redo Buffers 2973696 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open SQL> alter database open resetlogs; Database altered. SQL> alter system set "_allow_resetlogs_corruption"=false scope=spfile; System altered. SQL> shut immediate