

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

# 設定 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 會一次遷移一個，分段遷移。完整 LOB 模式非常慢。
  + **有限 LOB 模式** – 在有限 LOB 模式中，您可以設定 DMS 接受的 LOB 大小上限。這可讓 DMS 預先配置記憶體，並大量載入 LOB 資料。超過 LOB 大小上限的 LOB 會遭到截斷，並且會向日誌檔案發出警告。在有限 LOB 模式中，您可以獲得遠超於完整 LOB 模式的效能。我們建議您盡可能使用 limited LOB mode (有限 LOB 模式)。此參數的最大值為 102400 KB (100 MB)。
**注意**  
[LOB 大小上限 (K)] 選項大於 63KB 時，將影響設定在有限 LOB 模式下執行的完全載入效能。在完全載入期間，DMS 會將 [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 大小，您必須將 `ValidationPartialLobSize` 設定為與 `LobMaxSize` (K) 相同的值。
  + **內嵌 LOB 模式** – 在內嵌 LOB 模式中，您可以設定 DMS 內嵌傳輸的 LOB 大小上限。小於指定大小的 LOB 會以內嵌方式傳輸。大於指定大小的 LOB 會使用完整 LOB 模式複寫。如果大部分 LOB 都很小，您可以選取此選項來複寫小型和大型 LOB。對於不支援完整 LOB 模式的端點 (例如 S3 和 Redshift)，DMS 不支援內嵌 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 模式時， 會以片段的形式 AWS DMS 擷取 LOBs。**LOB chunk size (K) (LOB 區塊大小 (K))** 選項會決定每一段的大小。設定此選項時，請特別注意您網路組態所允許的封包大小上限。若 LOB 區塊大小超過您所能允許的封包大小上限，您便可能會看到中斷連線錯誤。`LobChunkSize` 的建議值為 64 KB。`LobChunkSize` 的值增加超過 64 KB 可能會導致任務失敗。
+ 當任務設定為以內嵌 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;
```