テーブルとコレクション設定のルールとオペレーション - AWS Database Migration Service

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

テーブルとコレクション設定のルールとオペレーション

テーブル設定を使用して、指定されたオペレーションで選択されたテーブルまたはビューに適用する設定を指定します。エンドポイントと移行の要件に応じてテーブル設定ルールはオプションです。

テーブルやビューを使用する代わりに、MongoDB および Amazon DocumentDB データベースでは、データレコードをドキュメントとしてまとめて[collections](コレクション) 格納します。MongoDB または Amazon DocumentDB エンドポイントの 1 つのデータベースは、データベース名で識別される特定のコレクションセットです。

MongoDB または Amazon DocumentDB ソースから移行する場合、並列ロード設定の操作は少し異なります。この場合、テーブルおよびビューではなく、選択したコレクションに対する並列ロード設定の自動セグメンテーションまたは範囲セグメンテーション タイプを考慮します。

テーブル設定ルールタイプを使用するテーブルマッピングルールの場合、以下のパラメータを適用することができます。

[パラメータ] 使用できる値: 説明
rule-type table-settings 選択ルールにより指定されたテーブルまたはビューまたはコレクションにルールを適用する値。
rule-id 数値。 ルールを識別する一意の数値。
rule-name 英数字値。 ルールを特定する一意な名前。
object-locator 以下のパラメータを使用するオブジェクト。
  • schema-name – スキーマの名前。MongoDB と Amazon DocumentDB エンドポイントの場合、これはコレクションの集合を保持するデータベースの名前です。

  • table-name – テーブルまたはビューまたはコレクションの名前。

特定のスキーマ、テーブル、ビューの名前、または特定のデータベースとコレクションの名前 (ワイルドカードなし)。

parallel-load 以下のパラメータを使用するオブジェクト。
  • type – 並列ロードを有効にするかどうかを指定します。

    そうでない場合、このパラメータは、テーブルまたはビューのパーティション、サブパーティションや並列でロードする他のセグメントを識別するメカニズムもしています。パーティションは、ソーステーブルまたはビューですでに定義され、名前で識別されるセグメントです。

    MongoDB エンドポイントと Amazon DocumentDB エンドポイントの場合、パーティションは segments です。 は、関連する自動セグメンテーションパラメータを指定して、これらを自動的に計算 AWS DMS できます。または、範囲セグメンテーションパラメータを使用してこれらを手動で指定することもできます。

    Oracle エンドポイントのみでは、サブパーティションはソーステーブルまたはビューですでに定義されて名前によって識別できるセグメントの追加レベルとなります。1 つ以上のテーブル列またはビュー列に値範囲の境界を指定することで、table-settings ルール内の他のセグメントを識別できます。

  • partitionstypepartitions-list の場合、この値はすべてのパーティションが並列ロードされるように指定します。

  • subpartitions – Oracle エンドポイントのみでは、typepartitions-list の場合、この値はすべてのサブパーティションが並列ロードされるように指定します。

  • columnstyperanges の場合、この値は並列でロードする範囲ベースのセグメントを識別するために使用する列の名前を指定します。

  • boundariestyperanges の場合、この値は並列でロードされる範囲ベースのセグメントを識別するために使用する columns の値を指定します。

object-locator オプションで識別されたテーブルまたはビューでの並列ロード(マルチスレッド)オペレーションを指定する値。この場合、次の任意の方法で並行してロードすることができます。

  • 使用可能なすべてのパーティションまたはサブパーティションで指定されるセグメントによって。

  • パーティションおよびサブパーティションで選択することによって。

  • 指定した自動セグメンテーションまたは範囲ベースのセグメントセグメントに基づく。

並列ロードの詳細については、「選択したテーブルおよびビューさらにコレクションで並列ロードを使用する」をご参照ください。

type parallel-load の次のいずれか。
  • partitions-auto - テーブルまたはビューのすべてのパーティションが並列でロードされます。各パーティションは個別のスレッドに割り当てられます。

    これは、MongoDB および Amazon DocumentDB ソース エンドポイントが並列全ロードの自動セグメンテーション オプションを使用するために必要な設定です。

  • subpartitions-auto – (Oracle エンドポイントのみ) テーブルまたはビューのすべてのサブパーティションが並列でロードされます。すべてのサブパーティションは個別のスレッドに割り当てられます。

  • partitions-list - テーブルまたはビューで指定されたすべてのパーティションが並列でロードされます。Oracle エンドポイントのみでは、テーブルまたはビューのすべてのサブパーティションが並列でロードされます。指定する各パーティションおよびサブパーティションは、独自のスレッドに割り当てられます。並列ロードするパーティションおよびサブパーティションをパーティション名 (partitions) とサブパーティション名 (subpartitions) で指定します。

  • ranges – テーブルまたはビューまたはコレクションの範囲指定されたすべてのセグメントが並列ロードされます。識別した各テーブルまたはビューまたはコレクションのセグメントは自己スレッドに割り当てられます。このセグメントを列名 (columns) および 列の値 (boundaries) で指定します。

    PostgreSQL エンドポイントはこのタイプの並列ロードのみに対応します。ソースエンドポイントとして MongoDB と Amazon DocumentDB は、全ロードのこの範囲セグメンテーションタイプと並列自動セグメンテーションタイプの両方に対応しています (partitions-auto)。

  • none – テーブルまたはビューまたはコレクションは、パーティションやサブパーティションに関係なく、シングルスレッドタスクでロードされます(デフォルト)。詳細については、「[Creating a task] (タスクの作成)」をご参照ください。

並列でロードするテーブルまたはビューまたはコレクションのパーティションまたはサブパーティション、セグメントを識別するメカニズム。
number-of-partitions (オプション) type が MongoDB または Amazon DocumentDB エンドポイントの指定されたコレクションについて partitions-auto の場合、このパラメータは移行に使用されるパーティション (セグメント) の総数を指定します。デフォルトは 16 です。 並列ロードされるパーティションの正確な数を指定します。
collection-count-from-metadata (オプション) MongoDB または Amazon DocumentDB エンドポイントの指定されたコレクションpartitions-autoに対して が であり、このパラメータが に設定されている場合truetypeはパーティション数を決定するために推定コレクション数 AWS DMS を使用します。このパラメータが に設定されている場合false、 は実際のコレクション数 AWS DMS を使用します。デフォルトは true です。 並列ロードするパーティションの数を計算するために、推定収集回数と実際の収集数のどちらを使用するかを指定します。
max-records-skip-per-page (オプション) type が MongoDB または Amazon DocumentDB エンドポイントの指定されたコレクションについて partitions-auto の場合、これは各パーティションの境界を決定する際に一度にスキップするレコードの数です。 AWS DMS は、ページ割りスキップアプローチを使用して、パーティションの最小境界を決定します。デフォルトは 10,000 です。 各パーティションの境界を決定するときに一度にスキップするレコード数を指定します。デフォルトより比較的高い値を設定すると、タイムアウトし、タスクが失敗する可能性がある。デフォルトから比較的低い値を設定すると、ページあたりのオペレーションが多くなり、全ロードが遅くなります。
batch-size (オプション) type が MongoDB または Amazon DocumentDB エンドポイントの指定されたコレクションについて partitions-auto の場合、この整数値により、1 回のラウンドトリップ バッチで返されるドキュメントの数が制限されます。バッチサイズがゼロ (0) の場合、カーソルはサーバー定義の最大バッチサイズを使用します。デフォルトは 0 です。 1 つのバッチで返されるドキュメントの最大数を指定します。各バッチには、サーバーへの往復が必要です。
partitions typepartitions-list の場合、これは並列でロードするパーティションの名前を指定する文字列の配列です。 並列ロードするパーティションの名前。
subpartitions (Oracle エンドポイントのみ) typepartitions-list の場合、これは並列してロードするサブパーティションの名前を指定する文字列の配列です。 並列ロードするサブパーティションの名前。
columns typeranges の場合、並列ロードする範囲ベースのテーブルセグメントまたはビューセグメントまたはコレクションセグメントを識別する列の名前に設定された文字列の配列です。 並列ロードする範囲ベースのテーブルセグメントまたはビューセグメントまたはコレクションセグメントを識別する列の名前。
boundaries typeranges の場合、列の値の配列の配列。各列の値の配列には、数量の列値と columns で指定された順序が含まれています。列の値の配列はテーブルセグメントまたはビューセグメントまたはコレクションセグメントの上限の境界を指定します。各追加列値の配列は、1 つの追加テーブルセグメントまたはビューセグメンまたはコレクションセグメントの上限の境界を追加します。このような範囲ベースのテーブルセグメントまたはビューセグメントまたはコレクションセグメントはすべて並列ロードされます。 並列ロードする範囲ベースのテーブルパーティションまたはビューパーティションまたはコレクションパーティションを識別する列の値。
lob-settings 以下のパラメータを使用するオブジェクト。
  • mode - LOB の移行処理モードを指定します。

  • bulk-max-sizemode の設定に応じて、LOB の最大サイズを指定します。

object-locator オプションによって識別されるテーブルまたはビューの LOB 処理を指定する値。指定された LOB 処理は、このテーブルまたはビューのみのすべてのタスク LOB 設定を上書きします。LOB 設定パラメータの使用に関する詳細については、「選択したテーブルまたはビューの LOB 設定を指定」をご参照ください。
mode

以下の値を使用して、指定されたテーブルまたはビューの LOB の移行処理を指定します。

  • limited - (デフォルト)この値は、テーブルまたはビュー内の他のすべての列データ型とともにすべての LOB 移行インラインにより、制限された LOB モードに移行を設定します。主に小さな LOB (100 MB 以下) をレプリケートするときに、この値を使用します。また、bulk-max-size 値を指定します(ゼロは無効です)。bulk-max-size より大きなサイズの移行された LOB はすべて、設定したサイズに切り捨てられます。

  • unlimited - この値は、移行を完全 LOB モードに設定します。レプリケートするほとんどあるいはすべての LOB が 1 GB より大きい場合には、この値を使用します。bulk-max-size 値をゼロに指定する場合、すべての LOB は標準の完全 LOB モードで移行されます。この形式の unlimited モードでは、ソーステーブルまたはビューからのルックアップを使用して、すべての LOB が他の列データタイプとは別に移行されます。bulk-max-size 値をゼロより大きく設定する場合、すべての LOB は組み合わせ完全 LOB モードで移行されます。この形式の unlimited モードでは、bulk-max-size よりも大きな LOB は、ソーステーブルルックアップまたはビュールックアップを使用して移行されます。これは、標準完全 LOB モードに類似しています。それ以外の場合は、このサイズ以下の LOB はインラインで移行されます。これは制限付き LOB モードに似ています。使用する形式に関係なく、unlimited モードでは LOB が切り捨てられることはありません。

  • none - すべてのテーブルまたはビューの LOB はタスクの LOB 設定に従って移行されます。

    タスクの LOB 設定の詳細については、「ターゲットメタデータのタスク設定」をご参照ください。

    LOB を移行する方法およびこれらのタスクの LOB 設定を指定する方法については、「AWS DMS タスクでのソースデータベースの LOB サポートの設定」をご参照ください。

LOB を移行するために使用されるメカニズム。
bulk-max-size この値の効果は mode によって異なります。 LOB の最大サイズ (キロバイト単位)。このオプションは、小さな LOB をレプリケートする必要がある場合、またはターゲットエンドポイントが無制限の LOB サイズをサポートしていない場合にのみ指定します。

テーブル設定内のワイルドカードの制限

次のとおり、"table-settings" ルールでのパーセントのワイルドカード ("%") の使用は、ソースデータベースではサポートされていません。

{ "rule-type": "table-settings", "rule-id": "8", "rule-name": "8", "object-locator": { "schema-name": "ipipeline-prod", "table-name": "%" }, "parallel-load": { "type": "partitions-auto", "number-of-partitions": 16, "collection-count-from-metadata": "true", "max-records-skip-per-page": 1000000, "batch-size": 50000 } }

次に示すように"table-settings"、ルール"%"で を使用すると、 は次の例外 AWS DMS を返します。

Error in mapping rules. Rule with ruleId = x failed validation. Exact schema and table name required when using table settings rule.

さらに、 では、 で 1 つのタスクを使用して大量の大規模なコレクションをロードしない AWS ことをお勧めしますparallel-loadMaxFullLoadSubTasks タスク設定パラメータ値により、 AWS DMS はリソース競合と、並行してロードするセグメント数を制限することに注意します。MaxFullLoadSubTasks の最大値は 49 です。

この代わりに各 "schema-name""table-name" を個別に指定して、最大のコレクションのソースデータベースのすべてのコレクションを指定します。また、移行は適切にスケールアップします。例えば、データベース内の大量のコレクションを処理するのに十分な数のレプリケーションインスタンスで複数のタスクを実行します。

選択したテーブルおよびビューさらにコレクションで並列ロードを使用する

移行を高速化してより効率的にするには、選択したリレーショナルテーブルおよびビューおよびコレクションを並列ロードできます。つまり、数本のスレッドを並列使用し、単一セグメント化テーブルまたはビュー、コレクションを移行できます。これを行うには、 は全ロードタスクをスレッドに AWS DMS 分割し、各テーブルセグメントを独自のスレッドに割り当てます。

この並列ロードプロセスを使用すると、まず複数スレッドが複数テーブルおよびビューおよびコレクションをソースのエンドポイントから並列アップロードするようにできます。次に、複数のスレッドを移行し、同じテーブルおよびビューおよびコレクションをターゲットエンドポイントに並列ロードすることができます。一部のデータベースエンジンでは、既存のパーティションあるいはサブパーティションを使用してテーブルおよびビューをセグメント化することができます。他のデータベースエンジンでは、特定のパラメータ (自動セグメンテーション) に従ってコレクション AWS DMS を自動的にセグメント化できます。それ以外の場合は、列の値の範囲を指定することで任意のテーブルまたはビュー、コレクションをセグメント化できます。

並列ロードは以下のソースエンドポイントでサポートされています。

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • IBM Db2 LUW

  • SAP Adaptive Server Enterprise (ASE)

  • MongoDB (並列全ロードの自動セグメンテーションと範囲セグメンテーション オプションのみサポート)

  • Amazon DocumentDB (並列全ロードの自動セグメンテーションと範囲セグメンテーション オプションのみをサポート)

MongoDB および Amazon DocumentDB エンドポイントの場合、 は並列全ロードの範囲セグメンテーションオプションのパーティションキーである列に対して次のデータ型 AWS DMS をサポートします。

  • ダブル

  • 文字列

  • ObjectId

  • 32 ビット整数

  • 64 ビット整数

テーブル設定ルールで使用する並列ロードは、次のターゲットエンドポイントでサポートされます。

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • Amazon S3

  • SAP Adaptive Server Enterprise (ASE)

  • Amazon Redshift

  • MongoDB (並列全ロードの自動セグメンテーションと範囲セグメンテーション オプションのみサポート)

  • Amazon DocumentDB (並列全ロードの自動セグメンテーションと範囲セグメンテーション オプションのみをサポート)

  • Db2 LUW

並行してロードするテーブルとビューの最大数を指定するには、MaxFullLoadSubTasks タスク設定を使用します。

並列ロードタスクのサポートされるターゲットのテーブルまたはビューごとの最大スレッド数を指定するには、列値の境界を使用してさらに多くのセグメントを定義できます。

重要

MaxFullLoadSubTasks は、並行してロードするテーブルまたはテーブルのセグメント数を制御します。ParallelLoadThreads は、ロードを並行して実行するために移行タスクが使用するスレッド数を制御します。上記の設定は乗算です。そのため、フルロードタスクで使用するスレッドの合計数は、ほぼ ParallelLoadThreads 値と MaxFullLoadSubTasks 値を乗算した値になります (ParallelLoadThreads * MaxFullLoadSubtasks))

多数のフルロードサブタスクがあり、多数の並列ロードスレッドがあるタスクを作成すると、タスクがメモリを大量に消費してエラーとなる可能性があります。

Amazon DynamoDB、Amazon Kinesis Data Streams、Apache Kafka、または Amazon Elasticsearch Service のターゲットのテーブルあたりの最大スレッド数を指定するには、ParallelLoadThreads ターゲットメタデータタスク設定を使用します。

ParallelLoadThreads を使用する際に並列ロードタスクのバッファサイズを指定するには、ParallelLoadBufferSize ターゲットメタデータタスク設定を使用します。

ParallelLoadThreadsParallelLoadBufferSize の可用性と設定は、ターゲットエンドポイントによって異なります。

ParallelLoadThreadsParallelLoadBufferSize の設定の詳細については、「ターゲットメタデータのタスク設定」をご参照ください。MaxFullLoadSubTasks の設定の詳細については、「全ロードタスク設定」をご参照ください。ターゲットエンドポイントに固有の情報については、関連するトピックをご参照ください。

並列ロードを使用するには、parallel-load オプションを指定した table-settings タイプのテーブルマッピングルールを作成します。table-settings ルールでは、並列ロードする単一テーブルまたはビュー、コレクションのセグメント化条件を指定できます。これを行うには、 parallel-load オプションの type パラメータの複数のオプションのいずれかに設定します。

これを行う方法は、並行ロード用にテーブルまたはビュー、コレクションのセグメント化方法によって異なります。

  • パーティション (またはセグメント) を使用 - partitions-auto タイプを使用して、すべての既存のテーブルまたはビューのパーティション (またはセグメント) をロードします。または、partitions-list タイプを指定したパーティション配列で使用して、選択したパーティションのみをロードします。

    MongoDB および Amazon DocumentDB エンドポイントのみ、 partitions-autoタイプと追加のオプションtable-settingsパラメータを使用して AWS DMS 自動的に計算するセグメントごとに、すべてのコレクションまたは指定されたコレクションをロードします。

  • (Oracle エンドポイントのみ) サブパーティションを使用 - subpartitions-auto タイプを使用してすべての既存のテーブル サブパーティションまたはビューサブパーティションをロードします。または、partitions-list タイプを指定した subpartitions 配列で使用して、選択したサブパーティションのみをロードします。

  • 定義するセグメントを使用 - 列値の境界を使用して定義したテーブルセグメントまたはビューセグメントまたはコレクションセグメントをロードします。これを行うには、ranges タイプを指定した columns 配列および boundaries 配列で使用します。

    注記

    PostgreSQL エンドポイントはこのタイプの並列ロードのみに対応します。ソースエンドポイントとして MongoDB と Amazon DocumentDB は、全ロードのこの範囲セグメンテーションタイプと並列自動セグメンテーションタイプの両方に対応しています (partitions-auto)。

並列でロードする追加のテーブルまたはビュー、コレクションを識別するには、追加の table-settings オブジェクトを parallel-load オプションで指定します。

次の手順では、各並列ロードタイプの JSON を記述する方法を、単純なものからきわめて複雑なものまで説明します。

すべてのテーブルまたはビューあるいはコレクション パーティション、またはすべてのテーブルまたはビューまたはコレクションのサブパーティションを指定するには
  • partitions-auto タイプまたは subpartitions-auto タイプのいずれか (両方は使用できません) を指定して parallel-load を指定します。

    各テーブルまたはビューまたはコレクションのパーティション (セグメント) またはサブパーティションは、自己スレッドに自動割り当てされます。

    エンドポイントによっては、並列ロードには、テーブルまたはビューですでに定義されている場合のみ、パーティションあるいはサブパーティションが含まれます。MongoDB および Amazon DocumentDB ソースエンドポイントの場合、 はオプションの追加のパラメータに基づいてパーティション (またはセグメント) AWS DMS を自動的に計算できます。例えば、number-of-partitionscollection-count-from-metadatamax-records-skip-per-pagebatch-size などです。

選択したテーブルまたはビューのパーティション、サブパーティション、またはその両方を指定するには
  1. partitions-list タイプで parallel-load を指定します。

  2. (オプション) パーティション名の配列を partitions の値として指定したパーティションが含まれます。

    指定されたパーティションがそれぞれ独自のスレッドに割り当てられます。

    重要

    Oracle エンドポイントの場合、並列ロード用にパーティションとサブパーティションを選択するときに、パーティションとサブパーティションが重複しないようにします。重複するパーティションとサブパーティションを使用してデータを並列ロードすると、エントリが複製されるか、プライマリ キーの重複違反により失敗します。

  3. (オプション)、Oracle エンドポイントのみ、サブパーティションを subpartitions の値として指定したサブパーティション名の配列を指定してインクルードします。

    指定されたサブパーティションがそれぞれ独自のスレッドに割り当てられます。

    注記

    並列ロードには、テーブルまたはビューですでに定義されている場合に、パーティションあるいはサブパーティションが含まれます。

テーブルセグメントまたはビューセグメントを列値の範囲として指定することができます。その場合、次の列の特性について注意してください。

  • インデックス化された列を指定するとパフォーマンスが大幅に向上します。

  • 最大 10 個の列を指定できます。

  • 列を使用して、DOUBLE、FLOAT、BLOB、CLOB、NCLOB の各 AWS DMS データ型でセグメント境界を定義することはできません。

  • Null 値のレコードはレプリケートされません。

テーブルセグメントまたはビューセグメント、コレクションセグメントを列値の範囲として指定するには
  1. ranges タイプで parallel-load を指定します。

  2. columns の値として列名の配列を指定して、テーブルまたはビューのセグメント間の境界を定義します。テーブルまたはビューのセグメント間で境界を定義するすべての列でこれを行います。

    列の順序は重要です。次に説明するように、各境界を定義するうえで最初の列がもっとも重要であり最後の列は最も重要度が低くなります。

  3. boundaries の値として境界配列を指定して、すべてのテーブルまたはビューのセグメントでデータ範囲を定義します。境界配列は列値の配列の配列です。これを行うには、次のステップを実行します。

    1. 列と値の配列の各要素を各列に対応する値として指定します。列と値の配列は、定義する各テーブルまたはビューのセグメントの上限の境界を表します。columns 配列の列で指定したものと同じ順序で各列を指定します。

      DATE 列の値を、ソースでサポートされる形式で入力します。

    2. 各列値配列を、テーブルまたはビューの下部からセグメントまでの next-to-top各セグメントの上限として順番に指定します。指定した上限の上にテーブルの行が存在する場合、これらの行はテーブルまたはビューの一番上のセグメントを形成します。そのため、範囲ベースのセグメントの数は、境界配列のセグメント境界の数より 1 つ多くなることがあります。このような範囲ベースのセグメントはそれぞれ個別のスレッドに割り当てられます。

      データテーブル内のすべての列のデータ範囲を定義しない場合でも、null 以外のすべてのテーブルまたはビューのデータがレプリケートされます。

    例えば、次のように COL1、COL2、 COL 3 に 3 つの列・値の配列を定義したとします。

    COL1 COL2 COL3
    10 30 105
    20 20 120
    100 12 99

    3 つのセグメントの境界を定義したことで、合計で 4 つのセグメントができることがあります。

    各セグメントでレプリケートする行の範囲を識別するため、レプリケーションインスタンスは 4 つのセグメントごとにこれらの 3 つの列で検索を適用します。検索は次のようになります。

    セグメント 1

    以下の条件が true であるすべての行をレプリケートします。最初の 2 列の値が、対応する セグメント 1 の上限値以下です。また、3 番目の列の値は、セグメント 1 の上限値より小さくなります。

    セグメント 2

    以下の条件が true であるすべての行(セグメント 1 行を除く)をレプリケートします。最初の 2 列の値が、対応する セグメント 2 の上限値以下です。また、3 番目の列の値は、セグメント 2 の上限値より小さくなります。

    セグメント 3

    以下の条件が true であるすべての行(セグメント 2 行を除く)をレプリケートします。最初の 2 列の値が、対応する セグメント 3 の上限値以下です。また、3 番目の列の値は、セグメント 3 の上限値より小さくなります。

    セグメント 4

    残りのすべての行 (セグメント 1、2、3 の行を除く) をレプリケートします。

    この場合、レプリケーションインスタンスが次のように WHERE 句を作成して各セグメントをロードします。

    セグメント 1

    ((COL1 < 10) OR ((COL1 = 10) AND (COL2 < 30)) OR ((COL1 = 10) AND (COL2 = 30) AND (COL3 < 105)))

    セグメント 2

    NOT ((COL1 < 10) OR ((COL1 = 10) AND (COL2 < 30)) OR ((COL1 = 10) AND (COL2 = 30) AND (COL3 < 105))) AND ((COL1 < 20) OR ((COL1 = 20) AND (COL2 < 20)) OR ((COL1 = 20) AND (COL2 = 20) AND (COL3 < 120)))

    セグメント 3

    NOT ((COL1 < 20) OR ((COL1 = 20) AND (COL2 < 20)) OR ((COL1 = 20) AND (COL2 = 20) AND (COL3 < 120))) AND ((COL1 < 100) OR ((COL1 = 100) AND (COL2 < 12)) OR ((COL1 = 100) AND (COL2 = 12) AND (COL3 < 99)))

    セグメント 4

    NOT ((COL1 < 100) OR ((COL1 = 100) AND (COL2 < 12)) OR ((COL1 = 100) AND (COL2 = 12) AND (COL3 < 99)))

選択したテーブルまたはビューの LOB 設定を指定

1 つ以上の table-settings オブジェクトで lob-settings オプションを使用してタイプ table-settings のテーブルマッピングルールを作成すると、1 つ以上のテーブルに LOB 設定のタスクを設定できます。

選択したテーブルへの LOB 設定の指定は、次のソースエンドポイントでサポートされています。

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • IBM Db2 (以下で説明するように、mode および bulk-max-size 設定に応じます)

  • SAP Adaptive Server Enterprise (ASE) (以下で説明するように、mode および bulk-max-size 設定に応じます)

選択したテーブルまたはビューへの LOB 設定の指定は、次のターゲットエンドポイントでサポートされています。

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • SAP ASE (以下で説明するように、mode および bulk-max-size 設定に応じます)

注記

LOB データタイプはプライマリキーが含まれるテーブルおよびビューのみで使用できます。

選択したテーブルまたはビューの LOB 設定を使用するには、lob-settings オプションを指定して table-settings タイプのテーブルマッピングルールを作成します。これにより、object-locator オプションで識別されたテーブルまたはビューの LOB 処理が指定されます。table-settings ルール内で、以下のパラメータを使用して lob-settings オブジェクトを指定できます。

  • mode - 選択したテーブルまたはビューの LOB 移行処理のメカニズムを次のように指定します:

    • limited - デフォルトの制限付き LOB モードは最速で効率的なモードです。すべての LOB が小さいか、またはターゲットのエンドポイントで未制限の LOB サイズがサポートされていない場合のみ、このモードを使用します。また、limited を使用する場合、すべての LOB は bulk-max-size で設定したサイズ内にする必要があります。

      完全ロードタスクにおけるこのモードでは、レプリケーションインスタンスはすべての LOB を他の列のデータ型と一緒にメインテーブルストレージまたはメインビューストレージの一部としてインラインで移行します。ただし、bulk-max-size 値より大きい LOB はすべて、インスタンスによって指定のサイズに切り捨てられます。変更データキャプチャ (CDC) のロードの場合、インスタンスはすべての LOB をソーステーブルの参照を使用して移行します。これは標準の完全 LOB モードと同様です (以下を参照)。

      注記

      全ロードタスクに対してのみビューを移行できます。

    • unlimited - 完全 LOB モードの移行メカニズムは、次のように bulk-max-size に設定した値によって異なります:

      • [Standard full LOB mode](標準の完全 LOB モード) - bulk-max-size をゼロに設定すると、レプリケーション インスタンスは標準の完全 LOB モードを使用してすべての LOB を移行します。このモードでは、サイズにかかわらずすべての LOB を移行でソーステーブルまたはソースビューを参照する必要があります。このアプローチでは通常、制限付き LOB モードよりもはるかに低速で移行されます。すべてまたはほとんどの LOB が大きい (1 GB 以上) の場合にのみ、このモードを使用します。

      • [Combination full LOB mode](組み合わせ完全 LOB モード) - bulk-max-size をゼロ以外の値に設定すると、この完全 LOB モードは制限付き LOB モードと標準完全 LOB モードを組み合わせて使用します。これは完全ロードタスク向けであり、LOB サイズが bulk-max-size 値以内の場合、インスタンスは制限付き LOB モードのようにインラインで LOB を移行します。LOB のサイズがこの値より大きい場合は、インスタンスは標準の完全 LOB モードのようにソーステーブルまたはソースビューの参照を使用して LOB を移行します。変更データキャプチャ (CDC) のロードの場合、インスタンスはすべての LOB をソーステーブルの参照を使用して移行します。これは標準の完全 LOB モードと同様です (以下を参照)。これは、LOB に関係なく行われます。

        注記

        全ロードタスクに対してのみビューを移行できます。

        このモードにより、移行速度はより高速な制限付き LOB モードと低速な標準の完全 LOB モードの中間になります。このモードは、小さい LOB と大きい LOB が混在しており、ほとんどの LOB が小さい場合にのみ使用します。

        この組み合わせ完全 LOB モードは、つぎのエンドポイントのみで使用できます。

        • IBM Db2 (ソースとして)

        • SAP ASE (ソースあるいはターゲットとして)

      unlimited モードに指定するメカニズムに関わらず、インスタンスはすべての LOB を完全に移行し、切り捨ては行われません。

    • none - レプリケーション インスタンスはタスク LOB 設定を使用して、選択されたテーブルまたはビューの LOB を移行します。このオプションを使用すると、選択されたテーブルまたはビューで LOB 設定を使用した場合と使用しない場合の移行結果を比較できます。

    指定したテーブルまたはビューにレプリケーションに含まれる LOB があるときには、limited LOB モードを使用する場合のみ BatchApplyEnabled タスクを true に設定できます。

    場合によっては、BatchApplyEnabledtrue に、また、BatchApplyPreserveTransactionfalse に設定できます。このようなケースでは、テーブルまたはビューに LOB があり、ソースおよびターゲットのエンドポイントが Oracle である場合に、インスタンスは BatchApplyPreserveTransactiontrue に設定します。

  • bulk-max-size - 前の項目で説明した mode に応じて、この値を 0 または 0 以外の値 (KB) に設定します。limited モードでは、このパラメータにゼロ以外の値を設定する必要があります。

    インスタンスは LOB をバイナリ形式に変換します。したがって、レプリケートする必要がある最大の LOB を指定するには、サイズを 3 倍します。たとえば、最大の LOB が 2 MB の場合、bulk-max-size を 6000 (6 MB) に設定します。

テーブル設定の例

テーブル設定を使用する説明の例を次に示します。

例 パーティションでセグメント化されたテーブルのロード

次の例では、すべてのパーティションに基づいて並列でロードすることで、ソース内の SALES テーブルを効率的にロードします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "partitions-auto" } } ] }
例 サブパーティションでセグメント化されたテーブルのロード

次の例では、すべてのサブパーティションに基づいて並列でロードすることで、Oracle ソース内の SALES テーブルを効率的にロードします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "subpartitions-auto" } } ] }
例 パーティションのリストでセグメント化されたテーブルのロード

次の例では、特定のパーティションのリストに基づいて並列でロードすることで、ソース内の SALES テーブルをロードします。ここで、指定されたパーティションは ABCDEFGH などアルファベットの一部で始まる値に命名されます。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "partitions-list", "partitions": [ "ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWXYZ" ] } } ] }
例 選択されたパーティションおよびサブパーティションのリストでセグメント化された Oracle テーブルのロード

次の例では、選択されたパーティションおよびサブパーティションのリストを使用して並列でロードすることで、Oracle ソースの SALES テーブルをロードします。ここで、指定されたパーティションは ABCDEFGH などアルファベットの一部で始まる値に命名されます。指定されたサブパーティションは、数字で始まる値を取って命名されます。たとえば、0123456789 などです。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "partitions-list", "partitions": [ "ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWXYZ" ], "subpartitions": [ "01234", "56789" ] } } ] }
例 列の値の範囲でセグメント化されたテーブルのロード

次の例では、SALES_NO および REGION 列の値の範囲で指定されたセグメントを使用して並列でロードすることで、ソース内の SALES テーブルをロードします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "ranges", "columns": [ "SALES_NO", "REGION" ], "boundaries": [ [ "1000", "NORTH" ], [ "3000", "WEST" ] ] } } ] }

ここで、2 つの列は、SALES_NO および REGION という名前でセグメント範囲に指定されます。2 つの境界は 2 セットの列の値 (["1000","NORTH"] および ["3000","WEST"]) で指定されます。

したがって、これら 2 つの境界によって、並列でロードされる次の 3 つのテーブルセグメントが識別されます。

セグメント 1

SALES_NO が 1000 以下であり REGION が "NORTH" 未満である行。つまり、EAST リージョンで販売数が最大 1000 まで。

セグメント 2

セグメント 1 以外で SALES_NO が 3000 以下であり REGION が "WEST" 未満である行。つまり、NORTH および SOUTH リージョンで販売数が 1,000 を超え 3,000 まで。

セグメント 3

セグメント 1 および セグメント 2 以外の残りすべての行。つまり、「WEST」リージョンで販売数が 3000 超。

例 1 つは範囲でセグメント化され、もう 1 つはパーティションでセグメント化された 2 つのテーブルのロード

次の例では、SALES テーブルを識別したセグメント境界で並列にロードします。また、前の例と同様に、ORDERS テーブルをすべてのパーティションで並列にロードします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "ranges", "columns": [ "SALES_NO", "REGION" ], "boundaries": [ [ "1000", "NORTH" ], [ "3000", "WEST" ] ] } }, { "rule-type": "table-settings", "rule-id": "3", "rule-name": "3", "object-locator": { "schema-name": "HR", "table-name": "ORDERS" }, "parallel-load": { "type": "partitions-auto" } } ] }
例 制限付き LOB モードを使用した LOB を含むテーブルのロード

次の例では、ソース内の LOB を含む ITEMS テーブルを、切り捨てられない最大サイズが 100 MB の制限付き LOB モード(デフォルト)を使用してロードします。このサイズよりも大きい LOB はすべて 100 MB に切り捨てられます。すべての LOB は、他のすべての列のデータ型と一緒にインラインでロードされます。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "bulk-max-size": "100000" } } ] }
例 標準の完全 LOB モードを使用したテーブルのロード

次の例では、標準の完全 LOB モードを使用して、すべての LOB を切り捨てずに、ソースの ITEMS テーブルをロードします。サイズを問わずすべての LOB は、ソーステーブルの各 LOB ごとに参照を使用して、他のデータ型とは別にロードされます。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "mode": "unlimited", "bulk-max-size": "0" } } ] }
例 組み合わせ完全 LOB モードを使用した LOB を含むテーブルのロード

次の例では、組み合わせ完全 LOB モードを使用して、すべての LOB を切り捨てずに、ソースの ITEMS テーブルをロードします。サイズが 100 MB 以内のすべての LOB は他のデータ型とともにインラインでロードされます。制限付き LOB モードと同様です。サイズが 100 MB を超えるすべての LOB は、他のデータ型とは別にロードされます。この個別のロードでは、標準の完全 LOB モードのように、ソーステーブルのそのような各 LOB のルックアップが使用されます。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "mode": "unlimited", "bulk-max-size": "100000" } } ] }
例 タスク LOB 設定を使用した LOB を含むテーブルのロード

次の例では、タスク LOB 設定を使用して、すべての LOB を含め、ソースの ITEMS テーブルをロードします。100 MB の bulk-max-size 設定は無視され、limited または unlimited モードにクイックリセットするためにのみ残されます。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "mode": "none", "bulk-max-size": "100000" } } ] }