使用Oracle Data Pump将数据库迁移到AWS RDS Oracle数据库
钢哥注:本文是对AWS官方博文《使用Oracle Data Pump将数据库迁移到AWS的RDS Oracle数据库》的整理,原文请点击 这里。
关键假设
生产数据库的业务有足够的停机时间,在迁移过程中数据不会变化。
准备本地数据库
使用docker镜像在本地快速创建Oracle数据库实例,Oracle数据库版本11.2.0.41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 下载数据库镜像
docker pull registry.aliyuncs.com/helowin/oracle_11g
# 启动数据库实例
docker run -d --name oracle_11g -p 1521:1521 registry.aliyuncs.com/helowin/oracle_11g
查看容器进程
docker ps -a
# 进入容器
docker exec -it 容器ID /bin/bash
# 加载环境变量
source /home/oracle/.bash_profile
# 连接数据库
sqlplus / as sysdba
初始化数据库
创建一些表和数据,作为数据库迁移的模拟数据。1
2# 创建数据库导出目录
mkdir -p /home/oracle/datapump/datafiles1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24-- 连接到数据库
sqlplus / as sysdba
-- 创建test用户
create user test identified by "welcome1";
-- 为test用户授权
grant dba to test;
-- 创建数据表
create table test.aa(id varchar2(20) not null primary key, name varchar2(30));
-- 插入测试数据
insert into test.aa values ('1', 'kenny');
insert into test.aa values ('2', 'gloria');
insert into test.aa values ('3', 'bob');
commit;
/
-- 将数据库导出目录加入到数据库中
create directory dpump_dir as '/home/oracle/datapump/datafiles';
-- 授权
grant read, write on directory dpump_dir to test;
用expdp命令导出数据库
1 | # 使用expdp命令导出test用户所有表 |
配置目标RDS数据库
在源数据库的 tnsnames.ora
文件中配置目标RDS数据库信息1
rdsorcl=(description=(address_list=(address=(protocol=TCP)(host=orcl.cr72zlp5vle5.ap-northeast-1.rds.amazonaws.com)(port=1517)))(connect_data=(SID=orcl)))
1
2
3
4
5# 如果连接有错误,用tnsping检查RDS连接信息。正常情况下应返回"OK (xxx msec)"类似的字样
tnsping "(description=(address_list=(address=(protocol=TCP)(host=orcl.cr72zlp5vle5.ap-northeast-1.rds.amazonaws.com)(port=1517)))(connect_data=(SID=rdsorcl)))"
# 使用sqlplus连接目标RDS数据库
sqlplus test/welcome1@rdsorcl1
2-- 在目标RDS数据库中创建directory对象
exec rdsadmin.rdsadmin_util.create_directory('dpump_dir');
将导出文件上传到目标RDS数据库
1 | -- sqlplus登录源数据库,创建指向目标RDS数据库的db link |
通过impdp命令导入数据
1 | impdp test@rdsorcl dumpfile=test.dmp directory=dpump_dir full=y |
执行完后检查RDS中的表和数据是否导入成功。
总结
从上面的过程我们可以看到,将一个Oracle数据库迁移到RDS的过程并不复杂,如果源数据库很大,由于需要导出数据、将数据上传到RDS的Data Pump目录、导入数据,迁移的过程也会比较长。
上述过程假设了我们生产数据库的业务有足够的停机时间,在迁移过程中数据不会变化。 如果迁移过程中,源数据库会发生变化,那么我们就需要同步数据中心和RDS数据库间的日志了。
如果源数据库很大,可以在AWS上启动一台中间服务器,并在中间服务器上安装Oracle的客户端软件,将源数据库的 Data Pump 导出文件分片然后scp复制、Tsunami UDP 加速上传等方式将文件上传到中间服务器,然后再上传到RDS的 Data Pump 目录中,这样能加速迁移的过程。