写点什么

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

  • 2019-11-20
  • 本文字数:2182 字

    阅读完需:约 7 分钟

使用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数据库。示例数据库的信息如图。


![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/0929-1.png)下面是模拟在数据中心的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目录,这样能加速迁移的过程。
#### 作者介绍:
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/Lan+Yong-mini.jpg)
蓝勇
AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广,在DR解决方案、数据仓库、RDS服务、企业应用、自动化运维等方面有着广泛的设计和实践经验。在加入AWS之前,在甲骨文中国担任资深售前工程师,负责售前方案咨询和架构设计,在数据库,中间件,大数据及企业应用方面有丰富经验。
复制代码


TAGS:


Amazon RDS


,


Oracle数据库


,


大咖专栏


,


数据库


,


迁移


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/oracle-data-pump-rds-oracle/


2019-11-20 08:00807

评论

发布
暂无评论
发现更多内容

如何使用Fiddler抓取APP接口和微信授权网页源代码

北桥苏

fiddler 网络抓包 抓包分析 抓包工具

3 步集成 Terraform + 极狐GitLab CI ,实现基础设施自动化管理

极狐GitLab

ci DevOps 基础设施 Terraform 极狐GitLab

DevOps|AGI : 智能时代研发效能平台新引擎(上)

laofo

DevOps 研发效能 AGI AIGC 平台工程

AI 时代的到来,普通前端如何生存下去? | 社区征文

程序员海军

三周年征文

Thinkphp5.1允许uni-app的H5跨域请求接口解决方法

北桥苏

php uni-app 跨域 thinkphp

疯狂 SQL 转换系列-SQL for Milvus

数由科技

sql Milvus moql

【报告回顾】精、稳、敏、融,步入人民金融时代

易观分析

金融

蚂蚁实时低代码研发和流批一体的应用实践

Apache Flink

大数据 flink 实时计算

ThinkPHP5中如何实现模板完全静态化

北桥苏

thinkphp 模板静态

TPM — 系统安全的基石

鼎道智联

安全

疯狂SQL转换系列- SQL for MongoDB

数由科技

sql mongodb dsl moql

MobTech MobPush|TCP通道和共享链路通道

MobTech袤博科技

【技术干货】PCB焊盘设计之问题详解

华秋PCB

工具 PCB PCB设计 焊盘 可焊性

不要焦虑,要不断超越自己 | 社区征文

于仔学技术

认识自己 驱动力量 职场发展 学会思考 三周年征文

ios打包ipa的四种实用方法(.app转.ipa)

雪奈椰子

盘点漏洞种类和代码审计工具

北桥苏

代码审计 漏洞挖掘

ThinkPHP5.1无法记录SQL日志解决思路

北桥苏

php 日志级别 thinkphp

聊点技术 | 自适应AI,让Bonree ONE更智能

博睿数据

可观测性 智能运维 博睿数据 Bonree ONE ONE有引力

高性能网络 SIG 月度动态:长期投入得到业界认可,新增一位 virtio reviewer

OpenAnolis小助手

高性能网络 龙蜥社区 virtio anck SIG动态

高性能存储SIG月度动态:EROFS支持直接索引容器镜像tar包,io_uring将支持并优化NVMe直通

OpenAnolis小助手

操作系统 容器镜像 高性能存储 anck 龙蜥sig

九步排查Gateway-Worker启动失败问题

北桥苏

php Gateway thinkphp workerman

uni-app结合PHP实现单用户登陆

北桥苏

php uni-app 单点登录 thinkphp

Nginx 安装配置

芯动大师

nginx web 容器 三周年连更

ChatGPT 再遭禁用 | 人工智能时代下数据安全如何保障

BinTools图尔兹

人工智能 数据库 ChatGPT CloudQuery

图片文字识别:揭开数字世界的神秘面纱

来自四九城儿

极客公园对话 Zilliz 星爵:大模型时代,需要新的「存储基建」

Zilliz

Milvus Zilliz AIGC 向量数据库 LLMs

RPA技术简介

IT蜗壳-Tango

三周年连更

DApp泰山众筹系统开发合约搭建

薇電13242772558

智能合约 dapp

Selenium 自动化测试如何优雅的解决图片验证码问题

QE_LAB

自动化测试 图片验证码 selenium 登录验证 测试技术

TP5.0使用助手函数model出现\common\Model\类不存在

北桥苏

php thinkphp

使用Oracle Data Pump将数据库迁移到AWS的RDS Oracle数据库_其他_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章