【问题标题】:Compare ms-sql database schemas on Ubuntu/Linux比较 Ubuntu/Linux 上的 ms-sql 数据库架构
【发布时间】:2019-07-16 09:55:13
【问题描述】:

ms-sql(在 linux 上)中是否有任何命令可以比较两个数据库之间的架构?

【问题讨论】:

    标签: sql sql-server linux schema


    【解决方案1】:

    也许可以通过间接方式完成 sqlpackage 适用于 Linux。

    • 首先,要创建的每个数据库的dacpac:

      sqlpackage.exe /Action:Extract /SourceServerName:XLW-CNU415CD8B /SourceDatabaseName:AdventureWorks2012 /TargetFile:AdventureWorks2012_v1.dacpac /p:IgnoreExtendedProperties=True /p:IgnorePermissions=False /p:ExtractApplicationScopedObjectsOnly=True

    • 然后,要比较的 dacpacs:

      sqlpackage /a:DeployReport /sf:AdventureWorks2012_v1.dacpac /tf:AdventureWorks2012_v2.dacpac /tdn:AdventureWorks2012.db /op:AdventureWorks2012_v1.xml

    请注意,此示例基于该工具的 windows 版本,我假设 Linux 端口具有相同的参数列表

    【讨论】:

    • 感谢您的解决方案。正如你所说,它在我的机器上也能正常工作,但 mssql-scripter 在我的数据库上比 sqlpackage 快得多 - 来自 sqlpackage 的报告比 diff 好,但 diff 为我完成了这项工作;-)
    【解决方案2】:

    我有非常相似的需求(我目前在 Linux 上使用 PostgreSQL),如果不一定是 ms-sql 命令,我有两种可能的解决方案:

    解决方案 1: 使用 Microsoft 的 mssql-scripter (https://github.com/Microsoft/mssql-scripter) 您可以通过例如

    获取 mssql-scripter
    pip install mssql-scripter.
    

    并执行以下命令:

    $ mssql-scripter -S serverName -d databaseSource -U user > ./source.sql
    $ mssql-scripter -S serverName -d databaseTarget -U user > ./target.sql
    $ diff source.sql target.sql
    

    解决方案 2: 如果您有可能使用桌面环境(就像我正在做的那样),我会使用比较工具,我认为这对用户来说更加友好。

    TiCodeX SQL Schema Compare (https://www.ticodex.com) 这是一个很好的工具,可以在 Linux、Windows 和 Mac 上运行,可以比较 MS-SQL、MySQL 和 PostgreSQL 数据库的模式。易于使用且有效。它可能会帮助你。

    为了使用它:

    • 配置源数据库(指定服务器名、用户名、密码等...)
    • 配置目标数据库
    • 如果您想排除数据库对象或更改输出,有一些选项
    • 按比较按钮

    您将获得两个数据库之间的差异,最终您还将获得迁移脚本以使目标数据库与源数据库相同。

    【讨论】:

    • 感谢您的链接。 mssql-scripter 和 diff 为我完成了这项工作。我还测试了 ticodex sql 模式比较,发现它也创建了迁移脚本 - 但目前我不需要这个,因为更改很容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多