比较Ubuntu / Linux上的ms-sql数据库架构

时间:2019-02-22 10:15:14

标签: sql sql-server linux schema

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

2 个答案:

答案 0 :(得分:2)

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

解决方案1: 使用Microsoft(https://github.com/Microsoft/mssql-scripter)的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架构比较(https://www.ticodex.com)这是一个很好的工具,可以在Linux,Windows和Mac上运行,并且可以比较MS-SQL,MySQL和PostgreSQL数据库的架构。易于使用且有效。可能会对您有帮助。

要使用它:

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

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

答案 1 :(得分:0)

也许可以通过以下方式间接完成 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端口具有相同的参数列表