在 Postg SQL re 中将 Oracle 的CLOB值迁移到各个行 AWS - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Postg SQL re 中将 Oracle 的CLOB值迁移到各个行 AWS

由 Sai Krishna Namburu (AWS) 和 Sindhusha Paturu () 创作 AWS

环境:PoC 或试点

源:Oracle 数据库

目标:SQL兼容 Aurora Postgre 或亚马RDS逊 Postgre 版 SQL

R 类型:更换平台

工作负载:Oracle;开源

技术:迁移;存储和备份;数据库

AWS服务:亚马逊 Aurora;AWSDMS;亚马逊 S3;亚马逊 RDS

Summary

此模式描述了如何在亚马逊 Aurora Postgre SQL 兼容版和适用于 Postgre 的亚马逊关系数据库服务(亚马逊CLOB)中将 Oracle 字符大对象 (RDS) 值拆分为单独的行。SQLPostgre SQL 不支持该CLOB数据类型。

在 Oracle 源数据库中标识具有间隔分区的表,并捕获表名、分区类型、分区间隔和其他元数据并将其加载到目标数据库中。您可以使用 CLOB Datab AWS ase Migration Service (AWSDMS) 将大小小于 1 GB 的数据以文本形式加载到目标表中,也可以以CSV格式导出数据,将其加载到亚马逊简单存储服务 (Amazon S3) Simple S3 存储桶中,然后将其迁移到目标 SQL Postgre 数据库。

迁移后,您可以使用此模式提供的自定义 Postgre SQL 代码,根据换行符标识符 (CHR(10)) 将CLOB数据拆分为单独的行,然后填充目标表。 

先决条件和限制

先决条件

  • 具有间隔分区和CLOB数据类型的记录的 Oracle 数据库表。

  • SQL兼容 Aurora Postgre 或 Amazon RDS for Postgre 的数据SQL库,其表结构与源表相似(列和数据类型相同)。

限制

  • 该CLOB值不能超过 1 GB。

  • 目标表中的每一行都必须有一个换行符字符标识符。

产品版本

  • Oracle 12c

  • Aurora PostgreSQL 11.6

架构

下图显示了包含CLOB数据的源 Oracle 表,以及 Aurora Postgre SQL-Compatible 版本 11 SQL .6 中的等效 Postgre 表。

源CLOB表和等效的目标 Postgre SQL 表。

工具

AWS服务

其他工具

您可以使用以下客户端工具连接、访问和管理您的 Aurora Postgre SQL-Compatible 和 Amazon for Post SQL gre RDS 数据库。(此模式中不使用这些工具。)

  • pgAdmin是 Postgre SQL 的开源管理工具。它提供了一个图形界面,可帮助您创建、维护和使用数据库对象。

  • DBeaver是面向开发人员和数据库管理员的开源数据库工具。您可以使用该工具来操作、监控、分析、管理和迁移数据。

最佳实践

有关将数据库从 Oracle 迁移到 Postgre 的最佳实践SQL,请参阅AWS博客文章《将 Orac le 数据库迁移到 Amazon P RDS ostgre 的最佳实践》SQL或 Amazon Aurora PostgreSQL:迁移过程和基础设施注意事项。

有关配置迁移大型二进制对象AWSDMS任务的最佳实践,请参阅AWSDMS文档中的迁移大型二进制对象 (LOBs)

操作说明

任务描述所需技能

分析CLOB数据。

在源 Oracle 数据库中,分析CLOB数据以查看其是否包含列标题,这样您就可以确定将数据加载到目标表中的方法。 

要分析输入数据,请使用以下查询。

SELECT * FROM clobdata_or;  

开发人员

将CLOB数据加载到目标数据库。

将包含CLOB数据的表迁移到 Aurora 或 Amazon RDS 目标数据库中的临时(暂存)表。您可以将数据作为CSV文件使用AWSDMS或上传到 Amazon S3 存储桶。

AWSDMS有关使用执行此任务的信息,请参阅AWSDMS文档中的使用 Oracle 数据库作为源使用 Postgre SQL 数据库作为目标

有关使用 Amazon S3 完成此任务的信息,请参阅AWSDMS文档中的使用 Amazon S3 作为目标

迁移工程师,DBA

验证目标 Postgre SQL 表。

在目标数据库中使用以下查询,根据源数据验证目标数据(包括标头)。

SELECT * FROM clobdata_pg; SELECT * FROM clobdatatarget;

将结果与源数据库的查询结果(从第一步开始)进行比较。

开发人员

将CLOB数据拆分为单独的行。

运行 “其他信息” 部分中提供的自定义 Postgre SQL 代码以拆分CLOB数据并将其插入目标 Postgre SQL 表中的单独行中。

开发人员
任务描述所需技能

验证目标表中的数据。

使用以下查询验证插入到目标表中的数据。

SELECT * FROM clobdata_pg; SELECT * FROM clobdatatarget;
开发人员

相关资源

其他信息

用于拆分CLOB数据的 Postgre SQL 函数

do $$ declare totalstr varchar; str1 varchar; str2 varchar; pos1 integer := 1; pos2 integer ; len integer; begin select rawdata||chr(10) into totalstr from clobdata_pg; len := length(totalstr) ; raise notice 'Total length : %',len; raise notice 'totalstr : %',totalstr; raise notice 'Before while loop'; while pos1 < len loop select position (chr(10) in totalstr) into pos2; raise notice '1st position of new line : %',pos2; str1 := substring (totalstr,pos1,pos2-1); raise notice 'str1 : %',str1; insert into clobdatatarget(data) values (str1); totalstr := substring(totalstr,pos2+1,len); raise notice 'new totalstr :%',totalstr; len := length(totalstr) ; end loop; end $$ LANGUAGE 'plpgsql' ;

输入和输出示例

在迁移数据之前,您可以使用以下示例试用 Postgr SQL e 代码。

创建一个包含三行输入的 Oracle 数据库。

CREATE TABLE clobdata_or ( id INTEGER GENERATED ALWAYS AS IDENTITY, rawdata clob ); insert into clobdata_or(rawdata) values (to_clob('test line 1') || chr(10) || to_clob('test line 2') || chr(10) || to_clob('test line 3') || chr(10)); COMMIT; SELECT * FROM clobdata_or;

这会显示以下输出。

id

rawdata

1

测试行 1 测试行 2 测试行 3

将源数据加载到 Po SQL stgre 暂存表 (clobdata_pg) 中进行处理。

SELECT * FROM clobdata_pg; CREATE TEMP TABLE clobdatatarget (id1 SERIAL,data VARCHAR ); <Run the code in the additional information section.> SELECT * FROM clobdatatarget;

这会显示以下输出。

id1

数据

1

测试行 1

2

测试行 2

3

测试行 3