2010-11-11 64 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 
    

我承認,無論解決方案是完美的......