使用 Babelfish 和 Amazon Aurora 从 Microsoft SQL Server 迁移到 PostgreSQL
背景
出于各种原因,越来越多的组织正计划从专有数据库转向开源数据库,例如避免昂贵的成本和许可条款,同时利用现代产品的灵活性和数据库自由度。
从遗留和商业数据库迁移通常是一项具有挑战性、耗时且资源密集型的工作。在遗留/企业环境中,数据库经常被各种桌面和 Web 应用程序使用,有时使用不同的编程语言。然后,迁移数据库将需要在这些应用程序上进行大量工作,以重写与数据库交互的层。许多组织不愿意对这些遗留应用程序进行此类投资。
Babelfish for Aurora PostgreSQL 是一项新功能,可以直接在 Amazon Aurora 上运行 Microsoft SQL Server 应用程序,几乎不需要更改代码。
在本教程中,我们将了解如何在臭名昭著的 Northwind 数据库上执行迁移,以及迁移更大更复杂的数据库时的一些挑战和注意事项。
我使用 Github](https://github.com/codecypher/Northwind)上提供的示例 Northwind .NET 应用程序进行测试,以说明我们可以对数据库运行的不同类型的操作。我还使用了 Microsoft的[数据库脚本。
兼容性评估
在开始迁移之前,我们需要评估我们的 Microsoft SQL 数据库与 Babelfish for PostgreSQL 的兼容性。这样的评估将帮助我们确定迁移的可行性和复杂性。
Babelfish Compass是一种工具,用于分析数据库的 SQL/DDL 代码并确定哪些功能受/不受支持,因此您可以提前知道如何使迁移成功以及您可能需要进行哪些调整在你现有的数据库上做。
要开始评估,我需要为数据库生成 SQL 脚本,如果我还没有 SQL Server Management Studio,我可以使用它来实现。因为我下载了脚本,所以我跳过了。
我还需要安装Babelfish Compass。
此时我运行了评估命令。
sh ./BabelfishCompass.sh MyReport ~/Documents/Temp/NorthwindCore/src/scripts/instnwnd.sql -appname NorthwindCore
进入全屏模式 退出全屏模式
该命令成功运行,结果看起来很有希望。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s---15FXJVX---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/kc6icq0gbg0884gws2bq.png)
报告已生成,我可以使用 HTML 页面分析结果。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--xkK34siu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/xafm3b5kjx61c9cevizg.png)
对我来说幸运的是,报告中没有突出显示任何问题......我可能是故意选择数据库的。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--WZhvkUwO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/kr57xdvue0eaqqax4f90.png)
在现实世界的场景中,您需要在报告之后对迁移做出决定。您可能需要对数据库做进一步的工作或调整某些程序或功能。
限制和注意事项
在大型复杂数据库中实现与 Babelfish for PostgreSQL 的完全兼容是很困难的。您可以使用本指南了解有关限制和不受支持的功能的更多信息,并确定它是否适合您的数据库。
另一个考虑因素是 PostgreSQL 的版本。在撰写本文时,Babelfish 仅支持 PostgreSQL 版本 13.4 及更高版本,这对于无服务器容量类型尚不可用。
至于区域可用性,适用于 Amazon Aurora PostgreSQL 的 Babelfish 在 Aurora PostgreSQL 支持的所有区域都可用。
在应用程序方面,工具和框架的发现对于评估迁移前的可行性和风险至关重要。根据设置、依赖项、版本和其他因素,使用实体框架或类似的 ORM 可能会或可能不会起作用。
制剂
我创建了一个新的 Microsoft SQL Server RDS 实例来充当源数据库。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--y3UjRov9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/vf9ut5ieyybk7nuoli1h.png)
我使用 DataGrip(您也可以使用 SSMS)连接到数据库并运行我之前下载的 Northwind 数据库脚本。
然后,我使用单个写入器实例创建了目标 Aurora PostgreSQL 数据库集群。请注意我使用的数据库版本,这是支持 Babelfish 所需的最低版本。您还可以使用过滤器仅显示支持的版本。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--POVjpwVr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/svs7lex2eiwvf1zsp913.png)
我还在设置中打开了 Babelfish。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--CdDQExd3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/rmvmgnmy7wfdwfcnvuy7.png)
您可以在文档中阅读有关不同迁移模式(单个数据库与多个数据库)的更多信息。
我最终得到了一个源数据库和一个目标数据库。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--ZOmyWoZS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/q4ekh62lsjkvo7lrjis2.png)
架构转换
在标准数据库迁移项目中,您可以使用AWS Schema Conversion tool (AWS SCT)将现有数据库架构从一个数据库引擎(即 MS SQL Server)转换为另一个(即 PostgreSQL)。
如果您尝试使用启用了 babelfish 的 PostgreSQL 数据库这样做,您将遇到各种错误和权限问题,因为 Babelfish 在其 sys 数据库中维护数据库对象信息。
为此,我使用SQL Server Management Studio (SSMS)连接到 PostgreSQL 实例以创建northwind数据库。我没有使用默认的 SSMS 对象资源管理器,而是使用了 New Query 窗口进行连接。
然后我运行以下脚本:
CREATE DATABASE northwind
进入全屏模式 退出全屏模式
最后,我从下载的 Northwind 脚本文件中提取了模式创建脚本,并在 SSMS 的同一查询窗口中运行它。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--Em4X1DkV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/xvelu6i34uq7c6r8k4zf.png)
您可能会在此处遇到多次代码调整迭代。
完成后,我可以通过使用 PostgreSQL 驱动程序连接到 PostgreSQL 实例来浏览在 DataGrip 中创建的babelfish_db。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--pPqkDJgP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/h6ph02y1b5qhitl918a0.png)
此时我本可以运行整个脚本来添加数据,但我想遵循实际迁移项目的步骤,并选择使用Database Migration Service进行完全加载。
数据库迁移
模式已在 PostgreSQL 数据库中创建,我已准备好开始迁移数据。
使用 AWS Database Migration Service (DMS),我首先创建了一个新的复制实例。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--WFOzfF4w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/pjntntxlw9yvvdj3ym0s.png)
我还创建了两个端点来代表我们的源数据库和目标数据库。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--XEdWFpmH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/53qslign2woblr8aocg9.png)
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--SIfgfjU2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/g35fqzwvs1xydeubua4g.png)
此时,我创建了数据库迁移任务并将数据全部加载到目标 PostgreSQL 数据库中。对于转换和映射,我为dbo模式中的表和列选择了“转换小写”规则。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--JEv5ukPN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/kukasyrrd52b4883uzr4.png)
数据已成功加载,我已准备好运行该应用程序。
测试应用
在我宣布成功之前,我想通过指向 Microsoft SQL Server 数据库然后切换连接字符串以指向新的 PostgreSQL 实例来运行应用程序。
经过几轮小的代码更改,主要是因为示例应用程序中的实体框架设置,我的测试成功了!
我记录了我所做的测试的几个步骤。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--bbbel7I7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://gsaadeh-blogs .s3.eu-west-1.amazonaws.com/babelfish_northwind_640.gif)
结论和考虑
如果你计划从 MS SQL Server 迁移到开源,那么 Babelfish 是一个很棒的工具。它为 PostgreSQL 提供了理解为 Microsoft SQL Server 编写的应用程序查询的能力。它还可以为您提供快速迁移路径,而无需对您的应用程序进行更改或进行微小更改。
在使用 Babelfish 并决定它是否适合您之前,我鼓励您检查文档并了解该功能的工作原理以及与您尝试迁移的应用程序相关的限制。
更多推荐


所有评论(0)