

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

# DMS 結構描述轉換中的中繼資料模型
<a name="sc-metadata-model"></a>

當您使用 DMS 結構描述轉換時，服務會將資料庫結構描述表示為階層樹狀結構。此樹狀目錄稱為*中繼資料樹狀*目錄，同時適用於來源和目標結構描述。樹狀目錄中的每個元素，包括根元素 (「伺服器」)，都是中繼資料模型。

中繼資料樹狀目錄包含兩種元素：
+ **物件** — 代表實際的資料庫物件，例如資料表、函數、檢視、序列和索引。您可以使用 [DescribeMetadataModel](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeMetadataModel.html) 請求擷取物件的 SQL 定義。
+ **類別** — 虛擬分組容器，例如 "Schemas"、"Tables"、"Functions" 和 "Indexes"。類別會組織樹狀目錄中的物件以進行導覽，但本身沒有 SQL 定義。

中繼資料樹狀目錄只會在您請求資料時載入資料。這種方法稱為隨需載入 （也稱為延遲載入），這表示 DMS 結構描述轉換只會視需要從您的資料庫擷取資料。您可以使用匯入操作載入中繼資料，方法是重新整理特定中繼資料模型或一次匯入整個子樹狀目錄。評估和轉換等操作也會自動載入中繼資料樹狀目錄。

## 中繼資料模型的運作方式
<a name="sc-metadata-model-how-it-works"></a>

DMS 結構描述轉換中的中繼資料模型遵循操作生命週期。修改中繼資料樹狀目錄 （例如匯入和轉換） 的操作是非同步的。您可以啟動這些操作的請求，並在背景執行。呼叫對應的描述 API 來檢查請求狀態。讀取樹 （例如描述子項或定義） 的操作是同步的。

**注意**  
在 DMS 結構描述轉換中，會互換使用術語*操作*和*請求*。

典型工作流程包含下列步驟：

1. **匯入** — 將中繼資料從來源或目標資料庫載入中繼資料樹狀目錄。您可以載入初始中繼資料模型，或從資料庫重新載入現有模型。如需詳細資訊，請參閱[導覽樹狀目錄](#sc-metadata-model-navigating)。如需 API 參考，請參閱 [StartMetadataModelImport](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartMetadataModelImport.html)。

1. **評估** — 分析選取的來源中繼資料模型，以識別轉換複雜性和潛在問題。如需詳細資訊，請參閱[使用 DMS 結構描述轉換建立資料庫遷移評估報告](assessment-reports.md)。

1. **轉換** — 將選取的來源中繼資料模型轉換為目標相容的格式。轉換的定義會儲存為目標中繼資料樹狀結構的一部分。如需詳細資訊，請參閱[在 DMS 結構描述轉換中轉換資料庫結構描述：step-by-step指南](schema-conversion-convert.md)。

1. **匯出** — 儲存中繼資料定義。您可以將來源和目標中繼資料匯出為 Amazon S3 儲存貯體的 SQL 指令碼。對於非虛擬目標，您也可以將轉換後的物件直接套用至目標資料庫。如需虛擬目標的詳細資訊，請參閱 [虛擬資料提供者](virtual-data-provider.md)。如需套用轉換物件的詳細資訊，請參閱 [套用轉換後的程式碼](schema-conversion-save-apply.md#schema-conversion-apply)。

評估或轉換來源中繼資料模型之後，您可以產生評估報告來檢閱結果。如需詳細資訊，請參閱[使用 DMS 結構描述轉換建立資料庫遷移評估報告](assessment-reports.md)。

對於支援的遷移對，您也可以使用 [StartMetadataModelCreation](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartMetadataModelCreation.html) 從 SQL 定義建立自訂陳述式中繼資料模型。如需詳細資訊，請參閱[建立陳述式模型](#sc-metadata-model-creation)。

## 導覽中繼資料模型樹狀目錄
<a name="sc-metadata-model-navigating"></a>

您可以使用下列 API 請求來導覽中繼資料樹狀目錄：
+ [DescribeMetadataModelChildren](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeMetadataModelChildren.html) — 傳回指定中繼資料模型的子系。每個子項都包含選取規則 （用於識別特定中繼資料模型的篩選條件），您可以傳遞給下一個呼叫以深入探索。
+ [DescribeMetadataModel](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeMetadataModel.html) — 傳回特定中繼資料模型的名稱、類型和 SQL 定義。

這兩個請求都需要 `Origin` 參數 (`SOURCE` 或 `TARGET`)，並使用選取規則來識別中繼資料模型。來源和目標樹狀目錄的導覽模式都相同。如需選取規則格式的詳細資訊，請參閱 [DMS 結構描述轉換中的選取規則](sc-selection-rules.md)。

選擇您偏好的界面以檢視導覽指示。

------
#### [ AWS Management Console ]

開啟結構描述轉換專案之後，您可以瀏覽來源和目標中繼資料樹狀目錄。如需開啟專案的詳細資訊，請參閱 [在 DMS 結構描述轉換中轉換資料庫結構描述：step-by-step指南](schema-conversion-convert.md)。

主控台會顯示兩個樹面板：左側的來源樹和右側的目標樹。每個面板都包含顯示資料庫引擎、動作功能表和中繼資料樹狀目錄本身的標頭。

動作功能表取決於內容。並非每個中繼資料模型都有所有可用的動作。來源和目標樹有不同的動作清單。

若要檢視中繼資料模型的 SQL 定義和屬性，請在樹狀目錄中選擇它。中央面板會顯示具有 定義的來源 SQL 和目標 SQL 索引標籤，以及具有中繼資料屬性的屬性索引標籤。根據中繼資料模型類型，可能會顯示其他索引標籤，例如資料表和檢視的資料欄，或常式的參數。

若要展開中繼資料模型的子系，請選擇其旁邊的展開圖示 （黑色三角形）。選擇展開圖示或中繼資料模型名稱，以自動載入其子系。

當您選擇已轉換的來源中繼資料模型時，會在目標樹面板中自動選取對應的目標中繼資料模型。

下列逐步解說說明如何瀏覽中繼資料樹狀目錄並檢視中繼資料模型定義。

1. 在樹狀結構面板中，選擇伺服器旁的展開圖示，以顯示最上層類別，例如**資料庫**或**結構描述**，視資料庫引擎而定。

1. 繼續擴展類別以導覽至您要探索的中繼資料模型。例如，展開**資料庫**，接著展開特定資料庫，接著展開**結構描述**，接著展開結構描述名稱，接著展開**資料表**、**檢視****或程序**等類別。有些資料庫引擎沒有**資料庫**層級 - 在這種情況下，請直接展開**結構描述**。

1. 選擇中繼資料模型，以在中央面板中檢視其 SQL 定義。如果中繼資料模型已轉換，**來源 SQL** 索引標籤會顯示來源定義，而**目標 SQL** 索引標籤會顯示轉換後的定義。

------
#### [ AWS CLI ]

若要瀏覽中繼資料樹狀目錄，請遵循重複模式：在層級匯入中繼資料，然後描述該層級的子項。重複此程序以深入了解樹狀結構。

首先，使用可識別最上層中繼資料模型的選擇規則呼叫 [start-metadata-model-import](https://docs.aws.amazon.com/cli/latest/reference/dms/start-metadata-model-import.html)。在 中包含 `server-name`和最上層 `category-name`( `Databases`或 `Schemas`，取決於資料庫引擎）`object-locator`。如需選取規則結構的詳細資訊，請參閱 [DMS 結構描述轉換中的選取規則](sc-selection-rules.md)。

```
aws dms start-metadata-model-import \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --refresh \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{"server-name":"{{my-server}}","category-name":"{{top-level-category}}"},"rule-action":"explicit"}]}'
```

匯入請求是非同步的。使用 [describe-metadata-model-imports](https://docs.aws.amazon.com/cli/latest/reference/dms/describe-metadata-model-imports.html) 在瀏覽之前檢查狀態。使用 傳回`RequestIdentifier`值的`request-id`篩選條件`start-metadata-model-import`來尋找特定匯入：

```
aws dms describe-metadata-model-imports \
    --migration-project-identifier "{{my-migration-project}}" \
    --filters Name=request-id,Values={{request-identifier}}
```

匯入完成後，請呼叫 [describe-metadata-model-children](https://docs.aws.amazon.com/cli/latest/reference/dms/describe-metadata-model-children.html) 來擷取該層級的子系：

```
aws dms describe-metadata-model-children \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{"server-name":"{{my-server}}"},
      "rule-action":"explicit"}]}'
```

回應中的每個子項都包含一個`SelectionRules`欄位。將這些選取規則傳遞至下一個匯入，並描述呼叫以深入探索：

```
{
    "MetadataModelChildren": [
        {
            "MetadataModelName": "Schemas",
            "SelectionRules": "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"server-name\":\"src-database-server\",\"category-name\":\"Schemas\"},\"rule-action\":\"explicit\"}]}"
        }
    ]
}
```

若要深入探索下一個層級，請使用先前`describe-metadata-model-children`呼叫傳回的選擇規則在該層級匯入，然後描述其子系：

```
aws dms start-metadata-model-import \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --refresh \
    --selection-rules '{{selection-rules-from-previous-response}}'
```

在描述子項之前，請先使用 檢查其狀態，以確保匯入已完成`describe-metadata-model-imports`。然後呼叫 `describe-metadata-model-children`：

```
aws dms describe-metadata-model-children \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{{selection-rules-from-previous-response}}'
```

回應會傳回該層級的子項，每個子項都有自己的選取規則。將這些選取規則傳遞至下一個匯入，並描述呼叫以繼續深入探索樹狀結構。

```
{
    "MetadataModelChildren": [
        {
            "MetadataModelName": "{{child-name}}",
            "SelectionRules": "{{selection-rules-JSON-string}}"
        }
    ]
}
```

**相較於完整匯入，使用 --refresh**

使用 從資料庫`--refresh`重新載入特定中繼資料模型。這也會載入其直接子系的名稱。您可以使用 列出這些子系`describe-metadata-model-children`，但若要進一步描述或瀏覽，您必須在子系層級執行另一個匯入。

若要載入整個子樹狀結構 （例如結構描述、資料庫或資料表或程序等特定類別中的所有物件），請省略 `--refresh` 旗標，並在選取規則`include`中`rule-action`變更為 ：

```
aws dms start-metadata-model-import \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{{{...}}},
      "rule-action":"include"}]}'
```

對於大型結構描述，載入完整的子樹狀目錄可能需要幾分鐘或數小時的時間，並對資料庫進行載入。針對互動式探勘，請視需要使用 `--refresh`並鑽研特定分支。

若要擷取中繼資料模型的 SQL 定義，請使用 [describe-metadata-model](https://docs.aws.amazon.com/cli/latest/reference/dms/describe-metadata-model.html)。傳遞從上一個`describe-metadata-model-children`回應識別特定中繼資料模型的選擇規則：

```
aws dms describe-metadata-model \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{{selection-rules-for-target-object}}'
```

回應包含中繼資料模型名稱、類型和 SQL 定義：

```
{
    "MetadataModelName": "employees",
    "MetadataModelType": "table",
    "Definition": "CREATE TABLE hr.employees(\n    id integer NOT NULL,\n    name varchar(100),\n    department_id integer\n);"
}
```

**注意**  
某些中繼資料模型可能不會填入 `Definition` 欄位，例如結構描述和類別。

轉換來源中繼資料模型之後，目標樹狀目錄中會提供轉換後的定義。有三種方法可以擷取它們。

**從來源回應使用目標選取規則**

當您在轉換後描述來源中繼資料模型時，回應會包含具有目標選取規則`TargetMetadataModels`的欄位：

```
{
    "MetadataModelName": "employees",
    "MetadataModelType": "table",
    "TargetMetadataModels": [
        {
            "MetadataModelName": "employees",
            "SelectionRules": "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"server-name\":\"tgt-database-server\",\"schema-name\":\"hr\",\"table-name\":\"employees\",\"table-type\":\"table\"},\"rule-action\":\"explicit\"}]}"
        }
    ],
    "Definition": "CREATE TABLE hr.employees(\n    id integer NOT NULL,\n    name varchar(100),\n    department_id integer\n);"
}
```

`describe-metadata-model` 使用 將選取規則從 傳遞`TargetMetadataModels`至 `--origin TARGET`：

```
aws dms describe-metadata-model \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin TARGET \
    --selection-rules '{{selection-rules-from-TargetMetadataModels}}'
```

回應在目標引擎語法中包含轉換後的 SQL 定義：

```
{
    "MetadataModelName": "employees",
    "MetadataModelType": "table",
    "Definition": "CREATE TABLE hr.employees (\nid INT NOT NULL,\nname VARCHAR(100) DEFAULT NULL,\ndepartment_id INT DEFAULT NULL,\nPRIMARY KEY (id)\n);"
}
```

**使用 get-target-selection-rules**

您可以使用 [get-target-selection-rules](https://docs.aws.amazon.com/cli/latest/reference/dms/get-target-selection-rules.html) 直接將來源選取規則轉換為其目標對等項，而無需先`describe-metadata-model`呼叫來源：

```
aws dms get-target-selection-rules \
    --migration-project-identifier "{{my-migration-project}}" \
    --selection-rules '{{source-selection-rules}}'
```

**直接導覽目標樹狀目錄**

您也可以使用 ，以與來源樹相同的方式瀏覽目標樹狀目錄`--origin TARGET`。當您想要探索所有轉換的物件而不從來源開始時，這會很有用。

------

## 建立陳述式中繼資料模型
<a name="sc-metadata-model-creation"></a>

**注意**  
陳述式建立目前僅支援下列指示：從 SQL Server 到 Aurora PostgreSQL，或從 SQL Server 到 Amazon RDS for PostgreSQL。

您可以使用 [StartMetadataModelCreation](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartMetadataModelCreation.html) 從 SQL 定義建立陳述式中繼資料模型。當您想要轉換不存在為來源資料庫中物件的 SQL 陳述式時，此功能非常有用，例如應用程式查詢或臨機操作 SQL 程式碼。

------
#### [ AWS Management Console ]

建立陳述式中繼資料模型不適用於 AWS 管理主控台。請改用 AWS CLI 或 AWS 開發套件。

------
#### [ AWS CLI ]

若要建立陳述式中繼資料模型，請使用 [start-metadata-model-creation](https://docs.aws.amazon.com/cli/latest/reference/dms/start-metadata-model-creation.html)。選擇規則必須指定存在於來源資料庫中的結構描述。建立的中繼資料模型會顯示在該結構描述內的 `Statements`類別下。

```
aws dms start-metadata-model-creation \
    --migration-project-identifier "{{my-migration-project}}" \
    --metadata-model-name "{{GetAllEmployees}}" \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{"server-name":"{{my-server}}",
      "database-name":"{{my_database}}","schema-name":"{{dbo}}"},
      "rule-action":"explicit"}]}' \
    --properties '{"StatementProperties":{"Definition":"SELECT * FROM dbo.Employees;"}}'
```

建立之後，您可以在 `Statements`類別下的樹狀目錄中找到中繼資料模型，並加以描述：

```
{
    "MetadataModelName": "GetAllEmployees",
    "MetadataModelType": "statement",
    "Definition": "SELECT * FROM dbo.Employees;"
}
```

建立之後，您可以在陳述式中繼資料模型上執行任何支援的操作，例如評估、轉換或匯出。

------