架构迁移:SQL Server数据工具与Liquibase和Flyway


11

这似乎是一个愚蠢的问题,但是我一直在研究用于架构迁移的开源解决方案,即Liquibase和Flyway。

但是,老板告诉我,SQL Server数据工具(SSDT)可以完成相同的工作。我不确定是否同意,但是我在互联网上几乎找不到直接将其与Liquibase和/或Flyway进行比较的东西。

我认为SSDT是SQL Server的开发,数据建模和设计工具,还支持架构比较(并生成其脚本)和源代码控制。它解决了一个不同的问题,尽管在模式迁移的某些方面可能与Liquibase / Flyway有所重叠。但是,作为整体架构迁移工具,Liquibase和Flyway是完全专用的工具,而SSDT则更多地用于数据库的设计和开发。

即使只是说没有可比性,SSDT本身也不是任何模式迁移工具,任何意见都会受到赞赏。

Answers:


17

SSDT可以做与Liquibase / Flyway相当的事情,但是它采用了不同的方法。使用SSDT,您可以拥有开发环境,从而可以进行定义,查找引用和智能感知,还可以将项目编译为dacpac,然后将该dacpac部署到数据库中。

进行部署的SSDT方法(和redgate sql比较方法)是声明您想要的内容,因此,如果您想更改如下表:

create table a(id int)

到如下表:

create table a(id int, another_column varchar(12))

使用SSDT,您只需将表定义更改为第二个,然后让SSDT担心如何升级它(它可以更改表,添加列还是更改列顺序,因此您需要重建表等)。

使用Liquibase(DbUp,ReadyRoll,手动方法等),在这种情况下,您必须自己编写更改表,并确保以正确的顺序运行脚本,请考虑以下情形:

  1. 发布1-在表格上创建列Hello
  2. 版本2-将列hello重命名为joe_blogs
  3. 发布3-重命名列joe_blogs为hello
  4. 发布4-创建列joe_blogs

如果错过了任何发行版,则下一个发行版都无法继续。

升级脚本(Liquibase,DbUp等)的好处:

  • 您完全可以控制脚本
  • DBA的/开发人员已经习惯了

比较/合并(SSDT,Redgate SQL Compare)的好处:

  • 不必编写升级脚本
  • 只需比较并合并该版本即可轻松获取任何特定版本

升级脚本的缺点:

  • 必须按顺序运行
  • 依靠人类没有犯错误
  • 可能会很慢,特别是如果您有很多更改
  • 除非您的团队在不同环境(开发,测试,登台,产品等)中纪律严明的数据库经常不同步,否则任何测试都将无效
  • 降级发行版意味着编写与您已经编写的所有脚本相反的版本

使用比较/合并的缺点:

  • 工具不是100%受信任的,也许是不公平的
  • SSDT需要一个有效的项目,许多数据库的代码实际上并未编译或运行(请考虑删除表,但不包括过程等),我在大约8/10继承的数据库中看到了这一点:)
  • 许多DBA /开发人员都不愿放弃在SSMS /记事本中进行开发

我个人确实认为SSDT是一个专业的开发环境,这意味着我可以专注于编写有用的代码和测试,而不是编写升级脚本,而升级脚本本身只是达到目的的一种手段。

您征求意见,然后就可以了:)


1
除SQL Server以外,SSDT是否还可以使用?例如Postgres?
a_horse_with_no_name 2015年

3
没有“ SQL服务器数据工具” :)
Ed Elliott

1
为什么不?SSIS包可以传输几乎所有的ODBC源
a_vlad 2015年

除非我误解了,否则我认为我们是在谈论管理数据库模式而不是创建sis软件包?很高兴得到纠正:)
Ed Elliott

1
SSIS旨在移动数据,并因此支持多种系统的连接。SSDT用于SQL Server数据库项目的开发和维护。它具有一个生成过程,该过程检查目标SQL Server版本的脚本兼容性,并检查所有引用,procs等以获取T-SQL语法。
戴夫

2

我只是补充预先的答案。

Flyway网站中心位置描述的最大区别:

仅解决一个问题即可解决。Flyway会迁移您的数据库,因此您不必再为它担心。

Visual Studio + SSDT + SSIS =全功能ETL工具,只有一个真正的缺点-它只能在Windows下运行它需要Windows + SQL Server来运行程序包,但几乎可以处理所有源代码。

用于传输/迁移数据-市场上很多产品。商业,开源,社区/快递等

对于迁移代码-并不是很好。即使软件承诺“可以毫无问题地转换触发器,过程和功能”,实际上-仅是简单的大多数代码迁移操作。


2

我曾经使用过Sql Server数据工具和flyway。使用SSDT,我得到以下优点:

  1. 我可以编译数据库项目。.意思是,不必担心删除被视图,函数或存储的proc引用的列。这是一个了不起的功能,因为在过去,我们仅在发布后才发现此类遗漏
  2. 成功构建后,SSDT生成所谓的“ DACPAC”。认为这是一个带有版本的MSI。

  3. 给定的dacpac(例如版本5)可以应用于Dacpac版本1,2,3,4或6,7,8等的数据库。如果将其应用于1-4,则将升级数据库。如果应用于6,7等,则数据库将降级/回滚。如果有数据丢失,将出现警告,可以将其抑制。因此,我们获得了出色的回滚功能,这是其他工具(如flyway等)所不具备的。使用flyway,必须提供一组新的脚本来进行回滚。

  4. DACPAC在一次交易中应用所有更改;这意味着如果升级中有5个表更改而其中一个失败,则整个事务都会回滚。Flyway也支持此功能,但适用于每个文件。

但是,SSDT和DACPAC是特定于Microsoft SQL Server的。flyway可以用于多种数据库。

因此,最重要的是,如果仅使用SQL Server,则使用SSDT和DACPAC应该是一个相当容易的决定。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.