Babelfish 架构
当您在打开 Babelfish 的情况下创建 Aurora PostgreSQL 集群时,Aurora 会为该集群预置名为 babelfish_db
的 PostgreSQL 数据库。此数据库是所有迁移的 SQL Server 对象和结构所在的位置。
注意
在 Aurora PostgreSQL 集群中,系统会为 Babelfish 预留 babelfish_db
数据库名称。在 Babelfish 数据库集群上自行创建“babelfish_db”数据库会阻止 Aurora 成功预调配 Babelfish。
当您连接到 TDS 端口时,会话将被放置在 babelfish_db
数据库中。从 T-SQL 来看,该结构看起来类似于连接到 SQL Server 实例。您可以看到 master
、msdb
和 tempdb
数据库以及 sys.databases
目录。您可以创建其他用户数据库并使用 USE 语句在数据库之间切换。当您创建 SQL Server 用户数据库时,该数据库将被展平到 babelfish_db
PostgreSQL 数据库中。数据库保留的跨数据库语法和语义等于或类似于 SQL Server 提供的语法和语义。
将 Babelfish 与单个数据库或多个数据库结合使用
当您创建 Aurora PostgreSQL 集群以与 Babelfish 一起使用时,您可以选择单独使用单个 SQL Server 数据库或者将多个 SQL Server 数据库一起使用。您的选择会影响 babelfish_db
数据库内的 SQL Server 架构的名称显示在 Aurora PostgreSQL 中的方式。迁移模式存储在 migration_mode
参数中。创建集群后不得更改此参数,因为您可能会丢失对所有先前创建的 SQL 对象的访问权限。
在单数据库模式下,SQL Server 数据库的模式名称与 PostgreSQL 的 babelfish_db
数据库中保持一致。如果您选择仅迁移单个数据库,则可以在 PostgreSQL 中引用迁移的用户数据库的模式名称,其名称与 SQL Server 中使用的名称相同。例如,dbo
和 smith
架构驻留在 dbA
数据库内。
通过 TDS 进行连接时,您可以运行 USE dba
以查看来自 T-SQL 的架构 dbo
和 dev
,就像在 SQL Server 中一样。不变的架构名称也可以从 PostgreSQL 中看到。
在多数据库模式下,当从 PostgreSQL 中访问时,用户数据库的模式名称变为 dbname_schemaname
。从 T-SQL 中访问时,模式名称保持不变。
如图中所示,当通过 TDS 端口连接并使用 T-SQL 时,多数据库模式和单数据库模式与 SQL Server 相同。例如,USE dbA
列出架构 dbo
和 dev
,就像在 SQL Server 中一样。映射的架构名称,例如 dba_dbo
和 dba_dev
,在 PostgreSQL 中可见。
每个数据库仍包含您的架构。每个数据库的名称都加在 SQL Server 架构的名称之前,使用下划线作为分隔符,例如:
-
dba
包含dba_dbo
和dba_dev
。 -
dbb
包含dbb_dbo
和dbb_test
。 -
dbc
包含dbc_dbo
和dbc_prod
。
在 babelfish_db
数据库内,T-SQL 用户仍然需要运行 USE
dbname
以更改数据库上下文,因此外观和感觉与 SQL Server 相似。
选择迁移模式
每种迁移模式都有优点和缺点。根据您拥有的用户数据库数量和迁移计划选择迁移模式。创建用于 Babelfish 的集群后,您不得更改迁移模式,因为您可能无法访问之前创建的所有 SQL 对象。选择迁移模式时,请考虑用户数据库和客户端的要求。
当您创建用于 Babelfish 的集群时,Aurora PostgreSQL 会创建系统数据库 master
和 tempdb
。如果您在系统数据库中创建或修改了对象(master
或 tempdb
),请确保在新集群中重新创建这些对象。与 SQL Server 不同,Babelfish 不会在集群重启后重新初始化 tempdb
。
在以下情况下使用单个数据库迁移模式:
-
如果您要迁移单个 SQL Server 数据库。在单个数据库模式下,当从 PostgreSQL 访问时迁移的模式名称与原始的 SQL Server 模式名称相同。如果您想优化现有 SQL 查询以通过 PostgreSQL 连接运行,则这可以减少对现有 SQL 查询的代码更改。
-
如果您的最终目标是完全迁移到原生 Aurora PostgreSQL。在迁移之前,将您的架构整合到单个架构中 (
dbo
),然后迁移到单个集群中以减少所需的更改。
在以下情况下使用多数据库迁移模式:
-
如果您想在同一个实例中使用多个用户数据库获得原定设置 SQL Server 体验。
-
如果需要一起迁移多个用户数据库。