RedGate SQL SQL Server 2008 中的源代码控制和同义词

RedGate SQL Source Control and Synonyms in SQL Server 2008

我们一直在使用 RedGate SQL 源代码管理,在 SQL Server 2008 R2 上取得了不同程度的成功。我们长期 运行 遇到过滤器问题,我们还有另一个问题,我希望其他人遇到过并且可以提出修复建议。

我们的 dev->test->prod 部署堆栈包括链接服务器同义词的使用 - 基本上是开发机器上的各个同义词,其名称与测试数据库上的同义词相同,而测试数据库在我们的生产环境中也具有相同的名称。所以在开发中,它可能看起来像这样:

CREATE SYNONYM [dbo].[mySynonym] FOR [LocalDevDb].[Database].[Schema].[object]

在test/qa中:

CREATE SYNONYM [dbo].[mySynonym] FOR [TestServerDb].[Database].[Schema].[object]

最后,生产:

CREATE SYNONYM [dbo].[mySynonym] FOR [ProductionDb].[Database].[Schema].[object]

为了避免同义词的冲突(因为大家可以看到,服务器名称不同,但全名的其余部分是相同的),我们尝试将这些排除在SQL 使用过滤器对提交进行源代码控制。

但是,这样做也会导致使用同义词的任何对象也被忽略。我们现在正在通过根本不检查同义词来解决这个问题,但显然这是不可持续的。

这是设计使然吗?还有其他人看到过这种过滤行为吗?

编辑 - 这种工作流程和同义词的使用是由 RG 支持人员建议的,作为克服部署和同步问题的一种方法,我们在具有完整链接服务器名称的环境与环境之间不同的对象(或在某些情况下根本不需要,因为在生产中位于不同服务器上的数据库可能在开发或测试中位于同一主机上)

事实证明,当您过滤同义词对象时,默认情况下同义词依赖项会被忽略。所以解决方案是编辑 C:\Users\%UserName%\AppData\Local\Red Gate\SQL Source Control 3\ 的 OptionStore.xml 文件,将 IgnoreSynonymDependencies 元素从 false 修改为 true。请记住,必须为要显示其同义词依赖关系的每个数据库完成此操作。

另一种选择是将同义词与依赖项一起部署。

默认情况下 SQL 源代码管理使用 "Ignore Server and Database name in Synonyms" 选项。这允许您提交同义词(及其依赖项),然后当其他开发人员选择同义词并为他们的环境编辑它时 - db name/server 更改将被源代码管理忽略。

这里有更多信息http://documentation.red-gate.com/display/SC11/Setting+project+options