使用 Oracle Data Pump 将数据库迁移到 AWS 的 RDS Oracle 数据库

阅读数:11 2019 年 11 月 20 日 08:00

使用Oracle Data Pump将数据库迁移到AWS的RDS Oracle数据库
### 1.Oracle 数据库的迁移方法
复制代码
如何将 Oracle 数据库从数据中心迁移到 AWS 云上是 DBA 经常遇到的问题,迁移 Oracle 数据库有多种方式:
(1) 使用 AWS DMS 服务迁移
(2) 使用 Oracle SQL Developer 迁移
(3) 使用 Oracle Data Pump 迁移
(4) 使用 Oracle Export/Import 迁移
(5) 使用 Oracle SQL Loader 迁移
如果需要了解不同的迁移方法,可以参考 博客《Oracle 数据库迁移到 AWS 云的方案》 。
### 2. 使用 Oracle Data Pump 迁移
本文主要讨论使用 Oracle Data Pump 将 Oracle 数据库迁移到 RDS 数据库。示例数据库的信息如图。
!下面是模拟在数据中心的 Oracle11g 源数据库中创建用户和表,并将源数据库迁移到 AWS 云中 RDS Oracle 11g 数据库的全过程。
#### 步骤一:初始化源数据库并使用 Data Pump 导出
(1) 使用 SQL Plus 登录源 Oracle 数据库
sqlplus / as sysdba
(2) 创建用户 test
create user test identified by welcome1;
(3) 为新创建用户 grant 权限(实际使用请给用户 grant 合适的权限)
grant dba to test;
(4) 为用户 test 创建表
create table test.aa(id varchar(20) not null primary key,name varchar2(30));
(5) 为表插入数据并 commit
SQL> insert into test.aa values(‘1111′,’1111name’);
1 row created.
SQL> insert into test.aa values(‘2222′,’2222name’);
1 row created.
SQL> commit;
Commit complete.
(6) 在源数据库所在的 Linux 上逐级创建下面文件目录
mkdir /home/oracle/datapump/datafiles
(7) 在 SQLPlus 中创建数据库 Directory
create directory dpump_dir as ‘/home/oracle/datapump/datafiles’;
grant read,write on directory dpump_dir to test;
(8) 使用 expdp 命令导出 test 用户的所有表
expdp test1/welcome123 directory=dpump_dir dumpfile=test.dmp
expdp test1/welcome123 directory=dpump_dir dumpfile=test1.dmp
#### 步骤二:使用 SQL Plus 连接 RDS 数据库,并创建数据库目录对象
(1) 在源数据库上配置 RDS 数据库的 tnsnames
cd $ORACLE_HOME/network/admin
vi tnsnames.ora
输入 tnsnames 的内容如下:
ORARDS=(description=(address_list=(address = (protocol = TCP)(host = RDS_HOST_NAME)(port = RDS_PORT)) )(connect_data =(SID=RDS_SID)))
(2) 使用 SQLPLUS 连接远程 RDS 数据库
sqlplus oracle/welcome1@ORARDS
(3) 使用 tnsping 检查 RDS 连接信息
如果连接有错误,可以使用下面命令查看通讯是否正常
tnsping “(description=(address_list=(address = (protocol = TCP)(host = RDS_HOST_NAME)(port = RDS_PORT)))(connect_data =(SID= RDS_SID)))”
tnsping 应该返回“OK (xx msec)”类似文字。
如果 tnsping 不通请检查 RDS 对应的 security group,RDS 的 security group 中应当允许当前服务器通过 TCP 协议访问 RDS 数据库的端口。
(4) 创建目标 RDS 的 directory 对象
exec rdsadmin.rdsadmin_util.create_directory(‘dpump_dir1’);
创建成功后退出连接 RDS 的 SQL Plus 客户端。
** 步骤三:将源数据库 Data Pump 导出的文件上传到 RDS 数据库 **
(1) 连接源数据库并创建 database link
create database link to_rds connect to oracle identified by welcome1 using ‘(description=(address_list=(address = (protocol = TCP)(host = RDS_HOST_NAME)(port = RDS_PORT)))(connect_data =(SID=RDS_SID)))’;
(2) 运行 DBMS_FILE_TRANSFER 包将数据传输到 RDS 服务器的目录
BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => ‘dpump_dir1’,
source_file_name => ‘test.dmp’,
destination_directory_object => ‘dpump_dir1’,
destination_file_name => ‘test.dmp’,
destination_database => ‘to_rds’
);
END;
** 步骤四:通过 impdp 命令将远程的 RDS 数据库文件导入 **
(1) 在源数据库服务器上运行 impdp 命令导入数据
impdp oracle@ORARDS dumpfile=test.dmp directory=dpump_dir1 full=y
执行完毕检查 test 用户和相关的表。
### 3. 总结
从上面的过程我们可以看到,将一个 Oracle 数据库迁移到 RDS 的过程并不复杂,如果源数据库很大,由于需要导出数据、将数据上传到 RDS 的 Data Pump 目录、导入数据,迁移的过程也会比较长。上述过程假设了我们生产数据库的业务有足够的停机时间,在迁移过程中数据不会变化。如果迁移过程中,源数据库会发生变化,那么我们就需要同步数据中心和 RDS 数据库间的日志了。
如果源数据库很大,我们也可以在 AWS 上启动一台中间服务器,并在中间服务器上安装 Oracle 的客户端软件,将源数据库的 Data Pump 导出文件分片然后 scp 复制、Tsunami UDP 加速上传等方式将文件上传到中间服务器,然后上传到 RDS 的 Data Pump 目录, 这样能加速迁移的过程。
#### 作者介绍:
!
蓝勇
AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广,在 DR 解决方案、数据仓库、RDS 服务、企业应用、自动化运维等方面有着广泛的设计和实践经验。在加入 AWS 之前,在甲骨文中国担任资深售前工程师,负责售前方案咨询和架构设计,在数据库,中间件,大数据及企业应用方面有丰富经验。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/oracle-data-pump-rds-oracle/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布