Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql SQL Server数据库更改部署_Tsql_Sql Server 2005_Deployment_Dbdeploy - Fatal编程技术网

Tsql SQL Server数据库更改部署

Tsql SQL Server数据库更改部署,tsql,sql-server-2005,deployment,dbdeploy,Tsql,Sql Server 2005,Deployment,Dbdeploy,我正在努力跟上数据库的变化,以及如何干净地维护和部署从Dev到PRD从一个版本到另一个版本的数据库变化 目前,我使用一个SQL脚本来找出自上次发布以来发生了什么变化 进程和视图更容易推进,因为我可以简单地删除并重新创建(如果存在) 由于不能简单地删除现有表,因此表更改更加困难 但我认为我无法理解的主要问题是,在任何两个主要的PRD版本之间,我们都有多个针对Dev和UAT的迷你版本 只要我从其他开发人员那里得到一个变更列表,我就可以发布Dev和UAT的迷你版本,我将它与我的结合起来,然后发布一

我正在努力跟上数据库的变化,以及如何干净地维护和部署从Dev到PRD从一个版本到另一个版本的数据库变化

目前,我使用一个SQL脚本来找出自上次发布以来发生了什么变化

  • 进程和视图更容易推进,因为我可以简单地删除并重新创建(如果存在)
  • 由于不能简单地删除现有表,因此表更改更加困难
但我认为我无法理解的主要问题是,在任何两个主要的PRD版本之间,我们都有多个针对Dev和UAT的迷你版本

只要我从其他开发人员那里得到一个变更列表,我就可以发布Dev和UAT的迷你版本,我将它与我的结合起来,然后发布一个版本,而且我是Dev和UAT DBs的系统管理员,所以我确切地知道存在什么以及应用变更时会发生什么

对于PRD,我必须准备一个干净的脚本并将其交给DBA,以便他可以在那里运行它,但除了PRD上的表名、列和数据之外,我无法查看任何其他内容

这个用于PRD的脚本应该捕捉到几乎所有进入迷你版本的内容,但大多数时候这些迷你版本不是连续的,有时会相互否定,因为一个版本添加了功能A,然后后续版本删除了功能A,但是对于PRD,我们可能必须添加功能A,所以不需要进行第二个迷你版本,因为将有效地删除功能A

因此,简而言之,我正在寻找管理和跟踪版本间DB更改的方法,以及为DB更改构建部署脚本的好方法

注意:我会手动维护TFS中所有SQL对象的副本

我尝试使用数据库项目,但我并没有得到太多的运气实现我想要的


有什么想法吗,伙计们?非常感谢任何帮助

我不熟悉TFS,我以前使用过Git(CVS和SVN),因此请正确看待这个答案

管理和版本化SQL位一直是我最糟糕的噩梦。 有一些工具可以简化变更管理,红门SQL开发包,它可以处理比较,并允许连接到版本控制系统。对于您的请求,您可以使用idera SQL比较工具集来衡量,idera的完美主义方法不应该被过度看待

无论如何,在我看来,管理变更不能也不应该被视为一个技术问题,它必须是it治理的一部分,并且是程序性的,它需要记录并在任何相关职能部门之间进行沟通

当一些小版本、热修复、微更改或类似的事情发生时,它们必须反映在需要得到它的所有其他环境中

当然,如果在生产环境中有一个迷你版本,并且您处于UAT的中间位置,那么您可能不希望在该环境中插入迷你版本。IMO,在UAT之后不久,您应该将迷你版本应用于环境,并执行E2E QA会话,以确保环境良好

如果你阅读我前面的段落,你可能会发现一些问题,比如说UAT有一个SP版本4,而同一个SP的迷你版本是2。。。您如何确保自己不会导致回归?

这是版本控制系统和合并工具提供帮助的时候。红门工具还可以帮助您构建部署。

但是,我相信治理、沟通和遵守规则是持续成功的最重要因素

目前的趋势是实施持续集成,并按需构建测试环境,包括内部、托管和云上。通常,它们的建造和维护成本并不低,但它们是值得的

最后但并非最不重要的一点是,在为SQL部署进行开发时,您应该遵守两条相同的规则:

  • 例如,每个更改脚本都应该是可重复的
    • 在创建过程之前,请检查它是否存在,并在创建之前将其删除
    • 在执行任何插入操作之前,请检查该行是否不存在,然后执行insert else update
  • 当部署到多个数据库时,每个更改脚本都必须确保使用正确的数据库(在这里,我发现同义词是自开罐器创建以来最好的发明之一)
  • 更改脚本应该遵循一个顺序。对于每个对象:
    • DDL
    • 为上述DDL应用DCL
    • 为表应用DML
  • 我发现脚本的最佳顺序是
    • 创建/更改表
    • 创建/更改视图
    • 刷新所有视图
    • 创建/更改函数
    • 创建/更改函数
    • 执行每个DML
  • 在每一个脚本中,都避免了ABC对脚本的子部分进行排序的诱惑,通常您有一些依赖项,如FK或SP,它们执行其他SP,这使得ABC方法令人沮丧

  • 我知道我迟到了,但请尝试使用最适合控制数据库对象的源代码和同步的工具。我已经使用这个工具很长时间了,并且对结果很有信心。有许多选项可以将SQL脚本、用户、安全性、设置和数据从一个数据库同步到另一个数据库。

    感谢@Luis的详细解释;我想这一定是我的解释不好,我没能把我的问题恰当地解释清楚。我已经在我的部署脚本中遵循了一个序列,它与您所列出的序列相似(如果不相同的话)。但我的主要问题或需要是以编程方式计算出所有对象的更改,而不是手动计算出更改了什么。不过,我完全同意您对序列部分的看法。@RobertDinaro看一看,他们有处理版本控制、比较和部署脚本的工具。最有可能的是,他们可以通过编程方式处理所有更改的对象。谢谢@Luis——这是一家不想更改的公司的工作场所