2010-11-11 72 views
1

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

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

这是正确的做法吗?有没有简单的,基于基础架构的方法? (这是否应该在ServerFault上发布?)

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

回答

0

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

1

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

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

+0

只要你能做出一个数据库别名...和程序打开它。 当用户从数据库中读取数据时执行sp_dbrename会发生什么? – foson 2010-11-12 15:32:26

1

如果你想使用一个存储过程中不同的数据库,你要么需要:

  1. 复制所有的呼叫。丑陋。你会以很多结束:

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

    set @sqlQuery='select * from '[email protected]+'..ExampleTable where...' 
    exec sp_executesql @sqlQuery 
    

我承认,无论解决方案是完美的......