本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 对象。数组中的每个条目都是一条规则,并且每个规则都必须包含以下所有字段。
以下最小示例以源服务器上的一个架构为目标。
{ "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 架构转换如何解释对象定位器内的值。通配符只能与include和exclude一起使用。
值 |
行为 |
何时使用 |
|---|---|---|
|
选择名称与模式匹配的所有对象。支持 |
用于将一组具有共享命名模式的对象进行匹配。 |
|
从已按上述 |
用于从更广泛的角度 |
|
精确选择命名的对象。每个定位器值(包括 |
当您知道要操作的每个对象的确切名称时使用。 |
注意
有些操作只接受"explicit"规则,不支持"include"或"exclude"。查看 AWS API 参考以了解具体操作,以确认其支持哪些规则操作。
对象定位器参考
按数据库排列的对象定位器密钥
以下选项卡显示了每个受支持数据库的定位器密钥。
按引擎划分的类别名称
选择规则中的category-name值以整个对象类为目标,而不是单个对象。类别名称是特定于引擎的,并且区分大小写。操作是否接受category-name取决于该操作,请查看 AWS API 参考以了解您正在使用的操作。以下选项卡涵盖源引擎和目标引擎。
重要
将类别名称从一个引擎发送到为其他引擎配置的项目会返回错误。
选择规则示例
以下示例说明如何为常见迁移场景编写选择规则。每个示例都使用您将传递给 DMS 架构转换 API 操作的--selection-rules参数值,例如StartMetadataModelConversion或StartMetadataModelAssessment。
从微软 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-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-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" } } ] }