本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DMS 結構描述轉換中的選取規則
DMS 結構描述轉換會將資料庫結構描述從一個引擎轉換為另一個引擎。您可以使用選取規則來控制 DMS 結構描述轉換在評估、轉換和匯出等操作期間對哪些資料庫物件執行動作。選擇規則是您透過 SelectionRules 參數 (或在 CLI --selection-rules中) AWS 傳遞的 JSON 物件。如果沒有選取規則,則 操作無需採取任何動作。使用規則,您可以將操作範圍限定為單一物件、整個結構描述、整個資料庫 (適用於 Microsoft SQL Server 和 SAP ASE (Sybase ASE) 來源),或符合模式的物件群組。
注意
當您使用 AWS 管理主控台時,DMS 結構描述轉換會根據您在遷移專案 UI 中的選擇自動建構選取規則。只有在使用 DMS 結構描述轉換 API 或 CLI AWS 時,才需要直接寫入選取規則。
您可以在遷移專案的來源和目標端使用相同的規則形狀。物件定位器中的 server-name 欄位指定規則是針對來源資料提供者還是目標資料提供者。單一遷移專案通常會同時使用兩種類型的規則:用於評估和轉換的來源規則;用於 SQL 匯出的目標規則。
選擇規則格式
選取規則文件是具有單一rules陣列的 JSON 物件。陣列中的每個項目都是一個規則,每個規則都必須包含下列所有欄位。
下列最低範例以來源伺服器上的一個結構描述為目標。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "schema-name": "schema_name" } } ] }
注意
使用 AWS CLI 時,您可以透過下列方式傳遞選擇規則。這是標準 AWS CLI 功能,可與任何字串參數搭配使用。
-
內嵌:
--selection-rules '{"rules":[...]}'(使用單引號以避免逸出 JSON 雙引號) -
相對路徑:
--selection-rules file://example-rules.json -
絕對路徑:
--selection-rules file:///tmp/example-rules.json
內的所有欄位值object-locator都必須是非空白字串。空白字串 (例如 "schema-name": "") 會因錯誤而遭到拒絕。
注意
database-name 金鑰僅適用於 Microsoft SQL Server 和 SAP ASE (Sybase ASE) 來源。在任何其他來源引擎的定位器database-name中傳送會被拒絕為不支援的金鑰。
撰寫規則
物件定位器階層
透過引擎特定金鑰的階層來object-locator識別一或多個資料庫物件。每個金鑰都會縮小範圍;省略低階金鑰以擴大範圍。階層取決於來源引擎:
-
Microsoft SQL Server 和 SAP ASE (Sybase ASE) —
server-name→database-name→schema-name→物件層級金鑰 (例如table-name)。這些引擎在伺服器和結構描述之間具有額外的database-name層級。 -
所有其他引擎 (Oracle、適用於 z/OS 的 IBM Db2,以及所有目標引擎:PostgreSQL、Aurora PostgreSQL、MySQL、Aurora MySQL 和 IBM Db2 LUW) —
server-name→schema-name→物件層級金鑰。這些引擎沒有database-name關卡;結構描述是直接在 下的頂端容器server-name。
下列範例會選取一個特定的 Microsoft SQL Server 資料表。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "schema_name", "table-name": "table_name" } } ] }
若要將範圍擴大到整個結構描述,請省略分葉層級索引鍵。然後,規則會套用至該結構描述中的所有可定址物件類型,包括資料表、檢視、程序、函數、序列,以及來源引擎公開的任何其他物件。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "schema_name" } } ] }
您可以使用的定位器金鑰取決於來源或目標引擎。如需每個引擎的完整金鑰參考,請參閱 依資料庫的物件定位器索引鍵。
來源規則和目標規則
沒有明確rule-type欄位會將規則標記為「來源」或「目標」。您可以完全透過 中的server-name值來控制差異object-locator:如果 server-name符合來源資料提供者,則規則會以來源中繼資料樹為目標;如果 符合目標資料提供者,則規則以目標中繼資料樹為目標。
對於 server-name,您可以使用:
-
在資料提供者中設定的伺服器名稱值。這通常是主機名稱或 IP 地址,但必須與資料提供者中存放的值完全相符,而不是解析為相同機器的不同 DNS 名稱或 IP。
-
資料提供者的資源 ID:其 ARN 的最後一個區段 (例如,如果 ARN 為
arn:aws:dms:us-east-1:111122223333:data-provider:EXAMPLEABCDEFGHIJKLMNOPQRS,則資源 ID 為EXAMPLEABCDEFGHIJKLMNOPQRS)。
規則動作
使用 rule-action 欄位指定 DMS 結構描述轉換如何解譯物件定位器內的值。您只能搭配 include和 使用萬用字元exclude。
Value |
Behavior (行為) |
使用時機 |
|---|---|---|
|
選取名稱符合模式的所有物件。支援 |
使用 來比對具有共用命名模式的物件群組。 |
|
從先前 |
使用 從更廣泛的 切出例外狀況 |
|
完全選取具名物件。每個定位器值,包括 |
當您知道要採取行動的每個物件的確切名稱時,請使用 。 |
注意
有些操作只接受"explicit"規則,不支援 "include"或 "exclude"。檢查特定操作的 AWS API 參考,以確認其支援哪些規則動作。
物件定位器參考
依資料庫的物件定位器索引鍵
下列索引標籤顯示每個支援資料庫的定位器索引鍵。
依引擎的類別名稱
選取規則中的category-name值以整個物件類別為目標,而非個別物件。類別名稱為引擎特定且區分大小寫。操作是否接受category-name取決於操作 — 檢查您正在使用之操作的 AWS API 參考。以下索引標籤涵蓋來源和目標引擎。
重要
將類別名稱從一個引擎傳送至為不同引擎設定的專案,會傳回錯誤。
選擇規則範例
下列範例示範如何撰寫常見遷移案例的選擇規則。每個範例都會使用您要傳遞給 DMS 結構描述轉換 API 操作的--selection-rules參數值,例如 StartMetadataModelConversion或 StartMetadataModelAssessment。
從 Microsoft SQL Server 來源選取一個要轉換的特定資料表。除了 之外database-name,Microsoft SQL Server 還需要 schema-name。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "schema_name", "table-name": "table_name" } } ] }
省略物件層級索引鍵,以選取 Oracle 結構描述中的所有物件。Oracle 沒有database-name關卡;結構描述是 下最上層的容器server-name。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "schema-name": "schema_name" } } ] }
使用 table-name搭配 處理 Oracle 檢視"table-type": "view"。沒有單獨的view-name金鑰。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "schema-name": "schema_name", "table-name": "view_name", "table-type": "view" } } ] }
從 IBM Db2 為 z/OS 來源選取一個特定的預存程序。z/OS 的 IBM Db2 使用 procedure-name,並直接從 移至 server-name schema-name ,沒有database-name關卡。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "schema-name": "schema_name", "procedure-name": "procedure_name" } } ] }
使用 %做為 的萬用字元,選取 SAP ASE (Sybase ASE) 結構描述中的每個程序procedure-name。SAP ASE (Sybase ASE) 需要介於 server-name和 database-name之間schema-name。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "include", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "dbo", "procedure-name": "%" } } ] }
使用 % 依字首比對多個資料表。此範例會選取名稱開頭為 的所有資料表Fact_。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "include", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "dbo", "table-name": "Fact_%" } } ] }
在 Oracle 結構描述中包含所有物件,然後排除名稱開頭為 的任何資料表TMP_。規則會rule-id依序評估;比對exclude時優先。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "include", "object-locator": { "server-name": "source_server", "schema-name": "schema_name" } }, { "rule-type": "selection", "rule-id": "2", "rule-name": "rule_name", "rule-action": "exclude", "object-locator": { "server-name": "source_server", "schema-name": "schema_name", "table-name": "TMP_%" } } ] }
在單一文件中使用多個explicit規則,依名稱選取一組特定的程序。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "dbo", "procedure-name": "PROC_A" } }, { "rule-type": "selection", "rule-id": "2", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "dbo", "procedure-name": "PROC_B" } }, { "rule-type": "selection", "rule-id": "3", "rule-name": "rule_name", "rule-action": "explicit", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "dbo", "procedure-name": "PROC_C" } } ] }
使用 include規則來比對名稱開頭為 的每個程序PROC_,然後從PROC_TEST該集合中移除的 exclude 規則。exclude 規則必須遵循 include規則;獨立 exclude 沒有作用。
{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "rule_name", "rule-action": "include", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "dbo", "procedure-name": "PROC_%" } }, { "rule-type": "selection", "rule-id": "2", "rule-name": "rule_name", "rule-action": "exclude", "object-locator": { "server-name": "source_server", "database-name": "database_name", "schema-name": "dbo", "procedure-name": "PROC_TEST" } } ] }