将 SQL Server 数据库迁移到 Babelfish for Aurora PostgreSQL - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将 SQL Server 数据库迁移到 Babelfish for Aurora PostgreSQL

可以使用 Babelfish for Aurora PostgreSQL 将 SQL Server 数据库迁移到 Amazon Aurora PostgreSQL 数据库集群。在迁移之前,请查看 将 Babelfish 与单个数据库或多个数据库结合使用

迁移过程概述

以下摘要列出了成功迁移 SQL Server 应用程序和使之与 Babelfish 配合使用所需的步骤:有关可用于导出和导入流程的工具的信息以及更多详细信息,请参阅用于从 SQL Server 迁移到 Babelfish 的导入/导出工具

  1. 在开启 Babelfish 的情况下创建新的 Aurora PostgreSQL 数据库集群。要了解如何操作,请参阅 创建 Babelfish for Aurora PostgreSQL 数据库集群

    要导入从 SQL Server 数据库导出的各种 SQL 构件,请使用 SQL Server 工具(例如 sqlcmd)连接到 Babelfish 集群。有关更多信息,请参阅使用 SQL Server 客户端连接到数据库集群

  2. 在要迁移的 SQL Server 数据库上,导出数据定义语言 (DDL)。DDL 是一种 SQL 代码,用于描述包含用户数据(如表、索引和视图)和用户编写的数据库代码(例如存储过程、用户定义的函数和触发器)的数据库对象。

    有关更多信息,请参阅使用 SQL Server Management Studio (SSMS) 迁移到 Babelfish

  3. 运行评估工具来评估可能需要进行的任何更改的范围,以便 Babelfish 能够有效地支持在 SQL Server 上运行的应用程序。有关更多信息,请参阅评估和处理 SQL Server 和 Babelfish 之间的差异

  4. 要加载数据,我们建议根据您的迁移要求使用 Amazon DMS,同时将 Babelfish 或 Aurora PostgreSQL 用作目标端点。确保使用建议的 Babelfish 数据类型修改列。为此,请参阅使用 Babelfish 作为 Amazon DMS 的目标的先决条件

  5. 在新的 Babelfish 数据库集群上,在指定的 T-SQL 数据库中运行 DDL,以仅创建具有主键约束条件的模式、用户定义的数据类型和表。

  6. 使用 Amazon DMS 将数据从 SQL Server 迁移到 Babelfish 表。要使用 SQL Server 变更数据捕获或 SQL 复制进行持续复制,请使用 Aurora PostgreSQL 而不是 Babelfish 作为端点。为此,请参阅使用适用于 Aurora PostgreSQL 的 Babelfish 作为 Amazon Database Migration Service 的目标

  7. 数据加载完成后,在 Babelfish 集群上创建支持应用程序的所有剩余 T-SQL 对象。

  8. 重新配置客户端应用程序以连接到 Babelfish 端点而不是 SQL Server 数据库。有关更多信息,请参阅连接到 Babelfish 数据库集群

  9. 根据需要修改应用程序并重新测试。有关更多信息,请参阅适用于 Aurora PostgreSQL 的 Babelfish 与 SQL Server 之间的区别

您仍然需要评估客户端 SQL 查询。从 SQL Server 实例生成的架构仅转换服务器端 SQL 代码。我们建议您采取以下步骤:

  • 通过将 SQL Server Profiler 与 TSQL_Replay 预定义模板结合使用来捕获客户端查询。此模板捕获 T-SQL 语句信息,然后可以重播这些信息以进行迭代优化和测试。您可以从 SQL Server Management Studio 的 Tools(工具)菜单中启动此 Profiler。选择 SQL Server Profiler 以打开此 Profiler 并选择 TSQL_Replay 模板。

    要用于 Babelfish 迁移,请开始跟踪,然后使用功能测试运行应用程序。此 Profiler 捕获 T-SQL 语句。当您完成测试时,停止跟踪。使用客户端查询将结果保存到 XML 文件中 [File(文件)> Save as(另存为)> Trace XML File for Replay(跟踪 XML 文件以便重播)]。

    有关更多信息,请参阅 Microsoft 文档中的 SQL Server Profiler。有关 TSQL_Replay 模板的更多信息,请参阅 SQL Server Profiler 模板

  • 对于具有复杂客户端 SQL 查询的应用程序,我们建议您使用 Babelfish Compass 分析这些查询以了解 Babelfish 兼容性。如果分析表明客户端 SQL 语句包含不受支持的 SQL 功能,请查看客户端应用程序中的 SQL 方面,并根据需要进行修改。

  • 您也可以将 SQL 查询捕获为扩展事件(.xel 格式)。为此,请使用 SSMS XEvent Profiler。生成 .xel 文件后,将 SQL 语句提取到 .xml 文件中,然后 Compass 可以对其进行处理。有关更多信息,请参阅 Microsoft 文档中的 使用 SSMS XEvent Profler

当您对迁移的应用程序所需的所有测试、分析以及任何修改感到满意时,您可以开始将 Babelfish 数据库用于生产环境中。为此,请停止原始数据库,并重新导向实时客户端应用程序以使用 Babelfish TDS 端口。

评估和处理 SQL Server 和 Babelfish 之间的差异

为了获得最佳结果,我们建议您在将 SQL Server 数据库应用程序实际迁移到 Babelfish 之前,先评估生成的 DDL/DML 和客户端查询代码。根据 Babelfish 的版本和应用程序实现的 SQL Server 的特定功能,您可能需要重构应用程序或使用替代方案来获得 Babelfish 中尚未完全支持的功能。

  • 要评估 SQL Server 应用程序代码,请在生成的 DDL 上使用 Babelfish Compass 来确定 Babelfish 支持多少个 T-SQL 代码。确定在 Babelfish 上运行之前可能需要修改的 T-SQL 代码。有关此工具的更多信息,请参阅 GitHub 上的 Babelfish Compass 工具

    注意

    Babelfish Compass 是一种开源工具。请通过 GitHub 而不是 Amazon Support 报告 Babelfish Compass 的任何问题。

您可以在 SQL Server Management Studio(SSMS)中使用 Generate Script Wizard(生成脚本向导)来生成由 Babelfish Compass 或 Amazon Schema Conversion Tool CLI 评估的 SQL 文件。我们建议采取以下步骤来简化评估。

  1. Choose Objects(选择对象)页面上,选择 Script entire database and all database objects(为整个数据库和所有数据库对象编写脚本)。

    使用 SSMS 生成脚本向导选择对象。
  2. 对于 Set Scripting Options(设置脚本选项),选择 Save as script file(另存为脚本文件)作为 Single script file(单个脚本文件)。

    使用 SSMS 生成脚本向导设置脚本选项。
  3. 选择 Advanced(高级)可更改原定设置脚本选项,以识别在进行全面评估时通常设置为 false 的功能:

    • 脚本将跟踪更改为 True

    • 脚本将全文索引设置为 True

    • 脚本将触发器设置为 True

    • 脚本将登录设置为 True

    • 脚本将拥有者设置为 True

    • 脚本将对象级权限设置为 True

    • 脚本将排序规则设置为 True

    使用 SSMS 生成脚本向导设置高级脚本选项。
  4. 执行向导中的剩余步骤来生成文件。

用于从 SQL Server 迁移到 Babelfish 的导入/导出工具

我们建议使用 Amazon DMS 作为从 SQL Server 迁移到 Babelfish 的主要工具。但是,Babelfish 支持其他几种使用 SQL Server 工具迁移数据的方式,其中包括以下各项。

  • 适用于所有版本的 Babelfish 的 SQL Server Integration Services(SSIS)。有关更多信息,请参阅使用 SSIS 和 Babelfish 从 SQL Server 迁移到 Aurora PostgreSQL

  • 使用适用于 Babelfish 版本 2.1.0 及更高版本的 SSMS 导入/导出向导。此工具可通过 SSMS 获得,但也可作为独立工具使用。有关更多信息,请参阅 Microsoft 文档中的欢迎使用 SQL Server 导入和导出向导

  • Microsoft 批量数据复制程序(bcp)实用程序可让您以您指定的格式将数据从 Microsoft SQL Server 实例复制到数据文件中。有关更多信息,请参阅 Microsoft 文档中的 bcp 实用程序。Babelfish 现在支持使用 BCP 客户端进行数据迁移,而 bcp 实用程序现在支持 -E 标志(用于身份列)和 -b 标志(用于批量插入)。不支持某些 bcp 选项,包括 -C-T-G-K-R-V-h

使用 SQL Server Management Studio (SSMS) 迁移到 Babelfish

我们建议为每种特定的对象类型生成单独的文件。您可以先使用 SSMS 中的 Generate Scripts(生成脚本)向导来处理每组 DDL 语句,然后将对象按组进行修改,以修复评估期间发现的任何问题。

执行这些步骤,使用 Amazon DMS 或其他数据迁移方法迁移数据。请先运行这些创建脚本类型,以便更好、更快地在 Aurora PostgreSQL 中的 Babelfish 表上加载数据。

  1. 运行 CREATE SCHEMA 语句。

  2. 运行 CREATE TYPE 语句以创建用户定义的数据类型。

  3. 使用主键或唯一约束运行基本 CREATE TABLE 语句。

使用建议的导入/导出工具执行数据加载。运行以下步骤的修改后脚本以添加剩余的数据库对象。您需要创建表语句来运行这些脚本,以获取约束、触发器和索引。脚本生成后,删除创建表语句。

  1. 针对检查约束、外键约束、原定设置约束运行 ALTER TABLE 语句。

  2. 运行 CREATE TRIGGER 语句。

  3. 运行 CREATE INDEX 语句。

  4. 运行 CREATE VIEW 语句。

  5. 运行 CREATE STORED PROCEDURE 语句。

为每种对象类型生成脚本

使用以下步骤通过 SSMS 中的生成脚本向导来创建基本的创建表语句。按照同样的步骤为不同的对象类型生成脚本。

  1. 连接到您的现有 SQL Server 实例。

  2. 打开数据库名称的上下文(右键单击)菜单。

  3. 选择 Tasks(任务),然后选择 Generate Scripts...(生成脚本...)。

  4. Choose Objects(选择对象)窗格中,选择 Select specific database objects(选择特定数据库对象)。选择 Tables(表),然后选择所有表。选择下一步以继续。

    使用 SSMS Generate Scripts(生成脚本)向导选择对象和表。
  5. Set Scripting Options(设置脚本选项)页面上,选择 Advanced(高级)以打开 Options(选项)设置。要生成基本的创建表语句,请更改以下原定设置值:

    • 脚本将原定设置设为 False。

    • 脚本将扩展属性设置为 False。Babelfish 不支持扩展属性。

    • 脚本将检查约束设置为 False。脚本将外键设置为 False。

    使用 SSMS 生成脚本向导设置高级选项。
  6. 选择确定

  7. Set Scripting Options(设置脚本选项)页上,选择 Save as script file(另存为脚本文件),然后选择 Single script file(单个脚本文件)选项。输入 File name(文件名)。

    使用 SSMS 生成脚本向导设置脚本的原定设置值。
  8. 选择 Next(下一步)以查看 Summary wizard(摘要向导)页。

  9. 选择 Next(下一步)以启动脚本生成。

    您可以继续在向导中为其它对象类型生成脚本。不是在保存文件后选择 Finish(完成),而是选择 Previous(上一步)按钮三次以返回 Choose Objects(选择对象)页。然后重复向导中的步骤,为其它对象类型生成脚本。