我有来自第三方的数据库。它们提供了每周更新数据库数据的工具。该工具很老,使用ODBC。更新可以是增量更新,也可以删除所有数据库数据,然后重新创建数据。更新可能需要几个小时。为了获得高可用性,建议有2个SQL数据库,并在另一个数据库中存储“活动数据库”设置,以确定应用程序中应该使用哪两个数据库(而另一个可以更新)。
我们遇到的一个问题是:如何在其他数据库的存储过程中引用活动数据库?
这是正确的做法吗?有一种简单的,可能基于基础设施的方法吗? (这应该发布在ServerFault上吗?)
注意:除了更新工具之外,数据库是只读的。
答案 0 :(得分:1)
如果数据库位于不同的服务器上,则可以为服务器创建别名,该别名将重定向到SQL Server配置管理器中的其他服务器。在SQLNative Client 10.0配置下(如果您在SQL Server 2005中,则为9.0),您可以添加新别名。
否则,您始终可以使用sp_dbrename重命名数据库,以便在更新database2时客户端应用程序始终使用database1。
答案 1 :(得分:1)
如果要在存储过程中使用不同的数据库,则需要:
复制所有通话。丑陋。你会以很多结束:
if @firstDatabase=1
select * from database1..ExampleTable where ...
else
select * from database2..ExampleTable where ...
使用动态查询。不那么难看:
set @sqlQuery='select * from '+@currentDatabase+'..ExampleTable where...'
exec sp_executesql @sqlQuery
我承认这两种解决方案都不完美......
答案 2 :(得分:0)
如果更改了存储过程,我会采用在两个数据库中使用某种自动触发器来存储过程来更新其他数据库中的存储过程的方法。