如何使用RedGate docker生成迁移脚本并获取细粒度数据库比对结果
解决方案
一、获取列级、索引级详细比对结果
默认SQL Compare仅输出最简比对结论,你可以通过添加参数实现细粒度差异输出:
- 控制台直接打印明细:添加
/verbose参数,终端会直接输出每个对象的具体差异,包括表的字段属性、索引定义、约束规则等层级的区别 - 生成结构化可视化报告:搭配
/Report和/ReportType参数生成HTML格式报告,差异会按对象分类展示,表层级会自动展开列、索引、键等子对象的具体差异
注意:使用文件输出类参数时需要先挂载本地目录到容器,否则生成的文件会随容器销毁丢失
示例命令如下:
# 先创建本地用于存放报告的目录 mkdir -p ./sqlcompare_output # 带详细输出+生成报告的比对命令 docker run --rm --interactive --tty \ -v $(pwd)/sqlcompare_output:/report \ redgate/sqlcompare:14 /IAgreeToTheEULA \ /s1:sql_docker_1,1433 /db1:Customers /u1:SA /p1:pass \ /s2:sql_docker_2,1533 /db2:Customers /u2:SA /p2:pass \ /verbose \ /Report:"/report/diff_report.html" /ReportType:Html
执行完成后直接打开本地./sqlcompare_output/diff_report.html即可查看全量细粒度比对结果。
二、生成迁移脚本
添加/ScriptFile参数即可自动生成从源库(s1)同步到目标库(s2)的迁移脚本,示例命令如下:
mkdir -p ./sqlcompare_output docker run --rm --interactive --tty \ -v $(pwd)/sqlcompare_output:/script \ redgate/sqlcompare:14 /IAgreeToTheEULA \ /s1:sql_docker_1,1433 /db1:Customers /u1:SA /p1:pass \ /s2:sql_docker_2,1533 /db2:Customers /u2:SA /p2:pass \ /ScriptFile:"/script/migration.sql"
如果需要生成从目标库同步到源库的反向脚本,额外添加/Reverse参数即可。生成的脚本会存放在本地./sqlcompare_output/migration.sql路径下,执行前建议先预览脚本内容确认同步逻辑符合预期。
内容的提问来源于stack exchange,提问作者Hossein Fallah
相关产品推荐
相关产品推荐

