View a markdown version of this page

DMS 架构转换中的元数据模型 - Amazon Database Migration Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

DMS 架构转换中的元数据模型

当您使用 DMS 架构转换时,该服务将您的数据库架构表示为分层树。此树称为元数据树,它适用于源架构和目标架构。树中的每个元素,包括根元素(“服务器”),都是一个元数据模型。

元数据树包含两种元素:

  • 对象-表示实际的数据库对象,例如表、函数、视图、序列和索引。您可以使用DescribeMetadataModel请求检索对象的 SQL 定义。

  • 类别-虚拟分组容器,例如 “架构”、“表”、“函数” 和 “索引”。类别在树中组织对象以供导航,但本身没有 SQL 定义。

只有在您请求数据时,元数据树才会加载数据。这种方法称为按需加载(也称为延迟加载),这意味着 DMS 架构转换仅在需要时从数据库中检索数据。您可以使用导入操作来加载元数据,方法是刷新特定的元数据模型,也可以一次性导入整个子树。诸如评估和转换之类的操作也会自动加载元数据树。

元数据模型的工作原理

DMS 架构转换中的元数据模型遵循操作生命周期。修改元数据树的操作(例如导入和转换)是异步的。您启动对这些操作的请求,它将在后台运行。调用相应的描述 API 来检查请求状态。读取树的操作(例如描述子项或定义)是同步的。

注意

在 DMS 架构转换中,“操作” 和 “请求” 这两个术语可以互换使用。

典型的工作流程包括以下步骤:

  1. 导入-将源数据库或目标数据库中的元数据加载到元数据树中。您可以加载初始元数据模型,也可以从数据库中重装现有模型。有关更多信息,请参阅 在树上导航。有关 API 参考信息,请参阅StartMetadataModelImport

  2. 评估-分析选定的源元数据模型,以确定转换的复杂性和潜在问题。有关更多信息,请参阅 使用 DMS 架构转换创建数据库迁移评测报告

  3. 转换-将选定的源元数据模型转换为与目标兼容的格式。转换后的定义作为目标元数据树的一部分存储。有关更多信息,请参阅 在 DMS 架构转换中转换数据库架构:分步指南

  4. 导出-保存元数据定义。您可以将源元数据和目标元数据作为 SQL 脚本导出到您的 Amazon S3 存储桶。对于非虚拟目标,也可以将转换后的对象直接应用于目标数据库。有关虚拟目标的更多信息,请参阅虚拟数据提供程序。有关应用已转换对象的更多信息,请参见应用转换后的代码

评估或转换源元数据模型后,您可以生成评估报告来查看结果。有关更多信息,请参阅 使用 DMS 架构转换创建数据库迁移评测报告

对于支持的迁移对,您还可以使用从 SQL 定义创建自定义语句元数据模型StartMetadataModelCreation。有关更多信息,请参阅 创建报表模型

浏览元数据模型树

您可以使用以下 API 请求浏览元数据树:

  • DescribeMetadataModelChildren— 返回给定元数据模型的子模型。每个子项都包含选择规则(用于识别特定元数据模型的筛选器),您可以将其传递给下一个调用以进行更深入的研究。

  • DescribeMetadataModel— 返回特定元数据模型的名称、类型和 SQL 定义。

这两个请求都需要Origin参数(SOURCETARGET),并使用选择规则来标识元数据模型。源树和目标树的导航模式相同。有关选择规则格式的更多信息,请参阅DMS 架构转换中的选择规则

选择您的首选界面以查看导航说明。

Amazon Management Console

打开架构转换项目后,您可以浏览源元数据树和目标元数据树。有关打开项目的更多信息,请参阅在 DMS 架构转换中转换数据库架构:分步指南

控制台显示两个树面板:左边是源树,右边是目标树。每个面板都包含一个显示数据库引擎的标题、一个操作菜单和元数据树本身。

“操作” 菜单视上下文而定。并非每个元数据模型都有所有可用的操作。源树和目标树有不同的操作列表。

要查看元数据模型的 SQL 定义和属性,请在树中选择它。中央面板显示包含定义的 “源 SQL” 和 “目标 SQL” 选项卡,以及带有元数据属性的属性选项卡。根据元数据模型类型,可能会出现其他选项卡,例如,表和视图的列或例程的参数。

要展开元数据模型的子项,请选择其旁边的展开图标(黑色三角形)。选择展开图标或元数据模型名称以自动加载其子项。

当您选择已转换的源元数据模型时,将在目标树面板中自动选择相应的目标元数据模型。

浏览元数据树

以下演练展示了如何浏览元数据树和查看元数据模型定义。

  1. 在树面板中,选择服务器旁边的展开图标以显示顶级类别,例如数据库架构,具体取决于数据库引擎。

  2. 继续展开类别以导航到要浏览的元数据模型。例如,依次展开 “数据库”、“特定数据库”、“架构”、“架构名称”、“”、“视图” 或 “过程” 等类别。有些数据库引擎没有数据库级别,在这种情况下,可以直接扩展架构

  3. 选择一个元数据模型,在中心面板中查看其 SQL 定义。源 SQL 选项卡显示源定义,目标 SQL 选项卡显示转换后的定义(如果元数据模型已转换)。

Amazon CLI
浏览元数据树

要浏览元数据树,请遵循重复模式:在某个级别导入元数据,然后描述该级别的子级。重复此过程以更深入地钻入树。

首先使用标识顶级元数据模型的选择规则调用 start-metadata-model-im port。在中包括server-name和顶层category-nameDatabases或者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标志并在选择规则includerule-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。当您想要在不从源开始的情况下浏览所有已转换的对象时,这很有用。

创建报表元数据模型

注意

语句创建目前仅支持以下方向:从 SQL Server 到 Aurora PostgreSQL,或者从 SQL Server 到 Amazon RDS for PostgreSQL

您可以使用根据 SQL 定义创建语句元数据模型StartMetadataModelCreation。当您想要转换源数据库中不作为对象存在的 SQL 语句时,这很有用,例如应用程序查询或临时 SQL 代码。

Amazon Management Console

Amazon 管理控制台中无法创建报表元数据模型。改用 Amazon CLI 或 S Amazon DK。

Amazon CLI

要创建语句元数据模型,请使用开始元数据模型创建。选择规则必须指定源数据库中存在的架构。创建的元数据模型显示在该架构中的Statements类别下。

aws dms start-metadata-model-creation \ --migration-project-identifier "my-migration-project" \ --metadata-model-name "GetAllEmployees" \ --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1", "rule-name":"1","object-locator":{"server-name":"my-server", "database-name":"my_database","schema-name":"dbo"}, "rule-action":"explicit"}]}' \ --properties '{"StatementProperties":{"Definition":"SELECT * FROM dbo.Employees;"}}'

创建完成后,你可以在树中的Statements类别下找到元数据模型并对其进行描述:

{ "MetadataModelName": "GetAllEmployees", "MetadataModelType": "statement", "Definition": "SELECT * FROM dbo.Employees;" }

创建后,您可以对语句元数据模型运行任何支持的操作,例如评估、转换或导出。