要浏览元数据树,请遵循重复模式:在某个级别导入元数据,然后描述该级别的子级。重复此过程以更深入地钻入树。
首先使用标识顶级元数据模型的选择规则调用 start-metadata-model-im port。在中包括server-name和顶层category-name(Databases或者Schemas,视数据库引擎而定)object-locator。有关选择规则结构的更多信息,请参阅DMS 架构转换中的选择规则。
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"}]}'
导入请求是异步的。浏览之前,使用 d escribe-metadata-model-im ports 来检查状态。使用带有返回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
导入完成后,调用 desc ribe-metadata-model-children 来检索该级别的子级:
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 定义,请使用 desc ribe-metadata-model。传递从先前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 将源选择规则直接转换为对应的目标规则,而无需先调用源:describe-metadata-model
aws dms get-target-selection-rules \
--migration-project-identifier "my-migration-project" \
--selection-rules 'source-selection-rules'
直接在目标树中导航
您也可以使用与源树相同的方式浏览目标树--origin TARGET。当您想要在不从源开始的情况下浏览所有已转换的对象时,这很有用。