【问题标题】:Automatically create database compare scripts and execute自动创建数据库比较脚本并执行
【发布时间】:2018-04-14 05:42:40
【问题描述】:

我有一种情况,我必须将我的数据库版本(架构)与我的所有客户端(可能不同的版本)进行比较,并部署必要的更改以使所有版本都相似。我正在寻找一种自动将我的数据库架构与我的客户架构进行比较、生成差异脚本并执行它以确保所有版本都相同的方法。

我知道 Red Gate 和类似工具,但问题是我需要从我的客户端获取架构(这很难获取)。

提前致谢。

【问题讨论】:

  • 如果无法从客户端获取架构,您将如何比较架构?
  • 您解释了一种可以做到这一点的方法。不太确定这里的问题是什么。
  • 执行此操作的一般方法是使用版本控制和更新/回滚脚本,部署的架构版本存储在客户端,您可以根据需要进行更新。我个人最喜欢的迁移工具是mybatis migrations,其他选项stackoverflow.com/questions/131020/migrations-for-java
  • SQL Server Data Tools 带有架构比较和迁移工具。但是,如果您无法访问您的客户架构,您认为您可以做什么?您可以尝试使用该工具在客户端自动生成更改脚本,但这可能是灾难性的。
  • 您拥有 SQL 比较吗?如果是这样,我将在此处发布一个答案,描述如何从客户端获取架构而不需要 SQL 比较的副本。

标签: sql sql-server ssms sqlpackage sqlcompare


【解决方案1】:

我终于为这个问题找到了一个可能的解决方案。我正在使用SqlPackage 实用工具生成 dacpac,将客户的 dacpac 与我的进行比较,创建差异脚本并部署更改。

这里是命令

创建 Dacpac

sqlpackage.exe /Action:Extract /SourceServerName:DbServer /SourceDatabaseName:DbName /TargetFile:"C:\工作文件夹\Client.dacpac" /p:IgnoreExtendedProperties=True /p:IgnorePermissions=False /p:ExtractApplicationScopedObjectsOnly=True /p:IgnoreUserLoginMappings=True /p:VerifyExtraction=True

比较 Dacpacs 并生成部署脚本

sqlpackage.exe/a:Script /sf:"C:\Working Folder\Primary.dacpac" /tf:"C:\Working Folder\Client.dacpac" /tdn:"DbName" /op:"C:\Working 文件夹\DifferenceScript.sql"

运行脚本

sqlcmd -S DbServer -i "C:\Working Folder\DifferenceScript.sql" -o "C:\工作文件夹\Output.txt"

Output.txt 文件包含部署结果。所以我所要做的就是运行这些命令,它会处理一切。

这是另一个有用的link

【讨论】:

  • 您实际上可以只使用Script 操作来创建部署脚本。作为源设置构建 dacpac 文件,作为目标设置数据库连接(使用用户、密码等)
猜你喜欢
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2014-07-20
  • 2014-11-14
  • 2011-02-16
相关资源
最近更新 更多