首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL部署自动化

SQL部署自动化
EN

Stack Overflow用户
提问于 2019-05-24 08:58:41
回答 2查看 4.2K关注 0票数 2

我试图使用Jenkins自动化现有的sql server数据库部署自动化。

自动化的方法之一是在使用Visual的SQL服务器数据库项目中包含SQL脚本(存储过程、视图、表创建)。使用MSBuild构建项目,并使用SQLPackage.exe部署dacpac。但是,现有数据库引用存储过程/视图中的其他数据库,因此我在Server数据库项目中导入了其他数据库。此外,在提取现有数据库的dacpac时,我会遇到很多错误。我假设这是由于现有代码不兼容dacpac,并且可能需要更改才能兼容dacpac。

是否有其他方法来自动化SQL服务器代码部署,而不是使用server数据库项目?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-24 11:45:43

基于SSDT模型的项目的另一种替代方法是迁移脚本方法,正如所讨论的这里

基于模型的部署需要在构建过程中验证依赖关系,否则在部署期间可能会出现错误。不幸的是,我不知道如何为其他不对dacpac友好的引用数据库创建dacpac,而无需为从源代码构建的引用数据库创建单独的项目。您可以为引用的数据库创建数据库项目,并使用SSDT导入向导提取数据库、项目源代码的架构并清理解决方案。

此任务的复杂性将根据跨数据库和跨服务器依赖项的数量而有很大差异。为了避免循环引用,可能有必要将数据库拆分为单独的项目。

票数 2
EN

Stack Overflow用户

发布于 2019-05-24 18:29:02

SSDT是一个很好的选择,但是您和所有开发人员需要一段时间才能适应它并了解什么是离线开发和基于状态的部署。您可以自己阅读SSDT的工作原理,但是几乎没有给您的建议:

  • 对于查询中涉及的每个数据库,您都需要创建项目。
  • 如果在代码中使用其他数据库,则应将此项目添加为引用。
  • 不要在代码中使用3/4的部件名称(server.database.schema.name或database.schema.name),而是为每个对象和同义词创建同义词,使用服务器和数据库名称的变量
  • 不要将登录、用户和权限放入该项目
  • 创建发布配置文件并仔细查看所有设置(例如,将用户、登录名、权限等排除在外)
  • 有预/后脚本,您可以在其中创建一些解决方案。

大多数人害怕使用SSDT进行全自动部署,因为脚本是自动生成的,最后的部署脚本只有非常有限的控制(公平地说,您可以使用部署贡献者控制几乎所有的事情,但这是另一个讨论的主题)。通常在脚本生成和部署之间有脚本评审步骤。

因此,如果您要坚持使用SSDT,那么您的操作指南是:

  • 为代码中使用的所有数据库创建项目
  • 为项目中来自其他数据库的所有对象创建同义词,将变量作为数据库和实例名为(非常重要)
  • 对所有外部数据库和实例使用跨多个文件的替换

暗示要替换。代码中有几个对象名称的组合:

  • INSTANCE.DATABASE.SCHEMA.OBJECT
  • INSTANCE.DATABASE..OBJECT
  • INSTANCE...OBJECT
  • 与[]或"“的所有其他组合,例如dbo.SomeTable或dbo.SomeTable

因此,您可以做的是将实例替换为跨所有文件的$(InstanceName),用$(DatabaseName)替换数据库等等。要有创意,基本上当你知道该怎么做的时候,你可以用这些技巧在几个小时内把几乎所有的数据库放到SSDT上。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56289174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档