

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

# AWS DMS タスクでのソースデータベースの LOB サポートの設定
<a name="CHAP_Tasks.LOBSupport"></a>

ラージバイナリオブジェクト (LOB) をシステム間で移行することは難しい場合があります。 AWS DMS には、LOB の列のチューニングに役立つ多くのオプションが用意されています。LOBs と見なされるデータ型とタイミングを確認するには AWS DMS、 AWS DMS ドキュメントを参照してください。

データベース間でデータを移行するとき、特に異機種間で移行するときは、LOB の保存方法の見直しが必要になる場合があります。その場合、LOB データを移行する必要はありません。

LOB を含める場合は、他の LOB 設定を決定できます。
+ LOB モードにより、LOB の処理方法が決定されます。
  + **フル LOB モード** – フル LOB モードでは、サイズに関係なく、すべての LOBs をソースからターゲット AWS DMS に移行します。この設定 AWS DMS では、 には想定される LOBs の最大サイズに関する情報はありません。したがって、LOB は一度に 1 つずつ移行されます。Full LOB mode は非常に低速になることがあります。
  + **[Limited LOB mode]** (制限付き LOB モード) - 制限付き LOB モードでは、DMS の最大許容 LOB サイズを設定します。このオプションでは、DMS によってメモリが事前に割り当てられ、LOB データを一括でロードできるようになります。最大許容 LOB サイズを超える LOB は切り捨てられ、警告がログファイルに発行されます。制限付き LOB モードでは、完全 LOB モードよりも大幅にパフォーマンスが向上します。可能な限り Limited LOB mode を使用することをお勧めします。このパラメータの最大値は 102,400 KB (100 MB) です。
**注記**  
[Max LOB size (K) ](最大 LOB サイズ(K)) オプションを 63 KB より大きい値で使用すると、制限付き LOB モードで実行されるように設定された全ロードのパフォーマンスが低下します。全ロード中、DMS は [Max LOB size (k)](最大 LOB サイズ (k)) 値にコミットレートを掛けてメモリを割り当てて、この積に LOB 列数を乗算します。DMS がそのメモリを事前に割り当てられない場合、フルロードタスクのパフォーマンスに悪影響を及ぼす SWAP メモリを消費します。制限付き LOB モードの使用時にパフォーマンスの問題が発生した場合は、許容可能なパフォーマンスレベルに達するまでコミットレートを下げることを検討してください。CDC モード中、DMS は LOB 列の数に制限付き LOB タスク設定で指定された最大 LOB サイズパラメータを乗算し、次にレコードサイズを乗算してメモリを割り当てます。DMS CDC プロセスは、DMS タスクごとにシングルスレッドです。詳細については、[「処理調整設定を変更](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.html)する」を参照してください。  
LOB サイズの制限を検証するには、`LobMaxSize` (K) を `ValidationPartialLobSize` と同じ値に設定する必要があります。
  + **[Inline LOB mode]**(インライン LOB モード) — インライン LOB モードでは、DMS がインラインで転送する最大 LOB サイズを設定します。指定されたサイズより小さい LOB はインラインで転送されます。指定されたサイズよりも大きい LOB は、フル LOB モードを使用してレプリケーションされます。このオプションを選択すると、ほとんどの LOB が小さい場合に、小さい LOB と大規模な LOB 両方のレプリケーションができます。DMS は S3 や Redshift のようなフル LOB モードをサポートしないエンドポイントでは、インライン LOB モードをサポートしていません。
**注記**  
Oracle では、LOB は可能な限り VARCHAR データ型として扱われます。このアプローチは、 AWS DMS がデータベースからそれらを一括で取得することを意味します。これは、他の方法よりも大幅に高速です。Oracle での VARCHAR の最大サイズは 32 K です。そのため、Oracle がソースデータベースである場合は、最大許容 LOB サイズを 32 K 未満に設定するのが最適です。
+ 制限付き LOB モードで実行されるようにタスクを設定している場合、[**Max LOB size (K) (最大 LOB サイズ (K))**] オプションによって AWS DMS の最大許容 LOB サイズが決まります。この値よりも大きい LOB はこの値まで切り捨てられます。
+ タスクがフル LOB モードを使用するように設定されている場合、 は LOBsして AWS DMS 取得します。[**LOB chunk size (K) (LOB チャンクサイズ (K))**] オプションにより、各ピースのサイズが決定されます。このオプションを設定するときは、ネットワーク設定の最大許容パケットサイズに特に注意してください。LOB チャンクサイズが最大許容パケットサイズを超えた場合は、切断エラーが表示されることがあります。`LobChunkSize` の推奨値は 64 キロバイトです。`LobChunkSize` の値を 64 キロバイト以上に設定すると、タスクが失敗する可能性があります。
+ インライン LOB モードで実行するようにタスクを設定している場合、`InlineLobMaxSize` 設定により、どの LOB DMS がインラインで転送されるかが決まります。
**注記**  
プライマリキーは、変更データキャプチャ (CDC) オペレーション中に LOB 列を含むテーブルに必須です。DMS はこのキーを使用してソーステーブルの LOB 値を検索します。この要件は CDC タスクにのみ適用されます。フルロードタスクは、LOB 列全体をソースからターゲットに直接制限なしで読み取りおよびコピーできます。

タスク設定でこれらのオプションを指定する方法の詳細については、「[ターゲットメタデータのタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md)」をご参照ください。

## ソーステーブルの最大 LOB 列長をチェックする SQL コマンド
<a name="CHAP_Tasks.Creating.SQLCommandsLOB"></a>

次の SQL コマンドを使用して最大 LOB 列長を確認し、それに応じて DMS の制限付き LOB 設定を設定して、移行中のデータ切り捨てを回避します。

**Oracle**  

```
SELECT dbms_lob.getlength(<COL_NAME>) as LOB_LENGTH
FROM <TABLE_NAME>
ORDER BY dbms_lob.getlength(<COL_NAME>) DESC
FETCH FIRST 10 ROWS ONLY;

Select ((max(length(<COL_NAME>)))/(1024)) from <TABLE_NAME>
```

**SQL Server**  

```
Select top 10 datalength(<COL_NAME>) as fieldsize from <TABLE_NAME> order by datalength(<COL_NAME>) desc;
```

**MySQL**  

```
Select (max(length(<COL_NAME>))/(1024)) as "Size in KB" from <TABLE_NAME>;
```

**[PostgreSQL]**  

```
Select max((octet_length(<COL_NAME>))/(1024.0)) as "Size in KB" from <TABLE_NAME>;
```

**Db2 LUW**  

```
-- Method 1: Using SYSCAT.COLUMNS (converting to KB)

SELECT TABSCHEMA, TABNAME, COLNAME, LENGTH/1024 as LENGTH_KB, TYPENAME FROM SYSCAT.COLUMNS WHERE TYPENAME IN ('BLOB', 'CLOB', 'DBCLOB') ORDER BY LENGTH DESC;

-- Method 2: For specific table with KB conversion

  SELECT COLNAME, LENGTH/1024 as LENGTH_KB, TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA = 'YOUR_SCHEMA'AND TABNAME = 'YOUR_TABLE'AND TYPENAME IN ('BLOB', 'CLOB', 'DBCLOB'); 
  
-- Method 3: Using SYSIBM.SYSCOLUMNS

SELECT TBCREATOR, TBNAME, NAME, LENGTH/1024 as LENGTH_KB, COLTYPE FROM SYSIBM.SYSCOLUMNS WHERE COLTYPE IN ('BLOB', 'CLOB', 'DBCLOB') ORDER BY LENGTH DESC;

SYBASE :

SELECT c.name as column_name, t.name as data_type, (c.length)/1024 as length_KB FROM syscolumns c JOIN systypes t ON c.usertype = t.usertype WHERE object_name(c.id) = 'YOUR_TABLE_NAME'AND t.name IN ('text', 'image', 'unitext') ORDER BY c.length DESC;
```