View a markdown version of this page

DMS 架构转换中的选择规则 - AWS Database Migration Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

DMS 架构转换中的选择规则

DMS 架构转换将数据库架构从一个引擎转换为另一个引擎。您可以使用选择规则来控制 DMS Schema Conversion 在评估、转换和导出等操作期间对哪些数据库对象执行操作。选择规则是您通过SelectionRules参数(或在 AWS CLI --selection-rules 中)传递的 JSON 对象。如果没有选择规则,操作就没有什么可执行的。使用规则,您可以将操作范围限定为单个对象、整个架构、整个数据库(对于 Microsoft SQL Server 和 SAP ASE(Sybase ASE)源代码)或一组与模式匹配的对象。

注意

当您使用 AWS 管理控制台时,DMS 架构转换会根据您在迁移项目 UI 中的选择自动构建选择规则。使用 DMS 架构转换 API 或 AWS CLI 时,您只需直接编写选择规则即可。

在迁移项目的源端和目标端使用相同的规则形状。对象定位器中的server-name字段指定规则是针对源数据提供器还是目标数据提供器。单个迁移项目通常使用两种规则:用于评估和转换的源规则;SQL 导出的目标规则。

选择规则格式

选择规则文档是具有单个rules数组的 JSON 对象。数组中的每个条目都是一条规则,并且每个规则都必须包含以下所有字段。

参数 说明
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 功能,适用于任何字符串参数。

  • Inline:--selection-rules '{"rules":[...]}'(使用单引号以避免转义 JSON 双引号)

  • 相对路径:--selection-rules file://example-rules.json

  • 绝对路径:--selection-rules file:///tmp/example-rules.json

里面的所有字段值都object-locator必须是非空字符串。空字符串(例如"schema-name": "")被拒绝并显示错误。

注意

database-name密钥仅对微软 SQL Server 和 SAP ASE(Sybase ASE)源有效。为任何其他源引擎发送database-name定位器都会被拒绝,因为密钥不受支持。

写入规则

对象定位器层次结构

通过引擎特定密钥的层次结构object-locator识别一个或多个数据库对象。每个密钥都会缩小范围;省略较低级别的密钥以扩大范围。层次结构取决于源引擎:

  • 微软 SQL Server 和 SAP ASE(Sybase ASE)server-name database-name schema-name 对象级密钥(例如)。table-name这些引擎在服务器和架构之间有一个额外的database-name级别。

  • 所有其他引擎(甲骨文、适用于 IBM 的 Db2 以及所有目标引擎:PostgreSQL z/OS、Aurora PostgreSQL、MySQL、Aurora MySQL 和 IBM Db2 LUW)— 对象级密钥。server-name schema-name 这些引擎没有database-name级别;架构是正下方的顶部容器server-name

以下示例选择了一个特定的微软 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 架构转换如何解释对象定位器内的值。通配符只能与includeexclude一起使用。

行为

何时使用

"include"

选择名称与模式匹配的所有对象。支持%(任何由零个或多个字符组成的序列)和_(任何单个字符)作为通配符。[_]用于匹配字面下划线和[%]匹配字面百分比字符。

用于将一组具有共享命名模式的对象进行匹配。

"exclude"

从已按上述include规则选择的集合中移除对象。没有前缀的exclude规则include无效。

用于从更广泛的角度include区分例外情况。

"explicit"

精确选择命名的对象。每个定位器值(包括schema-namedatabase-name、)和任何叶键(例如table-namescalar-function-name)都作为文字字符串进行匹配。通配符%,例如、_[、和,在下]explicit没有特殊含义。

当您知道要操作的每个对象的确切名称时使用。

注意

有些操作只接受"explicit"规则,不支持"include""exclude"。查看 AWS API 参考以了解具体操作,以确认其支持哪些规则操作。

对象定位器参考

按数据库排列的对象定位器密钥

以下选项卡显示了每个受支持数据库的定位器密钥。

SQL Server

Key

选择

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

Key

选择

server-name

服务器。

schema-name

架构(甲骨文用户)。

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)

Key

选择

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

Key

选择

server-name

服务器。

schema-name

架构。

table-name

表或视图;table-type用于区分。

function-name

函数

procedure-name

存储过程。

sequence-name

一个序列。

materialized-view-name

实体化视图。

type-name

用户定义的类型。

domain-name

一个域名。

category-name

一个对象类。用于定位整个类别的对象;请参阅按引擎划分的类别名称

MySQL

Key

选择

server-name

服务器。

schema-name

架构。

table-name

表或视图;table-type用于区分。

procedure-name

存储过程。

function-name

函数

event-name

事件。

category-name

一个对象类。用于定位整个类别的对象;请参阅按引擎划分的类别名称

IBM Db2 for z/OS

Key

选择

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

Key

选择

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

以下类别名称适用于微软 SQL Server 源代码。

category-name

它分组了什么

Tables

基础表。

Views

观点。

Procedures

存储过程。

SQL scalar functions

标量 T-SQL 函数。

SQL table-valued functions

Multi-statement 表值函数。

SQL inline functions

内联表值函数。

Aggregate functions

User-defined 聚合函数。

Synonyms

T-SQL 同义词。

Sequences

序列对象。

Types

XML 架构集合和列类型。

Table types

Table-typed 参数声明。

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

Materialized-view 更改日志。

Synonyms

公共和私有同义词。

Clusters

索引和哈希集群。

Database Links

数据库链接。

SAP ASE (Sybase ASE)

以下类别名称适用于 SAP ASE (Sybase ASE) 源。

category-name

它分组了什么

Tables

基础表。

Views

观点。

Procedures

存储过程。

Scalar Functions

标量 T-SQL 函数。

Table Valued Functions

Table-valued 函数。

Materialized Views

物化视图。

User Defined Types

别名用户定义的类型。

Defaults

绑定的默认对象。 Describe-only; 无法独立转换。

PostgreSQL

以下类别名称适用于 PostgreSQL 和 Aurora PostgreSQL 目标。

category-name

它分组了什么

Tables

基础表。

Views

观点。

Functions

函数。

Procedures

存储过程。

Sequences

序列。

Materialized Views

物化视图。

Types

User-defined 类型。

Domains

域名。

MySQL

以下类别名称适用于 MySQL 和 Aurora MySQL 目标。

category-name

它分组了什么

Tables

基础表。

Views

观点。

Functions

函数。

Procedures

存储过程。

Events

活动。

IBM Db2 for z/OS

以下类别名称适用于 z/OS 源代码的 IBM Db2。

category-name

定位器密钥

它分组了什么

Tables

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

基础表。

Global Temporary Tables

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

全局临时表。没有 PostgreSQL 目标模型。

Materialized Query Tables

mqtable-name

物化查询表 (MQT)。没有 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

从微软 SQL Server 源中选择一个特定的表进行转换。微软 SQL Server 还需要database-nameschema-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" } } ] }

Oracle 视图使用table-name和进行寻址"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 源。IBM Db2 可供 z/OS 使用procedure-name,直接从server-nameschema-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-nameSAP ASE (Sybase ASE) 要求database-name介于server-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" } } ] }