SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(
p_bucket_name => 'ora-datadump',
p_s3_prefix => 'dump/',
p_directory_name => 'DATA_PUMP_DIR')
AS TASK_ID FROM DUAL;
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.OPEN( operation => ‘IMPORT’, job_mode => ‘SCHEMA‘, job_name=>null);
DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => ‘DPADMIN.DMP’, directory => ‘DATA_PUMP_DIR‘, filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.START_JOB(hdnl);
查询表是否已导入
6. 创建DMS RDS终端节点和复制实例
6.1 创建终端节点
1. 创建终端节点RDS Oracle,只需选择已有的实例即可
2. 配置终端节点RDS Oracle的用户名和口令
3. 创建终端节点为s3
4. 配置终端节点s3的存储桶名和文件夹
5. 配置终端节点s3参数,使用以下额外连接属性来指定输出文件的 Parquet 版本:
parquetVersion=PARQUET_2_0;
6.2 创建复制实例
1. 创建复制实例,命名并选择实例类型
2. 配置复制实例
6.3 创建并执行迁移任务
1. 创建数据库迁移任务,命名标识符,选择创建的复制实例,选择源和目标终端节点
2. 配置数据库迁移任务,选择向导模式
3. 配置数据库迁移任务表映像,架构名称为%,表名称为之前Oracle数据库创建的表DEP;选择“创建任务”
4. 观察数据库迁移任务状态,从“正在运行”到“加载完成”
5. 查看s3终端节点的目录,可以看到生成parquet文件
7. 使用Athena分析Oracle Expdp导出数据
7.1 Athena操作步骤
先设置一下Athena查询结果的存放位置,选择s3存储桶的路径
在Default数据库下创建表dep,CREATE TABLE 语句必须包含分区详细信息,使用 LOCATION 指定分区数据的根位置,运行以下内容进行查询
CREATE EXTERNAL TABLE IF NOT EXISTS `default`.`dep` (
`dep_id` int,
`dep_name` string
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
LOCATION 's3://ora-datadump/output/expdp/DPADMIN/DEP/'
查询dep表的结果
8. 方案二 使用Oracle Exp导出数据
受限于Oracle版本和使用习惯,很多用户还在使用Exp/Imp,其更适合用于数据量较小且不需要BINARY_FLOAT 和BINARY_DOUBLE等数据类型。导入过程会创建架构对象,非常适合用于包含小型表的数据库。
上述RDS Oracle DBMS_DATAPUMP 仅适用于Oracle Datadump导出的 expdp 文件,而使用Exp/Imp工具导出的二进制文件无法直接导入RDS Oracle。需要新建一台EC2,安装Oracle DB,Imp导入二进制文件。
8.1 预期目标
在本地数据库新建一张表,并通过Exp将该用户下的所有表导出
将dmp文件上传到s3存储桶
启动一台EC2 Windows,并安装Oracle 19c,安装步骤请参考Oracle Database Installation
将dmp文件导入到EC2 Oracle,并能查询到表
使用DMS将数据导出Parquet格式存在s3,并能查询到表
在Athena中查询表
9. 导出数据并上传到s3存储桶
EXP导出数据和日志
exp dpadmin/oracle@orcl file=C:\app\oracle\oradata\exp\exp0628.dmp log=C:\app\oracle\oradata\exp\exp0628.log owner=(dpadmin)
将日志上传到s3存储桶对应的文件夹
在云上EC2 Windows上下载AWS CLI客户端
C:\Users\Administrator>msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
C:\Users\Administrator>aws --version
aws-cli/2.7.14 Python/3.9.11 Windows/10 exec-env/EC2 exe/AMD64 prompt/off
选中EC2 Windows,选择 操作–>实例设置 –> 附加/替换IAM角色,选择创建好的S3_full_access Role(附加可以访问对应s3存储桶的策略)
使用AWS CLI同步本地和s3存储桶的文件,将Exp导出的数据上传到s3
C:\aws s3 sync s3://ora-datadump/expdump/ C:\app\oracle\admin\orcl\dpdump\exp
10. 使用EC2 Oracle Imp导入数据
在测试用的EC2 Oracle DB,先将dep表删除
再将数据导入orcl数据库中,指定用户名和表名
imp dpadmin/oracle@orcl file=C:\app\oracle\oradata\exp\exp0628.dmp fromuser=dpadmin tables=(dep)
验证导入的表
11. 创建DMS 终端节点
11.1 创建终端节点
1. 创建终端节点EC2 Oracle
2.测试终端节点EC2 Oracle连通性
3.创建终端节点s3
配置终端节点s3参数,使用以下额外连接属性来指定输出文件的 Parquet 版本:
parquetVersion=PARQUET_2_0;
11.2 创建并执行迁移任务
1. 创建数据库迁移任务,命名“任务标识符”,延用之前的复制实例,选择源和目标终端节点
2. 配置数据库迁移任务,选择向导模式
3. 配置数据库迁移任务“表映像”,架构名称为%,表名称为之前创建的DEP
4. 查看数据库迁移任务状态
5. 查看s3终端节点的目录,可以看到生成parquet文件
12. 使用Athena分析Oracle Exp导出数据
12.1 Athena操作步骤
创建库exp
CREATE DATABASE exp
CREATE TABLE 语句必须包含分区详细信息,使用 LOCATION 指定分区数据的根位置,运行以下内容并进行查询
CREATE EXTERNAL TABLE IF NOT EXISTS `exp`.`dep` (
`dep_id` int,
`dep_name` string
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
LOCATION 's3://ora-datadump/output/exp/DPADMIN/DEP/'
查询dep表的结果
13. 总结
本文讨论的是在混合云架构下将本地Oracle数据库数据上传到云上,利用云上的大数据工具进行分析,这只是亚马逊云科技数据湖的一个使用场景。数据湖是由多个大数据组件和云服务组成的一个解决方案,可以存储结构化数据(如关系型数据库中的表),半结构化数据(如CSV、JSON),非结构化数据(如文档、PDF)和二进制数据(如图片、音视频)。通过数据湖可以快速地存储、处理、分析海量的数据,同时在安全合规的场景下使用多种多样的手段进行分析。
14. 参考资料
[1] 使用 AWS DMS 以 Parquet 格式将数据迁移到 Amazon S3
[2] Amazon RDS for Oracle与Amazon S3集成
[3] 使用Oracle数据泵将本地Oracle数据库迁移到适用Amazon RDS for Oracle
[4] 使用Oracle Data Pump导入
[5] 将数据导入Amazon RDS数据库实例