Sql-Server

在同一實例上的不同數據庫之間複製/同步多個表

  • November 1, 2012

我有幾個表需要在我們的 SQL Server 2008 集群中的多個數據庫之間進行複制/同步。

我知道可以在多個實例之間進行複制,但我正在尋找在特定數據庫表之間的同一實例中的複製或同步。

複製/同步應該每半小時左右發生一次,但我不介意它經常發生。

我不能使用 DROP 目標表和 INSERT(複製)源表,因為有很多約束。

這樣做的原因是不在應用層管理並同時寫入 2 個不同的數據庫。

例子:

DB1 有 T1、T2 和 T3——這些都被應用程序不斷更新,APP1 在 DB1 上執行。

DB2 需要始終擁有 T1 的更新副本,此外,還有一個不同的應用程序,APP2 僅在 DB2 上執行。

DB1 和 DB2 都位於同一個實例 INST1 上。

是否可以將 T1、T2 和 T3 從 DB1 複製到 DB2?

首先,SQL Server 的複制功能可以在同一實例上的不同數據庫之間設置。

設置和管理 SQL Server 複製可能比您想要的要多。有很多決定需要做出(什麼的複制?所有列還是其中一些?所有行還是其中一些?我要索引目標表嗎?某些類型的複制需要更改底層數據模型。如果您不控制應用程序的原始碼,是否可以更改數據模型?等等),複製可能會中斷並且可能暫時不會被注意到,日誌文件可能會意外增長.

使用觸發器,您必須在基礎表更改的情況下維護觸發器程式碼。如果觸發器停止工作會發生什麼?你如何重新同步表?這需要多長時間?等等等等。

如評論中所述,複製的一種替代方法是使用視圖。這可能意味著在基表(T1、T2、T3)因任何原因發生更改的情況下維護程式碼。因此,意見將是我的第二個建議。

我的第一個建議是使用“同義詞”功能來簡單地引用原始表格。如果您使用視圖或同義詞,數據將只儲存在一個地方(DB1),因此無需擔心數據副本之間的同步更改。

這裡可能的負面影響(對於視圖或同義詞)是 DB2 實際上不包含 T1 數據,因此 DB2 的備份和恢復(到測試或開發伺服器)也需要 DB1 的備份和恢復。

引用自:https://serverfault.com/questions/207794