介绍
本次迁移的服务器是两台CentOS 7的操作系统,Oracle的版本为11G,原数据库处于正常运行的状态。
说明
非归档模式下进行迁移需要停数据库。
迁移数据库到异机需要分步骤执行,按流程将其分为以下步骤:
- 原数据库使用RMAN备份
- 新服务器安装Oracle数据库软件和监听
- 迁移备份集至新服务器中
- 新服务器创建必要的目录
- 使用RMAN还原新服务器的数据库
步骤
原数据库使用RMAN备份
1、启动数据库至MOUNT状态。
非归档模式下的数据库,要想使用RMAN备份数据库,需要先启动到MOUNT模式下。
进入到SQLPLUS命令行
[oracle@localhost ~]$ sqlplus / as sysdba
立即关闭数据库
SQL> shutdown immediate
启动数据库至MOUNT模式
SQL> startup mount
2、备份数据库全库
创建备份目录
创建存储备份集的目录dump,建议创建到可用空间较大的磁盘。
[oracle@localhost ~]$ mkdir /home/oracle/dump
进入到RMAN命令行
[oracle@localhost ~]$ rman target /
配置备份压缩类型
使用RMAN备份压缩数据库,减少备份集大小。启用压缩后会增加备份时间,但压缩后的备份集会比原来的小很多。
建议使用MEDIUM压缩类型,压缩率和压缩速度都不会特别极端,其它两个格式要么是极慢的速度要么是压缩率特别大。
注意,执行命令后立即生效。
RMAN> configure compression algorithm 'MEDIUM';
启动控制文件自动备份
RMAN> configure controlfile autobackup on;
修改控制文件备份目录
RMAN> configure controlfile autobackup format for device type disk to '/home/oracle/dump/cf_%F';
备份整个库的数据文件
由于配置了自动备份控制文件,我们在备份全库的时候会默认也备份控制文件。
RMAN> backup as compressed backupset section size 40g tag='INC_0' database format '/home/oracle/dump/df_0_%T_%u_%p_%c.dbf';
新服务器安装Oracle数据库软件和监听
在新的服务器中安装Oracle软件和监听,但不要创建数据库。这里我就不再写了,如果不会的话,可以参考此链接:图形界面安装Oracle 11G
迁移备份集至新服务器中
1、新服务器创建同样的备份目录
[oracle@localhost ~]$ mkdir -p /home/oracle/dump
2、拷贝数据库备份集。
将备份的数据文件集和控制文件拷贝至新的服务器中。
生产环境中这里通常拷贝会达到几百G甚至上T,拷贝时间较长,并且拷贝完成后建议对比MD5来保证文件传输中没有改变。
[oracle@localhost dump]$ scp * oracle@192.168.3.113:/home/oracle/dump
新服务器创建必要的目录
数据库启动必须要有以下目录:
- admin
- orcl 实例名
- adump 审计日志的默认存储目录
- dpdump 数据泵(data pump)的默认存储目录
- pfile pfile文件的备份目录
- orcl 实例名
- oradata
- orcl 实例名
- fast_recovery_area
- orcl 实例名
这些目录可以根据原服务器的数据库路径来配置,也可以改目录创建。建议跟原数据库目录一致,减少操作步骤。我这里两台服务器Oracle目录完全一致,所以只演示完全一致的创建方法。
注意,orcl仅表示我这里的实例名。如果你的实例名不是orcl,则应该以实际实例名和相应路径来替换。
创建admin/orcl目录
[oracle@localhost ~]$ mkdir -p /home/oracle/admin/orcl
进入admin/orcl目录
[oracle@localhost ~]$ cd /home/oracle/admin/orcl
创建admin/orcl子目录
[oracle@localhost orcl]$ mkdir adump dpdump pfile
创建数据文件目录
[oracle@localhost orcl]$ mkdir -p /home/oracle/oradata/orcl
创建快速闪回区目录
[oracle@localhost orcl]$ mkdir -p /home/oracle/fast_recovery_area/orcl
使用RMAN还原新服务器的数据库
新服务器中执行。
1、设置数据库的DBID并启动到NOMOUNT状态
进入RMAN命令行
[oracle@localhost ~]$ rman target /
设置数据库的DBID
新服务器的ID可以从备份的控制文件名中得到,也可以查源库。%F格式的控制文件第一个-前面显示的是字母c,第二个显示的是DBID,第三个显示的是备份时间,第四个显示的是份数。
RMAN> set dbid 1612777860;
启动数据库至NOMOUNT状态
RMAN> startup nomount
这里的报错不需要处理,当然你也可以拷贝原数据库的initorcl.ora文件至目标库(如果你的源库有)。
2、恢复参数文件
注意,实例名需要跟实际情况修改,我这里的实例名是orcl。
RMAN> restore spfile to'/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/spfileorcl.ora' from '/home/oracle/dump/cf_c-1612777860-20211128-00';
3、恢复控制文件并启动至MOUNT
恢复数据文件目录的控制文件
RMAN> restore controlfile to'/home/oracle/oradata/orcl/control01.ctl' from '/home/oracle/dump/cf_c-1612777860-20211128-00';
恢复快速闪回区的控制文件
RMAN> restore controlfile to'/home/oracle/fast_recovery_area/orcl/control02.ctl' from '/home/oracle/dump/cf_c-1612777860-20211128-00';
启动到MOUNT状态
RMAN> alter database mount;
如果这里报错,则关闭数据库,启动至MOUNT状态就可以了。很奇怪的是,有时候数据库又不需要重启,有时候又需要,暂时不纠结这个问题。
4、关闭原数据库并拷贝redo log
由于是MOUNT状态,其实不拷贝也不会丢失数据,主要就不想看到RMAN恢复时报错,所以还是将原数据库的redo log拷贝至新服务器的oradata/orcl目录。
关闭原数据库
SQL> shutdown immediate
进入原数据库的数据文件目录
[oracle@localhost ~]$ cd /home/oracle/oradata/orcl
拷贝redo log至新服务器
[oracle@localhost orcl]$ scp redo*.log oracle@192.168.3.113:/home/oracle/oradata/orcl
5、使用备份集恢复新的数据库
由于两边的数据库目录完全一致,就不需要执行catalog向控制文件中重新注册备份集。
还原备份集中的数据文件
RMAN> restore database;
恢复redo log(介质恢复)
RMAN> recover database;
6、打开新服务器的数据库
打开数据库
RMAN> alter database open resetlogs;
从上图可以看到,我们本次的恢复是不完全恢复。
结束
至此,从原服务器的Oracle数据库就完整的迁移到了新的服务器中运行。接下来,你就可以根据需要,释放原服务器资源或者做其它操作了。
评论区