选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

将 Oracle CLOB 值迁移到 AWS 上 PostgreSQL 中的单独的行

聚焦模式
将 Oracle CLOB 值迁移到 AWS 上 PostgreSQL 中的单独的行 - AWS Prescriptive Guidance

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

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

创建者:Sai Krishna Namburu (AWS) 和 Sindhusha Paturu (AWS)

摘要

此模式描述了如何在 Amazon Aurora PostgreSQL-Compatible Edition 和 Amazon Relational Database Service(Amazon RDS)for PostgreSQL 中将 Oracle 字符大型对象(CLOB)值拆分为单独的行。PostgreSQL 不支持 CLOB 数据类型。

在 Oracle 源数据库中标识具有间隔分区的表,并捕获表名、分区类型、分区间隔和其他元数据并将其加载到目标数据库中。您可以使用 AWS Database Migration Service(AWS DMS)将大小小于 1 GB 的 CLOB 数据作为文本加载到目标表中,也可以用 CSV 格式导出数据,将其加载到 Amazon Simple Storage Service(Amazon S3)存储桶中,然后将其迁移到目标 PostgreSQL 数据库。

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

先决条件和限制

先决条件

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

  • Aurora PostgreSQL-Compatible 或 Amazon RDS for PostgreSQL 数据库,其表结构与源表相似(列和数据类型相同)。

限制

  • CLOB 值不能超过 1 GB。

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

产品版本

  • Oracle 12c

  • Aurora PostgreSQL 11.6

架构

下图显示了包含 CLOB 数据的 Oracle 源表,以及 Aurora PostgreSQL-Compatible 版本 11.6 中的等效 PostgreSQL 表。

CLOB 源表和等效的 PostgreSQL 目标表。

工具

Amazon Web Services

其他工具

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

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

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

最佳实践

有关将数据库从 Oracle 迁移到 PostgreSQL 的最佳实践,请参阅 AWS Blog 文章将 Oracle 数据库迁移至 Amazon RDS PostgreSQL 或 Amazon Aurora PostgreSQL 的最佳实践:迁移过程和基础设施注意事项

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

操作说明

Task描述所需技能

分析 CLOB 数据。

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

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

SELECT * FROM clobdata_or;  

开发人员

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

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

有关使用 AWS DMS 完成此任务的信息,请参阅 AWS DMS 文档中的使用 Oracle 数据库作为源以及使用 PostgreSQL 作为目标

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

迁移工程师、数据库管理员

验证目标 PostgreSQL 表。

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

SELECT * FROM clobdata_pg; SELECT * FROM clobdatatarget;

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

开发人员

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

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

开发人员

识别 CLOB 数据

Task描述所需技能

分析 CLOB 数据。

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

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

SELECT * FROM clobdata_or;  

开发人员

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

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

有关使用 AWS DMS 完成此任务的信息,请参阅 AWS DMS 文档中的使用 Oracle 数据库作为源以及使用 PostgreSQL 作为目标

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

迁移工程师、数据库管理员

验证目标 PostgreSQL 表。

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

SELECT * FROM clobdata_pg; SELECT * FROM clobdatatarget;

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

开发人员

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

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

开发人员
Task描述所需技能

验证目标表中的数据。

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

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

验证数据。

Task描述所需技能

验证目标表中的数据。

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

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

相关资源

其他信息

用于拆分 CLOB 数据的 PostgreSQL 函数

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' ;

输入和输出示例

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

创建一个包含三行输入的 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

将源数据加载到 PostgreSQL 暂存表(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

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。