將甲骨 PostgreSQL 值遷移到 AWS 上的個別資料列 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將甲骨 PostgreSQL 值遷移到 AWS 上的個別資料列

創建者:賽克里希納南布魯(AWS)和新德莎帕特魯(AWS)

環境:PoC 或試點

來源:甲骨文數據庫

目標:Aurora 兼容或 Amazon RDS for PostgreSQL

R 類型:重新平台

工作負載:甲骨文; 開源

技術:移轉、儲存與備份、資料庫

AWS 服務:Amazon Aurora; AWS DMS; Amazon S3; Amazon RDS

Summary

此模式說明如何將甲骨文字元大型物件 (CLOB) 值分割為個別的資料列,以及適用於 PostgreSQL 的 Amazon Relational Database Service 服務 (Amazon RDS)。PostgreSQL 不支援 CLOB 資料類型。

具有間隔分割區的表格會在來源 Oracle 資料庫中識別,而且會擷取表格名稱、分割區類型、分割區間隔以及其他描述資料,並將其載入到目標資料庫中。您可以使用 AWS Database Migration Service (AWS DMS) 將小於 1 GB 的 CLOB 資料以文字形式載入目標資料表,或者可以以 CSV 格式匯出資料,將資料載入 Amazon Simple Storage Service (Amazon S3) 儲存貯體,然後將其遷移到目標 PostgreSQL 資料庫。

移轉之後,您可以使用此模式提供的自訂 PostgreSQL 程式碼,根據新行字元識別碼 (CHR(10)) 將 CLOB 資料分割成個別資料列,並填入目標資料表。 

先決條件和限制

先決條件

  • 具有間隔分割區和具有 CLOB 資料類型之記錄的 Oracle 資料庫表格。

  • 與 Aurora PostgreSQL 相容或 Amazon RDS 版 PostgreSQL 資料庫,其資料表結構類似於來源資料表 (相同的欄和資料類型)。

限制

  • CLOB 值不得超過 1 GB。

  • 目標資料表中的每一列都必須有新的行字元識別碼。

產品版本

  • Oracle 12c

  • Aurora 邮政 11.6

架構

下圖顯示了一個源甲骨文表與 CLOB 數據,以及 Aurora PostgreSQL 兼容版本 11.6 中的等效 PostgreSQL 表。

來源 CLOB 資料表和對等目標 PostgreSQL 資料表。

工具

AWS 服務

其他工具

您可以使用下列用戶端工具來連線、存取和管理與 Aurora PostgreSQL 相容和 Amazon RDS for PostgreSQL 資料庫。(這些工具不在此模式中使用。)

  • pgAdmin 是一個開放原始碼的管理工具。它提供了一個圖形界面,可幫助您創建,維護和使用數據庫對象。

  • DBeaver 是面向開發人員和數據庫管理員的開源數據庫工具。您可以使用此工具來操作、監視、分析、管理和移轉資料。

最佳實務

如需將資料庫從甲骨文遷移到 PostgreSQL 的最佳實務,請參閱 AWS 部落格文章將甲骨文資料庫遷移到 Amazon RDS PostgreSQL 或 Amazon Aurora PostgreSQL:遷移程序和基礎設施考量的最佳實務。

如需設定用於遷移大型二進位物件的 AWS DMS 任務的最佳實務,請參閱 AWS DMS 文件中的遷移大型二進位物件 (LOB)

史诗

任務描述所需技能

分析 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 做為目標

遷移工程師,DBA

驗證目 PostgreSQL 表。

使用目標資料庫中的下列查詢,針對來源資料驗證目標資料 (包括標頭)。

SELECT * FROM clobdata_pg; SELECT * FROM clobdatatarget;

將結果與來源資料庫的查詢結果進行比較 (從第一個步驟開始)。

開發人員

將 CLOB 數據拆分為單獨的行。

執行 [其他資訊] 區段中提供的自訂 PostgreSQL 程式碼,以分割 CLOB 資料,並將其插入目標 PostgreSQL 資料表中的個別資料列。

開發人員
任務描述所需技能

驗證目標表中的數據。

驗證通過使用以下查詢插入到目標表中的數據。

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

原始數據

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