在本文中,我们介绍了如何使用 Python 自动化多个数据库如 SQL Server、Oracle、PostgreSQL 和 MySQL的架构验证过程。这不仅简化了数据库迁移后的验证步骤,还能高效生成各种报告,帮助确认迁移成功与否。
在之前的帖子中,我们讲解了从 Microsoft SQL Server 迁移到 Amazon RDS for PostgreSQL 和 Amazon Aurora PostgreSQL 时,手动验证数据库对象的方法。这一过程包括在源数据库和目标数据库执行相关的查询,并对比输出结果以识别迁移后的差异。由于人工验证所有的数据库对象、表级计数、数据类型不匹配和其他有价值的检查是一项繁琐的工作,我们决定使用 Python 来自动化此过程。我们利用 Python 的能力,对目标数据库与源数据库进行查问、验证,并生成不匹配的对象报告。
在本帖子中,我们将解释如何使用 Python 验证多个数据库例如 SQL Server、Oracle、PostgreSQL 和 MySQL的数据库对象。这种方法为评估不同数据库类型的迁移成功性提供了更简单的方式,只需提供数据库凭据便可生成迁移摘要报告。
我们使用 Python 生成一份包含摘要和详细级别架构验证的报告,通过加密连接和 AWS Secrets Manager 服务安全存储源和目标数据库的连接详细信息主机、用户名、密码、端口和数据库。此报告可以生成为用户请求的输出格式,比如 Excel 文件 (xlsx) 或 HTML。目前,该解决方案支持 Windows 操作系统以及 SQL Server、Oracle、PostgreSQL 和 MySQL 数据库。
目前支持 Windows 和 macOS。
注意: 如果您使用的是 macOS,可能会遇到一些安装错误,请按照以下步骤修复:
如果出现 ERROR Failed building wheel for pymssql 错误,请使用以下命令重装 pymssql:
bashpip3 uninstall pymssqlpip3 install pymssql
如果出现 Error occurred while executing the MsSQL query (pyodbcError) (01000 [01000] [unixODBC][Driver Manager]Cant open lib ODBC Driver 18 for SQL Server file not found (0) (SQLDriverConnect)) 错误,请安装 macOS 的 ODBC 驱动程序。
要设置此工具,请完成以下步骤:
下载 代码库 到主机。打开命令提示符,导航到根目录,并运行以下命令检查主机上的 Python 版本:
bash python version python3 version
根据主机上的 Python 版本,运行以下命令,并指定合适的版本需求文件:bash python m pip install r requirements310txt python3 m pip install r requirements310txt
数据库详情,如主机名、用户名、密码等,需要在单独的 AWS Secret Manager 密钥中指定,以提供更高的凭据安全性。
飞机加速安卓下载创建密钥的步骤如下:
打开 Secrets Manager 控制台。确保您在正确的区域。选择 Store a new secret。选择 Other type of secret。在 Plaintext 下以以下格式指定数据库详细信息:json { username ltusernamegt password ltpasswordgt host ltdatabasehostnamegt port ltportgt databasename ltdatabasenamegt }
选择将用于密钥加密的加密密钥。确保运行工具的角色/用户具有适当的权限来访问该密钥和密钥。您可以参考该 文档。指定秘钥的名称和其他详细信息,保存秘钥,并记下名称,以便在下一步中使用。在工具源目录的 conf 文件夹中的配置文件 “configurationsini” 中提供源、目标、文件格式、Secrets Manager 区域和日志级别的详细信息。按以下格式指定源和目标的 Secrets Manager 密钥、文件格式和日志详细信息。
ini[source]SOURCEDATABASETYPE = mssqlSOURCESECRETID =
[target]TARGETDATABASETYPE = postgresTARGETSECRETID =
[region]SECRETREGION =
[fileformat]FILEFORMAT = html
[logging]DEBUGLEVEL = INFO
SOURCEDATABASETYPE 和 TARGETDATABASETYPE 的允许输入如下:
iniSQL Server = mssqlMySQL = mysqlOracle = oraclePostgreSQL = postgres
允许的文件格式输入包括 xlsx 和 HTML默认选项为 HTML。
您也可以使用相同名称的环境变量设置这些详细信息,这将覆盖此文件中的详细信息。我们建议使用环境变量来存储数据库密码。
要生成数据库迁移报告,请运行以下命令之一:
bashpython src/mainpypython3 src/mainpy
该工具会在输出文件夹下生成报告。作业运行 日志 位于日志文件夹中。
在以下屏幕截图中,我们展示了 migrationsummarymssqltopostgres20230404064829html 的示例输出。
第一个屏幕截图是数据库迁移摘要和目录。
下一个截图显示源和目标数据库的详细信息。
接下来的截图是总体摘要。
下面的截图显示了架构摘要。
最后的截图显示了对象摘要。
删除在“设置 AWS Secret Manager 密钥以获取源和目标数据库详细信息”部分创建的秘密,以存储数据库详细信息。
验证数据库对象对于确保数据库迁移的准确性至关重要,以确保所有对象都已成功迁移并具有正确的属性和依赖关系。验证所有数据库对象有助于确保目标数据库的完整性,从而让您的应用程序无缝运行,如同在源环境中一样。
在本文中,我们讨论了如何使用 Python 和其库自动化数据库对象迁移后的手动验证过程。输出包括每个架构的摘要和详细的不匹配情况以及给定数据库的匹配百分比。
有关数据库迁移的更多学习资源,请参考以下文献:
AWS Schema Conversion Tool数据库迁移 开始之前需要了解的事项从 Microsoft SQL Server 到 Amazon Aurora 的 PostgreSQL 兼容性迁移指南CREATE PROCEDURE SQL 命令CREATE FUNCTION SQL 命令索引:SQL 语言如果您对本文有任何问题或建议,请留言。
Sai Krishna Namburu 是 AWS 专业服务的首席数据库顾问,常驻印度海得拉巴。他对关系型数据库有深入了解,具备同构和异构数据库迁移的实际经验,致力于帮助客户向 AWS 云迁移并进行优化。
Pratik SharmaPratik Sharma 是 AWS 专业服务的顾问,常驻印度浦那。他喜欢将代码与 AWS 服务以新的方式结合,构建解决方案与自动化工具,以助力客户在云端的旅程。
Ramesh Babu DontiRamesh Babu Donti 是 AWS 专业服务的首席数据库顾问,常驻印度海得拉巴。他专注于帮助客户构建高可用、经济高效的数据库解决方案,并将其大规模数据库迁移到 AWS。