Zunächst einmal tut es mir leid, wenn dies ein Duplikat ist. Ich konnte niemanden finden, der diese spezielle Frage ansprach, oder ich hätte sie beim Lesen möglicherweise nicht erkannt. Höchstwahrscheinlich habe ich die falschen Suchbegriffe verwendet, da ich mit der Terminologie nicht allzu vertraut bin.
Wir haben 3 Server:
A . SQL Server
B . Alarmsystem
C . Website + API + Andere
Server B und C müssen ständig eine Verbindung zu Server A herstellen , und es gab mehrere Fälle von Ausfallzeiten, die zu großer Unzufriedenheit der Kunden geführt haben.
Wir möchten Folgendes haben: (verschiedene Buchstaben, um das Kommentieren zu erleichtern, obwohl dies möglicherweise nicht der Fall ist: p)
W . Alarmsystem (mit SQL-Server)
X . Website + API (mit SQL-Server)
Y . Website + API (mit SQL-Server)
Z . Andere (mit SQL-Server)
BEARBEITEN: X und Y sind technisch identisch, aber X hostet normalerweise die Website, und unsere Apps und Lösungen von Drittanbietern stellen normalerweise eine Verbindung zur API auf Server Y her , um sicherzustellen, dass ein Hickup nur über einen Kanal zu spüren ist . Wenn X abstürzen würde, würde Y sowohl die Website als auch die API bedienen, bis X wieder online war und umgekehrt.
Es ist wichtig, dass die SQL-Server synchronisiert sind. Wenn ein Client über die Website (Server X ) eine Änderung in der Datenbank vornimmt und dann das Alarmsystem W aktiviert (für das die Änderung von Bedeutung ist), muss es bereits synchronisiert worden sein.
Jedes System verwendet nur einige der Datenbanken und Tabellen. Um Ressourcen zu sparen, konnten wir nur die wichtigen Daten sofort und den Rest etwa alle paar Stunden synchronisieren. Bearbeiten: keine Option
Wir werden SQL Server 2014 auf allen Servern verwenden (sofern mich nicht jemand anders überzeugt)
- Benötigen wir dazu Software von Drittanbietern ?
- Wir sind offensichtlich daran interessiert, die kostengünstigste Lösung zu verwenden, sowohl in Bezug auf Geld als auch in Bezug auf Ressourcen, aber die Unzufriedenheit unserer Kunden muss um jeden Preis enden. Wir haben nie einen Kunden verloren und beabsichtigen nicht, einen zu verlieren, weil er billig war .
- Müssten wir Trigger für die wichtigen Tabellen verwenden oder sollten wir dies tun?
- Könnten wir Ansichten verwenden ?
- Das heißt; Erstellen Sie auf allen SQL-Servern, die von jedem Server geladen werden, der den neuesten Zeitstempel für diese bestimmte Tabelle hat, die gleichen Ansichten, so dass eine sofortige Synchronisierung erfolgt. Eine echte Synchronisierung wäre immer noch notwendig, aber weniger häufig.
- Ich bin mir nicht sicher, wie das funktionieren würde, aber ich wäre nicht überrascht, wenn jemand dies irgendwann getan und eine Lösung für alle offensichtlichen und weniger offensichtlichen Probleme gefunden hätte.
- Wir haben verschiedene Funktionen , Prozeduren und Jobs , die von Zeit zu Zeit geändert werden. Können diese synchronisiert werden oder muss ich sie manuell aktualisieren (was keine große Sache ist)?
AKTUALISIEREN:
Wir haben Kontakt zu einem Unternehmen aufgenommen, das uns in der Vergangenheit beim Einrichten von Servern und beim Abrufen der richtigen Versionen und Lizenzen geholfen hat. Ihr Vorschlag war der folgende:
- Geben Sie jedem SQL Server eine Kopie der Tabellen, in die Daten gelesen und geschrieben werden.
- Haben repliziert alle Tabellen von den anderen Servern auf jedem Server; von dem es nur lesen kann .
Auf diese Weise kann jeder Server unabhängig arbeiten und auf alle Änderungen zugreifen, die auf den anderen Servern vorgenommen wurden.
Ich bin nicht ganz sicher, wie ich das Löschen von Zeilen erkennen soll , außer durchzugehen und zu sehen, was fehlt, es sei denn, TRIGGERS arbeiten post-synchron in replizierten Tabellen.
EDIT: Ein weiteres Anliegen von mir ist , was etwas ist in der gleichen Tabelle eingefügt passieren würde, auf verschiedenen Servern, während die Replikation nach unten aufgrund von Netzwerkproblemen oder was auch immer. Dann hätten wir 2 Zeilen mit derselben ID , und wir hätten keinen Grund anzunehmen, dass die letztere keine Bearbeitung der ersteren ist (abgesehen von der Tatsache, dass sich die ID nur in 2 von 4 Servern befindet, aber es könnte gut sein in allen 4 sein, wenn das Netzwerk für längere Zeit ausgefallen ist)
Diese Probleme alle ny werden könnten gelöst mehr colums zum Hinzufügen Erstellungsdatum , zuletzt Datum , Insert-ID und global-ID . Aber dann müssten wir auf unserer Website und auch in anderen Systemen so viel ändern, dass wir es vorziehen würden, dies zu vermeiden.
- Gibt es noch andere Hindernisse, denen wir mit dieser Lösung begegnen könnten?
- Irgendwelche besseren Ideen?