【问题标题】:Linked server in SSDT project causes database driftSSDT 项目中的链接服务器导致数据库漂移
【发布时间】:2014-04-07 11:36:55
【问题描述】:

我正在使用 SSDT (VS 2012) 来维护和部署我们的数据库。

最近我们在主数据库项目中添加了一个链接服务器,它第一次部署得很好。由于数据库漂移,即将部署到同一个 db-server / 数据库失败,给出错误:

SQL00000:数据库已偏离其注册的数据层应用程序。

对象 [LinkedServer] 已存在于数据库中,但定义不同,不会被更改

注意:出现此错误时,尚未对数据库进行任何更改。

链接服务器配置如下(客户特定数据已删除):

EXEC sp_addlinkedserver   
       @server=N'LinkedServer', 
       @srvproduct=N'',
       @provider=N'SQLNCLI', 
       @datasrc=N'SrcPath';

脚本文件的 Build Action 设置为 Build,并作为架构的一部分进行部署。

我们使用的发布配置文件设置了“当数据库偏离注册版本时阻止发布”。更改此设置不是一种选择,因为我们希望在数据库发生偏移时停止发布。

【问题讨论】:

    标签: database sql-server-2012 linked-server sql-server-data-tools


    【解决方案1】:

    您是否将其添加为预部署脚本?如果是这样,请考虑围绕它编写一些逻辑来检查它是否存在。我想不出我为什么要将它部署为“构建”脚本,因为它会在您每次部署时尝试完全执行上述操作。

    【讨论】:

    • 感谢您的意见。除了将其添加为预部署脚本之外,我没有找到任何其他解决方案。奇怪的是,在 Visual Studio 中,添加新项目并选择 Linked Server 时,上面的脚本等同于 Visual Studio 创建的模板。该模板还将 Build 操作设置为 Build。
    【解决方案2】:

    改用预部署脚本解决了这个问题。虽然,SSDT 中链接服务器的模板是默认创建的,其中 Build Action 设置为 Build。所以我认为应该将链接服务器作为架构的一部分。

    IF NOT EXISTS(SELECT * FROM sys.servers WHERE is_linked = 1 and name = 'LinkedServer')
    BEGIN
    EXEC sp_addlinkedserver   
               @server=N'LinkedServer', 
               @srvproduct=N'',
               @provider=N'SQLNCLI', 
               @datasrc=N'SrcPath';
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      相关资源
      最近更新 更多