在同一實例上的不同數據庫之間複製/同步多個表
我有幾個表需要在我們的 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 的備份和恢復。