

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Oracle CLOB 値を AWS 上の PostgreSQL の個々の行に移行
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws"></a>

*Amazon Web Services、Sai Krishna Namburu、Sindhusha Paturu*

## 概要
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-summary"></a>

このパターンは、Amazon Aurora PostgreSQL 互換エディションと PostgreSQL 用 Amazon Relational Database Service (Amazon RDS) で Oracle キャラクターラージオブジェクト (CLOB) の値を個々の行に分割する方法を示しています。PostgreSQL は CLOB データ型をサポートしていません。

インターバルパーティションのあるテーブルはソース Oracle データベースで識別され、テーブル名、パーティションのタイプ、パーティションの間隔、およびその他のメタデータがキャプチャされ、ターゲットデータベースにロードされます。サイズが 1 GB 未満の CLOB データは、AWS Database Migration Service (AWS DMS) を使用してテキストとしてターゲットテーブルにロードできます。または、データを CSV 形式でエクスポートして Amazon Simple Storage Service (Amazon S3) バケットにロードし、ターゲット PostgreSQL データベースに移行できます。

移行後は、このパターンで提供されるカスタム PostgreSQL コードを使用して、CLOB データを改行文字識別子 (`CHR(10)`) に基づいて個々の行に分割し、ターゲット** **テーブルにデータを入力できます。 

## 前提条件と制限事項
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-prereqs"></a>

**前提条件**
+ 区間パーティションと CLOB データ型のレコードを含む Oracle データベーステーブル。
+ Aurora PostgreSQL 互換または Amazon RDS for PostgreSQL データベースで、ソーステーブルと同様のテーブル構造 (同じ列とデータ型) を備えています。

**制限事項**
+ CLOB 値は 1 GB を超えることはできません。
+ ターゲットテーブルの各行には、改行文字 ID が必要です。

**製品バージョン**
+ Oracle 12c
+ Aurora ポストグレス11.6

## アーキテクチャ
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-architecture"></a>

次の図は、CLOB データを含むソース Oracle テーブルと、Aurora PostgreSQL 互換バージョン 11.6 の同等の PostgreSQL テーブルを示しています。

![\[ソース CLOB テーブルおよび同等のターゲット PostgreSQL テーブル\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/55806ee7-6a9f-4058-9a47-a07de68223ca/images/79b9d4b9-6f20-4db5-8ca8-2a599769a498.png)


## ツール
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-tools"></a>

**AWS サービス**
+ 「[Amazon Aurora PostgreSQL 互換エディション](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)」は、PostgreSQL デプロイのセットアップ、運用、スケーリングを支援するフルマネージド型で ACID 準拠のリレーショナルデータベースエンジンです。
+ 「[Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)」を使用して、AWS クラウドでの PostgreSQL リレーショナルデータベースをセットアップ、運用、スケーリングできます。
+ 「[AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)」 を使用して、データストアを AWS クラウドへ、またはクラウドセットアップとオンプレミスセットアップの組み合わせの間に移行します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

その他のツール

以下のクライアントツールを使用して、Aurora PostgreSQL 互換データベースと Amazon RDS for PostgreSQL データベースへの接続、アクセス、管理を行うことができます。(これらのツールはこのパターンでは使用されません)。
+ 「[pgAdmin](https://www.pgadmin.org/)」は PostgreSQL 用のオープンソース管理ツールです。データベースオブジェクトの作成、管理、使用を支援するグラフィカルインターフェイスを提供します。
+ 「[DBeaver](https://dbeaver.io/)」は、開発者やデータベース管理者向けのオープンソースのデータベースツールです。このツールを使用して、データの操作、監視、分析、管理、移行を行うことができます。

## ベストプラクティス
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-best-practices"></a>

データベースを Oracle から PostgreSQL に移行するためのベストプラクティスについては、AWS ブログ記事「[Oracle データベースを Amazon RDS PostgreSQL または Amazon Aurora PostgreSQL に移行するためのベストプラクティス:移行プロセスとインフラストラクチャに関する考慮事項](https://aws.amazon.com/blogs/database/best-practices-for-migrating-an-oracle-database-to-amazon-rds-postgresql-or-amazon-aurora-postgresql-migration-process-and-infrastructure-considerations/)」を参照してください。

大きなバイナリオブジェクトを移行するための AWS DMS タスクを設定するベストプラクティスについては、AWS DMS ドキュメントの「[ラージバイナリオブジェクト (LOB) の移行](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html#CHAP_BestPractices.LOBS)」を参照してください。

## エピック
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-epics"></a>

### CLOB データを識別してください。
<a name="identify-the-clob-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CLOB データを分析します。 | ソース Oracle データベースで CLOB データを分析して列ヘッダーが含まれているかどうかを確認し、データをターゲットテーブルに読み込む方法を決定できるようにします。 入力データを分析するには、次のクエリを使用します。`SELECT * FROM clobdata_or;  ` | 開発者 | 
| CLOB データをターゲットデータベースにロードします。 | CLOB データを含むテーブルを Aurora または Amazon RDS ターゲットデータベースの中間 (ステージング) テーブルに移行します。AWS DMS を使用するか、CSV ファイルとして Amazon S3 バケットにアップロードできます。このタスクで AWS DMS を使用する方法については、AWS DMS ドキュメントの「[Oracle データベースのソースとしての使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)」と「[PostgreSQL データベースのターゲットとしての使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)」を参照してください。このタスクに Amazon S3 を使用する方法については、AWS DMS ドキュメントの「[ターゲットとしての Amazon S3 の使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html)」を参照してください。 | 移行エンジニア、DBA | 
| ターゲット PostgreSQL テーブルを検証します。 | ターゲットデータベースで以下のクエリを使用して、ヘッダーを含むターゲットデータをソースデータに対して検証します。<pre>SELECT * FROM clobdata_pg;<br />SELECT * FROM clobdatatarget;</pre>結果を (最初のステップの) ソースデータベースからのクエリ結果と比較します。 | 開発者 | 
| CLOB データを別々の行に分割します。 | 「[追加情報](#migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-additional)」セクションに記載されているカスタム PostgreSQL コードを実行して、CLOB データを分割し、ターゲット PostgreSQL テーブルの別々の行に挿入します。 | 開発者 | 

### データを検証します。
<a name="validate-the-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ターゲットテーブルのデータを検証します。 | 次のクエリを使用して、ターゲットテーブルに挿入されたデータを検証します。<pre>SELECT * FROM clobdata_pg;<br />SELECT * FROM clobdatatarget;</pre> | 開発者 | 

## 関連リソース
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-resources"></a>
+ 「[CLOB データ型](https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF0021)」(Oracle ドキュメント)
+ 「[データタイプ](https://www.postgresql.org/docs/11/datatype.html)」(PostgreSQL ドキュメンテーション)

## 追加情報
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-additional"></a>

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 コードを試すことができます。

3 行の入力を含む 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 | data | 
| 1 | テストライン 1 行目 | 
| 2 | テストライン 2 行目 | 
| 3 | テストライン 3 行目 | 