跟踪对数据库所做的更改

时间:2015-02-17 17:03:55

标签: sql sql-server database version-control

背景:

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

问题:

环顾四周时,我看到有一些工具可供使用:

  • RedGate SQL源代码管理
  • Visual Studio数据库项目

我更想知道这些工具中的任何一个是否会跟踪我的数据库的更改?更具体地说,我有一个TFS服务器,它是我的MVC代码的源代码控制,我可以在TFS中使用其中任何一个吗?它会允许我们从旧版本恢复吗?是否允许多个开发人员同时处理数据库?

3 个答案:

答案 0 :(得分:3)

对于这种类型的工作,ApexSQL Source Control显示为您所需要的一切。使用此SSMS加载项,您可以直接在数据库和所有changes will be tracked in real time上工作。

是的,一些开发人员可以在同一个数据库上同时工作。当一个开发人员处理一个或多个对象时,其他开发人员可以看到哪些对象是什么,并且直到第一个对象未​​完成更改,其他人无法更改该对象,他们将不被允许。 如果在任何情况下,对象更改错误,可以随时恢复以前的版本或任何早期版本。

此加载项具有所有必需的选项和功能,允许开发人员在不损失检查对象更改的时间的情况下工作,因为加载项为他们执行了此操作。你总能看到谁,何时以及发生了什么变化。

答案 1 :(得分:1)

在数据库版本控制空间中工作了5年(作为DBmaestro的产品管理总监)并且作为DBA工作了二十多年,我可以告诉你一个简单的事实,你不能对待数据库处理Java,C#或其他文件时的对象,并将更改保存在简单的DDL脚本中。

原因很多,我只列举一些:

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

还有更多,但我认为你得到了照片。

我发现作品如下:

  1. 使用强制执行的版本控制系统 对数据库对象的签出/签入操作。这将 确保版本控制存储库与代码匹配 签入时,它会在签入中读取对象的元数据 操作而不是手动完成的分离步骤。这也允许 几个开发人员同时在同一个数据库上工作 防止他们意外地覆盖彼此的代码。
  2. 使用影响分析,利用基线作为一部分 比较以识别冲突并确定是否发生变化(何时 比较源控件之间的对象结构 存储库和数据库)是一个真正的变化,起源于 发展或变化源于不同的道路和 然后应该跳过它,例如不同的分支或紧急情况 固定。
  3. 我写的一篇文章发表于here,欢迎您阅读。

答案 2 :(得分:0)

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

但是,您提到的Sql Historian和其他两个系统的常见功能是:使用TFS,能够查看旧版本的db对象,以及同时允许db上的多个用户。