Frage

Lassen Sie uns sagen, ich habe DatabaseA mit TableA, die diese Felder hat. ID, Name

In einer anderen Datenbank, DatabaseB, ich habe TableA, die diese Felder hat. DatabaseID, ID, Name

Ist es möglich, die Einrichtung eine Replikationspublikation, die senden:

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

zu DatabaseB.TableA?

Edit: Der Grund, warum ich frage ist, dass ich mehrere Datenbanken kombinieren muß (mit identischem Schema) in eine einzige Datenbank, mit möglichst geringer Latenzzeit möglich. Replikation schien wie ein guter Anfang (müssen Daten von einem Ort zum anderen replizieren), aber ich bin nur in der Brainstorming-Phase. Ich würde auf jeden Fall offen für Vorschläge, wie dies zu erreichen, ohne die Replikation verwendet wird.

War es hilfreich?

Lösung

Es könnte ein einfacherer Weg, es zu tun, aber das erste, was ich gedacht ist TableA in einer indizierten Sicht auf der Quelldatenbank Einwickeln und dann die Ansicht als Tabelle replizieren (dh type = „indizierte Sicht logbased“) . Ich glaube nicht, dies mit Mergereplikation funktionieren würde, aber.

So, das wäre in etwa wie:

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',
    ...

Big Einschränkung: indizierte Sichten haben viele Anforderungen dass kann nicht für Ihre Anwendung geeignet sein. Zum Beispiel haben bestimmte Optionen jedes Mal, wenn Sie die Basistabelle aktualisieren eingestellt werden.

(Als Reaktion auf die Bearbeitung in Frage ...) Dies wird für die Kombination von mehreren Quellen in eine Tabelle nicht. AFAIK, ein Objekt in einer Abonnementdatenbank kann nur aus einem veröffentlichten Artikel. Und Sie können eine indizierte Sicht auf der Abonnementseite nicht tun, da UNION nicht in einer indizierten Sicht zulässig ist. (Die docs nicht explizit UNION ALL-Zustand ist nicht zulässig, aber es würde mich nicht überraschen, Sie könnten versuchen, es für alle Fälle..) Aber es ist immer noch Ihre persönliche Vertrauen Frage beantworten:. Die Dbid in der replizierten Tabelle würden

Andere Tipps

Aggregieren Sie diese Ereignisse an einem Ort aus mehreren Quellen? Replizieren nur aus einer Hand kommt -. Es ist eine Eins-zu-eins, so die Quellen-ID scheint nicht, wie wäre es viel Sinn machen

Wenn Sie Daten aus mehreren Quellen, möglicherweise verknüpfte Server aggregiert und löst eine bessere Wahl ist, und wenn das der Fall ist, dann sind Sie konnte absolut keine Informationen über die Quelle, die Sie wollen.

Wenn Sie Ihre Frage klären können, den Zweck zu beschreiben, würde es uns helfen, die beste Lösung zu finden.

FROM NEW DETAIL IN FRAGE AKTUALISIERT:

Enthält diese Lösung klingt wie es sein könnte, was Sie brauchen?

  1. Richten Sie AFTER-Trigger auf den Source-Datenbanken, die alle geänderten Zeilen an das zentrale Repository-Datenbank senden, in irgendeiner Art von Tisch zu halten. Diese Zeilen können zusätzliche Spalten enthalten, wie „Source“, „Typ ändern“ (für Einfügen, Löschen, usw.).
  2. Einige zentrale Prozess überwacht den Tisch und verarbeitet neue Zeilen (oder läuft in regelmäßigen Abständen - einmal / Minute, vielleicht), so dass sie in die zentrale Datenbank enthält

Sie könnten einstellen, wie häufig die Überprüfung / Merge-Prozess auf dem Server ausgeführt wird, basierend auf Ihre Bedürfnisse (auch nicht ständig laufen neue Zeilen zu handhaben, wie sie erscheinen, vielleicht sogar mit einem AFTER-Trigger für die Tabelle als auch).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top