View a markdown version of this page

DMS 結構描述轉換中的選取規則 - AWS 資料庫遷移服務

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

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 物件。陣列中的每個項目都是一個規則,每個規則都必須包含下列所有欄位。

參數 Value 說明
rule-type selection 識別規則類型的值。對於所有選擇規則,將此設定為 selection。必要參數。
rule-id 數值 (整數) 值。 規則的唯一數字識別符。必要參數。
rule-name 英數值。 識別規則的唯一名稱。必要參數。
rule-action explicitincludeexclude 決定物件定位器如何解譯的值。請參閱 規則動作。必要參數。
object-locator 包含引擎特定定位器金鑰的 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-namedatabase-nameschema-name物件層級金鑰 (例如 table-name)。這些引擎在伺服器和結構描述之間具有額外的database-name層級。

  • 所有其他引擎 (Oracle、適用於 z/OS 的 IBM Db2,以及所有目標引擎:PostgreSQL、Aurora PostgreSQL、MySQL、Aurora MySQL 和 IBM Db2 LUW) — server-nameschema-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 (行為)

使用時機

"include"

選取名稱符合模式的所有物件。支援 %(任何零個或多個字元的序列) 和 _(任何單一字元) 作為萬用字元。使用 [_]來比對常值底線,並使用 [%]來比對常值百分比字元。

使用 來比對具有共用命名模式的物件群組。

"exclude"

從先前include規則已選取的集合中移除物件。沒有前述 的exclude規則include沒有效果。

使用 從更廣泛的 切出例外狀況include

"explicit"

完全選取具名物件。每個定位器值,包括 schema-namedatabase-name和任何分葉索引鍵,例如 table-namescalar-function-name,都會比對為文字字串。萬用字元,例如 %[_和 在 下]沒有特殊意義explicit

當您知道要採取行動的每個物件的確切名稱時,請使用 。

注意

有些操作只接受"explicit"規則,不支援 "include""exclude"。檢查特定操作的 AWS API 參考,以確認其支援哪些規則動作。

物件定位器參考

依資料庫的物件定位器索引鍵

下列索引標籤顯示每個支援資料庫的定位器索引鍵。

SQL Server

金錀

選取

server-name

伺服器。

database-name

伺服器上的資料庫。

schema-name

資料庫內的結構描述。

table-name

根據預設,資料表或與 搭配使用時的檢視"table-type": "view"

table-type

"table" (預設) 或 "view"

procedure-name

預存程序。

scalar-function-name

純量值函數。

table-valued-function-name

資料表值函數。

inline-function-name

內嵌函數。

aggregate-function-name

彙總函數。

synonym-name

同義詞。

sequence-name

序列。

type-name

類型。

table-type-name

資料表類型。

user-defined-type-name

使用者定義的類型。

xml-schema-collection-name

XML 結構描述集合。

category-name

物件類別。使用 以物件的整個類別為目標;請參閱 依引擎的類別名稱

Oracle

金錀

選取

server-name

伺服器。

schema-name

結構描述 (Oracle 使用者)。

table-name

根據預設,資料表或與 搭配使用時的檢視"table-type": "view"

table-type

"table" (預設) 或 "view"

procedure-name

預存程序。

function-name

一個函數。

package-name

套件。

sequence-name

序列。

synonym-name

同義詞。

type-name

使用者定義的類型。

materialized-view-name

具體化視觀表。

category-name

物件類別。使用 以物件的整個類別為目標;請參閱 依引擎的類別名稱

SAP ASE (Sybase ASE)

金錀

選取

server-name

伺服器。

database-name

伺服器上的資料庫。

schema-name

資料庫內的結構描述。

table-name

根據預設,資料表或與 搭配使用時的檢視"table-type": "view"

table-type

"table" (預設) 或 "view"

materialized-view-name

具體化視觀表。

procedure-name

預存程序。

scalar-function-name

純量值函數。

table-valued-function-name

資料表值函數。

user-defined-type-name

使用者定義的類型。

default-name

使用者定義的預設值。Describe* 只能透過 連線。

category-name

物件類別。使用 以物件的整個類別為目標;請參閱 依引擎的類別名稱

PostgreSQL

金錀

選取

server-name

伺服器。

schema-name

結構描述。

table-name

資料表或檢視;使用 table-type來區分。

function-name

一個函數。

procedure-name

預存程序。

sequence-name

序列。

materialized-view-name

具體化視觀表。

type-name

使用者定義的類型。

domain-name

網域。

category-name

物件類別。使用 以物件的整個類別為目標;請參閱 依引擎的類別名稱

MySQL

金錀

選取

server-name

伺服器。

schema-name

結構描述。

table-name

資料表或檢視;使用 table-type來區分。

procedure-name

預存程序。

function-name

一個函數。

event-name

事件。

category-name

物件類別。使用 以物件的整個類別為目標;請參閱 依引擎的類別名稱

IBM Db2 for z/OS

金錀

選取

server-name

伺服器。

schema-name

結構描述。

table-name

資料表、檢視或全域暫時資料表;使用 table-type 來區分。

table-type

"table" (預設) 或 "view"

procedure-name

預存程序或外部程序。

function-name

函數 (內嵌、純量、來源、資料表或外部函數)。

sequence-name

序列。

alias-name

別名。無 PostgreSQL 目標模型;StartMetadataModelExportAsScript搭配 使用Origin: SOURCE

mqtable-name

具體化查詢表 (MQT)。無 PostgreSQL 目標模型。

type-name

使用者定義的類型 (目的地類型或結構化類型)。無 PostgreSQL 目標模型。

category-name

物件類別。使用 以物件的整個類別為目標;請參閱 依引擎的類別名稱

IBM Db2 LUW

金錀

選取

server-name

伺服器。

schema-name

結構描述。

table-name

資料表或檢視;使用 table-type來區分。

procedure-name

預存程序。

function-name

函數 (純量、來源或資料表函數)。

sequence-name

序列。

module-name

模組。

category-name

物件類別。使用 以物件的整個類別為目標;請參閱 依引擎的類別名稱

依引擎的類別名稱

選取規則中的category-name值以整個物件類別為目標,而非個別物件。類別名稱為引擎特定且區分大小寫。操作是否接受category-name取決於操作 — 檢查您正在使用之操作的 AWS API 參考。以下索引標籤涵蓋來源和目標引擎。

重要

將類別名稱從一個引擎傳送至為不同引擎設定的專案,會傳回錯誤。

SQL Server

下列類別名稱適用於 Microsoft SQL Server 來源。

category-name

其分組的內容

Tables

基礎資料表。

Views

檢視。

Procedures

儲存程序.

SQL scalar functions

純量 T-SQL 函數。

SQL table-valued functions

多陳述式資料表值函數。

SQL inline functions

內嵌資料表值函數。

Aggregate functions

使用者定義的彙總函數。

Synonyms

T-SQL 同義詞。

Sequences

序列物件。

Types

XML 結構描述集合和資料欄類型。

Table types

資料表類型的參數宣告。

User-Defined Types

別名和 CLR 使用者定義的類型。

XML Schema Collections

XML 結構描述集合。

Oracle

下列類別名稱適用於 Oracle 來源。

category-name

其分組的內容

Tables

資料表。

External Tables

外部資料表。

Views

檢視。

Packages

PL/SQL 套件規格和內文。

Procedures

儲存程序.

Functions

所有使用者函數,包括純量和管道。

User Defined Types

物件類型。

Collection Types

VARRAY 和巢狀資料表類型。

Sequences

序列。

Materialized Views

具體化視觀表。

Materialized View Logs

具體化檢視變更日誌。

Synonyms

公有和私有同義詞。

Clusters

索引和雜湊叢集。

Database Links

資料庫連結。

SAP ASE (Sybase ASE)

下列類別名稱適用於 SAP ASE (Sybase ASE) 來源。

category-name

其分組的內容

Tables

基礎資料表。

Views

檢視。

Procedures

儲存程序.

Scalar Functions

純量 T-SQL 函數。

Table Valued Functions

資料表值函數。

Materialized Views

具體化視觀表。

User Defined Types

別名使用者定義的類型。

Defaults

繫結預設物件。僅限描述;無法獨立轉換。

PostgreSQL

下列類別名稱適用於 PostgreSQL 和 Aurora PostgreSQL 目標。

category-name

其分組的內容

Tables

基礎資料表。

Views

檢視。

Functions

函數。

Procedures

儲存程序.

Sequences

序列。

Materialized Views

具體化視觀表。

Types

使用者定義的類型。

Domains

網域。

MySQL

下列類別名稱適用於 MySQL 和 Aurora MySQL 目標。

category-name

其分組的內容

Tables

基礎資料表。

Views

檢視。

Functions

函數。

Procedures

儲存程序.

Events

事件。

IBM Db2 for z/OS

下列類別名稱適用於 z/OS 來源的 IBM Db2。

category-name

Locator 金鑰

其分組的內容

Tables

table-name + "table-type": "table"

基礎資料表。

Global Temporary Tables

table-name + "table-type": "table"

全域暫存資料表。無 PostgreSQL 目標模型。

Materialized Query Tables

mqtable-name

具體化查詢表 MQTs)。無 PostgreSQL 目標模型。

Views

table-name + "table-type": "view"

檢視。

Aliases

alias-name

別名。無 PostgreSQL 目標模型。

Procedures

procedure-name

儲存程序.

Functions

function-name

所有函數子類型:純量、資料表、內嵌、來源。

Sequences

sequence-name

序列。

User Defined Types

type-name

不同的類型和結構化類型。無 PostgreSQL 目標模型。

External Routines

function-name / procedure-name

外部函數和外部程序。

IBM Db2 LUW

下列類別名稱適用於 IBM Db2 LUW 目標。

category-name

其分組的內容

Tables

基礎資料表。

Views

檢視。

Functions

函數 (純量、來源、資料表)。

Procedures

儲存程序.

Sequences

序列。

Modules

模組。

選擇規則範例

下列範例示範如何撰寫常見遷移案例的選擇規則。每個範例都會使用您要傳遞給 DMS 結構描述轉換 API 操作的--selection-rules參數值,例如 StartMetadataModelConversionStartMetadataModelAssessment

從 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-namedatabase-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" } } ] }