繁体   English   中英

跟踪对数据库所做的更改

[英]Track changes made to a database

背景:

我有一个MS SQL Server数据库,我想跟踪它的更改。 例如,如果需要添加或删除列或需要删除表。 与常规代码的版本控制类似。

问题:

环顾四周时,我发现可以使用一些工具:

  • RedGate SQL源代码控制
  • Visual Studio数据库项目

我对知道这两个工具中的任何一个是否可以跟踪对我的数据库的更改更感兴趣。 更具体地说,我有一个TFS服务器,它是我的MVC代码的源代码控制,我可以将这两个服务器与TFS一起使用吗? 它将允许我们从旧版本还原吗? 它将允许多个开发人员同时处理数据库吗?

对于此类工作,ApexSQL源代码控制显示为您所需要的。 使用此SSMS加载项,您可以直接在数据库上工作,并且所有更改都将实时跟踪

是的,几个开发人员可以在同一数据库上同时工作。 当一个开发人员处理一个或多个对象时,其他开发人员可以看到那些对象,并且直到第一个对象完成更改之前,其他开发人员无法更改该对象,否则将不允许它们。 无论如何,如果对象更改错误,则可以随时还原以前的版本或任何早期版本。

该外接程序具有所有必要的选项和功能,以使开发人员可以在不浪费时间检查对对象所做的更改的情况下工作,因为该外接程序会为他们执行此操作。 而且,您始终可以看到更改的对象,时间和对象。

我已经在数据库版本控制领域工作了5年(担任DBmaestro产品管理总监 ),并且已经担任DBA超过20年了,我可以告诉你一个简单的事实,即当您处理Java时,您不能对待数据库对象, C#或其他文件,并将更改保存在简单的DDL脚本中。

原因有很多,我仅举几例:

  • 文件存储在本地开发人员的PC上,所做的更改不会影响其他开发人员。 同样,开发人员不受同事所做更改的影响。 在数据库中(通常)不是这种情况,开发人员共享同一数据库环境,因此提交给数据库的任何更改都会影响其他更改。
  • 使用签入/提交更改/等完成发布代码更改(取决于您使用的源代码管理工具)。 此时,来自开发人员本地目录的代码将插入到源代码控制存储库中。 想要获取最新代码的开发人员需要从源代码控制工具中请求它。 在数据库中,即使没有将其检入到存储库中,更改也已经存在并且会影响其他数据。
  • 在文件签入期间,源代码管理工具将执行冲突检查,以查看在修改本地副本期间同一文件是否已被其他开发人员修改和签入。 同样,在数据库中对此没有检查。 如果您在本地PC上更改了某个过程,同时又用本地PC上的代码修改了同一过程,那么我们将覆盖彼此的更改。
  • 通过将代码的标签/最新版本保存到一个空目录中,然后执行构建–编译来完成代码的构建过程。 输出是二进制文件,我们在其中复制并替换现有文件。 我们不在乎以前是什么。 在数据库中,我们无法重新创建数据库,因为我们需要维护数据! 部署还将执行在生成过程中生成的SQL脚本。
  • 当执行SQL脚本(使用DDL,DCL,DML(用于静态内容)命令)时,您假定环境的当前结构与创建脚本时的结构相匹配。 如果不是这样,那么当您尝试添加已经存在的新列时,脚本可能会失败。
  • 将SQL脚本视为代码并手动生成它们会导致语法错误,数据库依赖项错误,不可重用的脚本,这些使开发,维护,测试这些脚本的任务变得复杂。 此外,这些脚本可能会在与您运行的环境不同的环境中运行。
  • 有时,版本控制存储库中的脚本与测试对象的结构不匹配,从而在生产中会发生错误!

还有很多,但我想您已经知道了。

我发现有效的方法如下:

  1. 使用强制版本控制系统,该系统对数据库对象执行检出/检入操作。 这将确保版本控制存储库在签入操作中读取对象的元数据时,与被签入的代码匹配,而不是作为手动完成的单独步骤。 这还允许多个开发人员在同一个数据库上并行工作,同时防止他们意外地覆盖彼此的代码。
  2. 使用影响分析,该分析利用基线作为比较的一部分,以识别冲突并确定更改(在比较源代码管理存储库和数据库之间的对象结构时)是源自开发的真实更改还是源自开发的更改其他路径,然后应跳过该路径,例如其他分支或紧急修复。

我在此发表的一篇文章已发表在这里 ,欢迎您阅读。

如果您正在寻找一种产品,该产品将自动从您的SQL Server跟踪到TFS中的更改,我邀请您来看看我们的产品Sql Historian 它与大多数其他SQL版本控制系统(包括您列出的版本)不同,因为它不需要开发人员执行签入仪式以将版本控制与已提交给数据库的内容同步。

但是,Sql Historian和您提到的其他两个系统具有的共同功能是:使用TFS,查看数据库对象的旧版本的功能以及允许多个用户同时在数据库上使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM