本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 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 表。
工具
AWS服务
Amazon Aurora Postgre SQL 兼容版是一款完全托管、ACID兼容的关系数据库引擎,可帮助您设置、操作和扩展 Postgre 部署。SQL
适用于 Postgre 的亚马逊关系数据库服务(亚马逊RDS)SQL可帮助您在云中设置、操作和扩展 Postgre SQL 关系数据库。AWS
AWSDat@@ abase Migration Service (AWSDMS) 可帮助您将数据存储迁移到AWS云端,或者在云端和本地设置的组合之间迁移。
Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
其他工具
您可以使用以下客户端工具连接、访问和管理您的 Aurora Postgre SQL-Compatible 和 Amazon for Post SQL gre RDS 数据库。(此模式中不使用这些工具。)
最佳实践
有关将数据库从 Oracle 迁移到 Postgre 的最佳实践SQL,请参阅AWS博客文章《将 Orac le 数据库迁移到 Amazon P RDS ostgre 的最佳实践》SQL或 Amazon Aurora PostgreSQL:迁移过程和
有关配置迁移大型二进制对象AWSDMS任务的最佳实践,请参阅AWSDMS文档中的迁移大型二进制对象 (LOBs)。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
分析CLOB数据。 | 在源 Oracle 数据库中,分析CLOB数据以查看其是否包含列标题,这样您就可以确定将数据加载到目标表中的方法。 要分析输入数据,请使用以下查询。
| 开发人员 |
将CLOB数据加载到目标数据库。 | 将包含CLOB数据的表迁移到 Aurora 或 Amazon RDS 目标数据库中的临时(暂存)表。您可以将数据作为CSV文件使用AWSDMS或上传到 Amazon S3 存储桶。 AWSDMS有关使用执行此任务的信息,请参阅AWSDMS文档中的使用 Oracle 数据库作为源和使用 Postgre SQL 数据库作为目标。 有关使用 Amazon S3 完成此任务的信息,请参阅AWSDMS文档中的使用 Amazon S3 作为目标。 | 迁移工程师,DBA |
验证目标 Postgre SQL 表。 | 在目标数据库中使用以下查询,根据源数据验证目标数据(包括标头)。
将结果与源数据库的查询结果(从第一步开始)进行比较。 | 开发人员 |
将CLOB数据拆分为单独的行。 | 运行 “其他信息” 部分中提供的自定义 Postgre SQL 代码以拆分CLOB数据并将其插入目标 Postgre SQL 表中的单独行中。 | 开发人员 |
任务 | 描述 | 所需技能 |
---|---|---|
验证目标表中的数据。 | 使用以下查询验证插入到目标表中的数据。
| 开发人员 |
相关资源
其他信息
用于拆分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 |