簡體   English   中英

SQL Server復制是否可以在復制的數據中包含源dbid?

[英]Can SQL Server Replication include the source dbid in the replicated data?

假設我有帶有TableA的DatabaseA,它具有以下字段:Id,Name。

在另一個數據庫DatabaseB中,我具有具有以下字段的TableA:DatabaseId,Id,Name。

是否可以設置將發送以下內容的復制發布:

DatabaseA.dbid,DatabaseA.TableA.Id,DatabaseA.TableA.Name

到DatabaseB.TableA?

編輯:我要問的原因是我需要將多個數據庫(具有相同的架構)組合到一個數據庫中,並且延遲盡可能短。 復制似乎是一個很好的起點(需要將數據從一個地方復制到另一個地方),但我只是處於頭腦風暴階段。 我一定會對在不使用復制的情況下完成此操作的建議持開放態度。

您是從多個來源在一處匯總這些事件嗎? 復制僅來自一個源,它是一對一的,因此源ID似乎沒有多大意義。

如果您要匯總來自多個源的數據,也許鏈接服務器和觸發器是一個更好的選擇,並且確實如此,那么您絕對可以包括有關所需源的任何信息。

如果您可以澄清問題以描述目的,則有助於我們找到最佳解決方案。

問題的最新詳細信息:

這個解決方案聽起來像您所需要的嗎?

  1. 在源數據庫上設置AFTER觸發器,該觸發器將任何已更改的行發送到某種保存表中的中央存儲庫數據庫。 這些行可以包含其他列,例如“源”,“更改類型”(用於插入,刪除等)。
  2. 一些中央進程監視表並處理新行(或定期運行-可能是一次/分鍾一次),將其合並到中央數據庫中

您可以根據需要調整檢查/合並過程在服務器上運行的頻率(甚至不斷運行它以處理出現的新行,甚至還可以在該表上使用AFTER觸發器)。

可能有一種更簡單的方法,但是我想到的第一件事是將TableA包裝在源數據庫的索引視圖中,然后將該視圖復制為表(即,type =“基於日志的索引視圖”)。 不過,我認為這不適用於合並復制。

因此,大致類似於:

CREATE VIEW TableA_with_dbid WITH SCHEMABINDING AS
SELECT DatabaseA.dbid, Id, Name FROM TableA

CREATE UNIQUE CLUSTERED INDEX ON TableA_with_dbid (Id) -- or whatever your PK is

EXEC sp_addarticle ...,
    @source_object = 'TableA_with_dbid',
    @destination_table = 'TableA',
    @type = 'indexed view logbased',
    ...

大告誡:索引視圖有很多要求可能不適用於您的應用程序。 例如,每次更新基表時都必須設置某些選項。

(響應您問題中的編輯...)這不適用於將多個源合並到一個表中。 AFAIK,一個訂閱數據庫中的對象只能來自一篇已發表的文章。 而且,由於在索引視圖中不允許使用UNION,因此無法在訂閱方建立索引視圖。 (文檔未明確禁止使用UNION ALL,但這並不會讓我感到驚訝。為防萬一,您可以嘗試一下。)但是它仍然可以回答您的明確問題:dbid位於復制表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM