【问题标题】:Database availability during database update数据库更新期间的数据库可用性
【发布时间】:2010-11-12 07:43:14
【问题描述】:

我有一个来自第 3 方的数据库。他们提供每周更新数据库数据的工具。该工具很旧并且使用 ODBC。更新可以是增量的,也可以删除所有数据库数据然后重新创建数据。更新可能需要几个小时。为了获得高可用性,建议有 2 个 SQL 数据库,并将“活动数据库”设置存储在另一个数据库中,以确定应用程序应该使用两个数据库中的哪一个(而另一个可能正在更新)。

我们遇到的一个问题是:如何在其他数据库的存储过程中引用活动数据库?

这是正确的方法吗?是否有一种简单的、可能基于基础设施的方法? (这应该发布在 ServerFault 上吗?)

注意:除了更新工具之外,数据库是只读的。

【问题讨论】:

    标签: sql-server database data-migration sql-update


    【解决方案1】:

    如果数据库位于不同的服务器上,您可以为该服务器创建一个别名,该别名将重定向到 SQL Server 配置管理器中的另一台服务器。在 SQLNative Client 10.0 配置(或 9.0,如果您使用的是 SQL Server 2005)下,您可以添加一个新别名。

    否则,您始终可以使用 sp_dbrename 重命名数据库,以便您的客户端应用程序在更新 database2 时始终使用 database1。

    【讨论】:

    • 如果您可以为数据库创建别名...并以编程方式切换它。当用户从数据库读取时执行 sp_dbrename 会发生什么?
    【解决方案2】:

    如果您想在存储过程中使用不同的数据库,您需要:

    1. 复制所有调用。丑陋的。你会以很多结尾:

      if @firstDatabase=1
        select * from database1..ExampleTable where ...
      else
        select * from database2..ExampleTable where ...
      
    2. 使用动态查询。不那么丑:

      set @sqlQuery='select * from '+@currentDatabase+'..ExampleTable where...'
      exec sp_executesql @sqlQuery
      

    我承认这两种解决方案都不是完美的......

    【讨论】:

      【解决方案3】:

      如果存储过程发生更改,我会采取在两个数据库中使用某种自动触发器来更新另一个数据库中的存储过程的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-07
        • 1970-01-01
        • 2019-08-30
        • 2020-11-27
        • 2017-02-18
        • 2019-01-17
        • 1970-01-01
        相关资源
        最近更新 更多