Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Ist Replikation mit MSSQL 2014 und zwei rechnern (Master/Slave) realisierbar?
padde77
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

Ist Replikation mit MSSQL 2014 und zwei rechnern (Master/Slave) realisierbar?

beantworten | zitieren | melden

verwendetes Datenbanksystem: MSSQL 2014 Version: ?

Hi,

ich benötige eine Datenbanklösung, welche die Daten auf 2 Datenbanken gleich vorhält.
Es sind 2 Rechner installiert, auf beiden läuft das gleiche Programm. PC2 springt aber nur ein, wenn PC1 nicht mehr antwortet, wird also quasi zum Master.
PC1 schreibt in die DB1. Diese soll die Daten in der DB2 gespiegelt vorhalten, falls PC2 zum Master wird und alle Daten benötigt.
Ist dies über die Replikation realisierbar? Es muss leider auch eine 2014 Version sein, da als OS Win7 verwendet werden muss.
Was passiert eigentlich, wenn PC2 Daten schreibt und irgendwann DB1 wieder kommt? Schreibt die DB2 die zwischenzeitlich veränderten/hinzugefügten Daten automatisch nach DB1?

Und würde die Standard Version des SQL-Servers reichen? Laut MS beharrscht die die Replikation.

Danke für eure Hilfe.

Patrick
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15806
Herkunft: BW

beantworten | zitieren | melden

Eine Replikation im Sinne einer Spiegelung bedeutet, dass bei beiden SQL Server Instanzen exakt die gleichen Daten zur Verfügung stehen.
Ist einer der beiden Server nach einem Verbindungsabbruch wieder Online, wird die Replikation automatisch abgeglichen.

Hierbei kann es auch zu Merge-Fehlern kommen, da Two-Way, die man dann in der Applikation behandeln muss.
Das passiert vor allem, wenn man Ganzzahlen als Key verwendet, auf beiden Seiten Einträge hinzufügt und es dann zur doppelten Nutzung eines Keys kommt.
Daher ist auch allgemein eine GUID einer Integer-ID immer zu bevorzugen.

Wenn Du von einem Master und einer Slave sprichst, dann nehme ich an, dass Du nur auf dem Master schreiben willst und auf dem Master und Slave lesen willst.
Das nennt sich One Way Transactional Replication.

Beide Varianten (Two Way Merge, One Way Replication) kann der SQL Server seit bestimmt über 10 Jahren.
Dass ein Slave bei einem Abbruch zu einem Master wird, das kann der SQL Server IIRC nicht.

Ich persönlich versuche Master-Slave immer zu vermeiden (und wird bei bestimmten Engines auch nur als absoluten Fallback genannt, zB MongoDB (hier soll man wenn möglich mit Replica Sets arbeiten)).

Bedenke, dass Windows 7 kein Serverbetriebssystem ist, wie alle Desktop-Betriebssysteme ein Connection Limit hat und Datenbanken von Microsoft generell kein Support auf Desktop-Betriebssystemen bekommt.
Vermutlich wird allein das Limit der Connections extreme Performance-Nachteile beim Betrieb von Datenbanken auf Windows 7 bringen.
Ich würde zudem nicht ausschließen, dass eine Replikation auf Windows 7 zu Problemen führen kann.
private Nachricht | Beiträge des Benutzers
padde77
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

Hi Abt,

naja, ich habe mich nicht so verständlich ausgedrückt.
Es gibt in dem Sinne keinen Master/Slave, da es immer nur 1 DB geben kann, in die geschrieben wird. Trotzdem muss ich die Daten in beiden DBs vorhalten. Daher sollte es kein Problem mit dem Merge der Daten geben.
Zitat
Beide Varianten (Two Way Merge, One Way Replication) kann der SQL Server seit bestimmt über 10 Jahren.
Dass ein Slave bei einem Abbruch zu einem Master wird, das kann der SQL Server IIRC nicht.
Aber der Express doch nicht, oder? Hab als Minimalversion die Standard gefunden, die das können soll.
Die DB muss da nichts machen, das macht das Programm.
Zitat
Bedenke, dass Windows 7 kein Serverbetriebssystem ist, wie alle Desktop-Betriebssysteme ein Connection Limit hat und Datenbanken von Microsoft generell kein Support auf Desktop-Betriebssystemen bekommt.
Vermutlich wird allein das Limit der Connections extreme Performance-Nachteile beim Betrieb von Datenbanken auf Windows 7 bringen.
Ich würde zudem nicht ausschließen, dass eine Replikation auf Windows 7 zu Problemen führen kann.
Läuft eh nur auf localhost und der Kunde will das nur auf WIN7 am Laufen haben.

Ist dann hier die 2014 Standard zu nehmen?

Danke und Gruß
Patrick
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15806
Herkunft: BW

beantworten | zitieren | melden

Zitat von padde77
Es gibt in dem Sinne keinen Master/Slave, da es immer nur 1 DB geben kann, in die geschrieben wird.
Naja, das ist doch Master-Slave.
Geschrieben werden kann immer nur in den Master; von der Slave wird nur gelesen.

Der Master nimmt alle Änderungen der Datenbank entgegen, validiert diese und führt diese aus.
Der Slave hat einen Stream auf den Master; und da alles bereits validiert ist, müssen die Änderungen nur noch umgesetzt werden (=> Replica).
Zitat von padde77
Aber der Express doch nicht, oder? Hab als Minimalversion die Standard gefunden, die das können soll.
Von der Express Edition hast Du bislang auch nicht gesprochen - aber ja, Replication wird erst ab Standard geboten. Das siehste ja in der Editionsübersicht.
Zitat von padde77
Die DB muss da nichts machen, das macht das Programm.
Die Replikation macht das Programm..?
Das sollte aber Aufgabe der DB Engine/DBMS sein - nicht des Programms.
Zitat von padde77
Läuft eh nur auf localhost und der Kunde will das nur auf WIN7 am Laufen haben.
Localhost und dann DB Replication... what?
Zitat von padde77
Ist dann hier die 2014 Standard zu nehmen?
Das ist kein vollständiger Satz.

Welche Version Du verwenden kannst, das kann ich Dir pauschal auch nicht sagen.
Musst halt schauen, wie eure Anforderungen sind und dementsprechend evaluieren.
private Nachricht | Beiträge des Benutzers
padde77
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

Hi nochmal,

es soll 2 Rechner geben auf welchen das identische Programm läuft. Die beiden Programme überwachen sich gegenseitig. Wenn also Rechner 1 ausfallen würde, soll Rechner 2 dessen Aufgabe übernehmen. Dazu benötigt Rechner 2 aber auch den gleichen Datenbestand aus der DB wie auf Rechner 1. Beide Datenbanken laufen auf den jeweilgen Rechnern, auf denen das Programm auch ausgeführt wird (daher beide localhost).
Wenn also Rechner 2 die Aufgabe von Rechner 1 übernimmt, sollen weiterhin Daten in die DB (in diesem Falle DB2 als localhost) geschrieben werden. Wenn Rechner 1 wieder zurück kommt, ist das Programm dort wieder der Chef. Braucht aber halt auch die Daten, welche auf Rechner 2 in die Datenbank geschrieben wurden. Daher die Frage, ob die Replikation Two-Way ist.
Zitat
Localhost und dann DB Replication... what?
Die DBs auf beiden Rechnern sollen sich syncen, die laufen nicht auf einer extra Instanz.
Zitat
Die Replikation macht das Programm..?
Das sollte aber Aufgabe der DB Engine/DBMS sein - nicht des Programms.
Genau so soll es sein, nur das schreibende Programm kann sich ändern.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15806
Herkunft: BW

beantworten | zitieren | melden

Zitat von padde77

es soll 2 Rechner geben auf welchen das identische Programm läuft.

Warum habt ihr dann keinen zentralen Datenbankserver?
Das ist eine völlig übliche Client-Server-Architektur seit ca. 1970.

Den Rest was Du Dir wünscht entsteht eigentlich nur, weil Du nicht auf bestehende Architekturen zurück greifen willst.
Ergo wirst Du da ziemlich viel selbst basteln müssen (inkl. Konfigurationen an Themen wie Firewall, Ports und Co), solltest Du diese (für diesen Fall haarsträubende) Architektur mit Client To Client/Peer to Peer, wirklich so umsetzen wollen.
private Nachricht | Beiträge des Benutzers
padde77
myCSharp.de - Member



Dabei seit:
Beiträge: 50

Themenstarter:

beantworten | zitieren | melden

Zitat
Warum habt ihr dann keinen zentralen Datenbankserver?
Frag lieber nicht....
Der Kunde besteht darauf, hab da leider keinen Einfluss. Deswegen ja die modernen WIN7 Kisten.
private Nachricht | Beiträge des Benutzers