22

我们一直在为我们的 SQL 源代码控制寻找可能的解决方案。我刚刚遇到 Red Gates SQL 源代码控制,想知道是否有人实现了它?我将下载试用版并试一试,但只是想看看其他人是否有真正的经验。

一如既往地非常感谢您的意见

--S

4

4 回答 4

26

我已经更新了下面的原始帖子,以反映最新版本的 SQL Source Control (3.0) 和 SQL Compare (10.1) 的变化。

由于这个问题是一年多前提出的,我的回答可能对你没有那么有帮助,但对于目前可能正在评估 SSC 的其他人,我想我会投入两分钱。我们刚开始使用 SQL 源代码控制 (SSC),总体而言,到目前为止我对它相当满意。但它确实有一些怪癖,特别是如果您在共享数据库环境中工作(而不是每个开发人员都在本地工作),特别是在同一数据库中的对象在开发团队之间随意划分的遗留环境中工作。

为了简要概述我们如何在组织中使用该产品,我们在共享环境中工作,我们都对同一个开发数据库进行更改,因此我们将共享数据库附加到源代码控制存储库。每个开发人员负责通过 SQL Server Management Studio (SSMS) 对数据库中的对象进行更改,完成后,他们可以将更改提交到源代码管理。当我们准备部署到 staging 时,build master(我)将数据库代码的开发分支合并到主(staging)分支,然后使用数据库的主分支存储库版本作为源和实时运行 SQL 比较staging 数据库作为目标,SQL Compare 生成必要的脚本来部署对 staging 环境所做的更改。暂存到生产部署的工作方式类似。另一个需要注意的重点是,鉴于我们与其他开发团队共享同一个数据库,我们使用 SSC 的内置功能,允许您按名称、类型等对数据库对象创建过滤器。我们手动在我们特定团队的对象上设置过滤器,排除所有其他对象,这样我们在进行部署时就不会意外提交其他开发团队的更改。

因此,总的来说,它是一个设置和使用相当简单的产品,而且它非常棒,因为您总是在 SSMS 中使用活动对象,而不是存储在单独的源存储库中的断开连接的脚本文件存在失去同步的风险. 这也很好,因为 SQL Compare 为您生成部署脚本,因此您不必担心引入错误,就像您自己创建脚本时一样。由于 SQL Compare 是一个非常成熟和稳定的产品,您可以确信它会为您创建合适的脚本。

话虽如此,但是,到目前为止,我遇到了一些怪癖:

  • SSC 在与数据库服务器通信方面非常健谈,以便跟踪与源代码控制存储库不同步的数据库项目。它每隔几毫秒轮询一次,如果您添加多个开发人员,他们都使用 SSC 处理同一个数据库,您可以想象我们的 dba 不是很高兴。幸运的是,您可以轻松地将轮询频率降低到更可接受的水平,尽管代价是牺牲了对象更改时的响应式视觉通知。
  • 使用对象过滤功能,您无法通过查看 SSMS 中的对象轻松判断哪些对象包含在您的过滤器中。所以你不能确定一个对象是否受源代码控制,这与 Visual Studio 不同,在 Visual Studio 中,图标用于指示源代码控制对象。
  • 对象过滤 GUI 非常笨拙。由于我们在遗留数据库环境中工作,目前我们团队拥有的对象和其他团队拥有的对象之间没有明确的分离,因此为了防止我们意外提交/部署其他团队的更改,我们已经建立了一个过滤方案来明确地包含我们拥有的每个特定对象。正如您可以想象的那样,这变得非常麻烦,并且由于编辑过滤器的 GUI 设置为一次输入一个对象,这可能会变得非常痛苦,尤其是第一次尝试设置您的环境时(我最终编写应用程序来执行此操作)。展望未来,我们正在为我们的应用程序创建一个新模式,以更好地促进对象过滤(无论如何都是一种更好的做法)。
  • 使用共享数据库模型,开发人员可以将任何未决更改提交到源控制数据库,即使这些更改不是他们的。如果您尝试签入这些更改可能不是您自己的更改,而不是您自己的更改,SSC 会向您发出警告。实际上,我发现这是 SSC 最危险的“怪癖”之一。
  • SQL Compare 目前无法共享 SSC 创建的对象过滤器,因此您必须在 SQL Compare 中手动创建匹配过滤器,因此存在不同步的危险。我刚刚将底层 SSC 过滤器文件中的过滤器剪切并粘贴到 SQL 比较项目过滤器中,以避免处理笨重的对象过滤 GUI。我相信下一个版本的 SQL Compare 将允许它与 SSC 共享过滤器,所以至少这个问题只是一个短期的问题。(注意:此问题已在最新版本的 SQL Compare 中得到解决。SQL Compare 现在可以使用 SSC 创建的对象过滤器。)
  • SQL 比较在直接启动时也无法与 SSC 数据库存储库进行比较。它必须从 SSMS 中启动。我相信下一个版本的 SQL Compare 会提供这个功能,所以这又是另一个短期问题。(注意:此问题已在最新版本的 SQL 比较中得到解决。)
  • 有时 SQL Compare 无法创建适当的脚本来将目标数据库从一种状态转换为另一种状态,通常是在您更新非空的现有表的架构的情况下,因此您目前必须编写手动脚本并自己管理流程。幸运的是,这将在 SSC 的下一个版本中通过“迁移脚本”来解决,从产品的早期版本来看,这个新功能的实现似乎是经过深思熟虑和设计的。(注意:迁移脚本功能已正式发布。但是,它目前不支持分支。如果您想使用迁移脚本,您需要运行 sql compare 与您的原始开发代码分支......您签入的那个您的更改...这非常笨拙,并且迫使我以不太理想的方式修改构建过程以解决此限制。希望这将在未来的版本中得到解决。)

总的来说,我对产品以及 Redgate 对用户反馈的响应以及产品的发展方向感到非常满意。该产品非常易于使用且设计精良,我认为在下一两个版本中,该产品可能会为我们提供大部分(如果不是全部)我们需要的东西。

于 2011-10-27T19:37:27.967 回答
12

从开发 -> 测试 -> 生产时,我使用 SQL 比较生成脚本,它为我节省了大量时间。

不过,对于源代码控制,我们使用 SVN 和 ScriptDB ( http://scriptdb.codeplex.com/ )。我主要使用 SQL 脚本的源代码控制来跟踪更改。我认为回滚数据库版本很少(如果有的话)起作用,因为在进行结构更改时数据可能已经更改。

这适用于我们当前的一些项目(最大的是 200 个表和 2000 个存储过程)。这样做的主要原因是成本,因为并非所有团队成员都必须购买 SQL Compare(除非真的需要,否则我会避免向商业项目添加依赖项)。

于 2010-08-25T12:40:37.983 回答
3

我们对 Red Gate 的产品进行了广泛的评估,发现了一些重大缺陷。如果您想查看谁更改了一个对象,那么没有SysAdmin 权限就无法做到这一点。产品需要查看服务器上的跟踪,这需要这些权限。我在一个 5 人以上的团队中,不知道谁有未决的更改会阻止我们使用该产品。

于 2011-04-27T15:29:31.463 回答
1

我刚开始为一家新公司工作,他们的所有项目都使用 Redgate SQL 源代码控制,其中包括一个庞大而复杂的项目。它与 TFS 配合使用可以很好地完成工作。在我看来,唯一的缺点是 SQL Server Management Studio 集成非常不稳定。安装工具时经常发生 SQL Server Management Studio 崩溃。

于 2019-01-15T13:37:31.327 回答