MSSQL 2008 Express Tabellen kopieren bzw low level Copy
Hallo,
wir nutzen ein Programm dass uns in regelmässigen Abständen Werte ausliest und diese in SQL ablegt.
Dazu gibt es je nach Wert-typ verschiedene Tabellen.
Die Ablage erfolgt auf einem Hauptserver.
Es gibt noch einen Ersatzserver der ebenfalls aktuell gehalten werden soll (am besten permanent)
Wie bekomme ich die neu eingetragenen Werte am geschicktesten in den Ersatzserver (identische Struktur)
Der Daten Durchfluss soll möglichst gering gehalten werden.
D.h. komplette Datenbank umkopieren ist bei unsrer Struktur quasi Selbstmord.
Habe ich eine Möglichkeit herauszufinden welche Einträge neu sind bzw welche Tabellen bearbeitet wurden?
auf diese Weise könnte ich ja einen SQl Auftrag anschmiessen ala "tabelle bearbeitet => kopiere tabelle um"
Über Hilfestellung würde ich mich sehr freuen.
MfG Christian
wir nutzen ein Programm dass uns in regelmässigen Abständen Werte ausliest und diese in SQL ablegt.
Dazu gibt es je nach Wert-typ verschiedene Tabellen.
Die Ablage erfolgt auf einem Hauptserver.
Es gibt noch einen Ersatzserver der ebenfalls aktuell gehalten werden soll (am besten permanent)
Wie bekomme ich die neu eingetragenen Werte am geschicktesten in den Ersatzserver (identische Struktur)
Der Daten Durchfluss soll möglichst gering gehalten werden.
D.h. komplette Datenbank umkopieren ist bei unsrer Struktur quasi Selbstmord.
Habe ich eine Möglichkeit herauszufinden welche Einträge neu sind bzw welche Tabellen bearbeitet wurden?
auf diese Weise könnte ich ja einen SQl Auftrag anschmiessen ala "tabelle bearbeitet => kopiere tabelle um"
Über Hilfestellung würde ich mich sehr freuen.
MfG Christian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189919
Url: https://administrator.de/contentid/189919
Ausgedruckt am: 23.11.2024 um 07:11 Uhr
8 Kommentare
Neuester Kommentar
Moin Chaos99,
du willst doch wohl nicht im Ernst jedesmal die ganze Tabelle kopieren, wenn sich ein Datensatz oder ein paar Datensätze geändert haben???
Stehen denn "Server" und "Ersatzserver" in Verbindung/sind Datenbank-User von \\Server\DeineDB auf \\ErsatzServer\DeineDB berechtigt?
Es wären alle möglichen Lösungen von Triggern bis Replikation denkbar- aber natürlich nur dann, wenn die Datenbanken "Verbindbar" sind.
Und eine entscheidende Frage ist zusätzlich, wie viel oder wie wenig die "Hauptserver"-Datenbank belastet werden darf - wenn dieser Server keine weiteren Zeitaufwände haben darf/haben sollte, dann muss der Datenabgleich eben asynchron/zeitversetzt per Batchjob meinetwegen nachts zwischen 03:07h und 03:23h stattfinden und nicht in Quasi-Echtzeit bei jedem Datensatz-Update im Operativsystem.
Grüße
Biber
du willst doch wohl nicht im Ernst jedesmal die ganze Tabelle kopieren, wenn sich ein Datensatz oder ein paar Datensätze geändert haben???
Stehen denn "Server" und "Ersatzserver" in Verbindung/sind Datenbank-User von \\Server\DeineDB auf \\ErsatzServer\DeineDB berechtigt?
Es wären alle möglichen Lösungen von Triggern bis Replikation denkbar- aber natürlich nur dann, wenn die Datenbanken "Verbindbar" sind.
Und eine entscheidende Frage ist zusätzlich, wie viel oder wie wenig die "Hauptserver"-Datenbank belastet werden darf - wenn dieser Server keine weiteren Zeitaufwände haben darf/haben sollte, dann muss der Datenabgleich eben asynchron/zeitversetzt per Batchjob meinetwegen nachts zwischen 03:07h und 03:23h stattfinden und nicht in Quasi-Echtzeit bei jedem Datensatz-Update im Operativsystem.
Grüße
Biber
Hallo Chaos99,
Trigger sind vereinfacht gesagt "SQL Scripte" die bei einem bestimmte Ereignis einer Tabelle (Insert, Update, Delete) ausgelöst werden.
Biber meinte, dass du z.B. auf die Tabelle einen Insert und Update Trigger setzen könntest die die eingefügten bzw. geänderten Datensätze in die andere DB übertragen.
grüße vom it-frosch
Trigger sind vereinfacht gesagt "SQL Scripte" die bei einem bestimmte Ereignis einer Tabelle (Insert, Update, Delete) ausgelöst werden.
Biber meinte, dass du z.B. auf die Tabelle einen Insert und Update Trigger setzen könntest die die eingefügten bzw. geänderten Datensätze in die andere DB übertragen.
grüße vom it-frosch
Moin it-frosch,
Danke fürs Erläutern.
Ergänzend zu der vom Cheffe gestellten Aufgabe:
Sollten die beiden Server sowohl eine Replikationslösung wg. unterschiedlicher Versionen verweigern und auch nicht "verbindbar" sein...
-> dann würde ich mich weigern, auf die "Quasi-synchron-Daten"-Anforderung einzugehen.
Denn dann bleibt unterm Strich nur ein nächtliches Backup/Restore oder ein Attach/Detach und Transport via USB-Stick oder irgendeine ähnliche Blumenladen-Lösung.
In diesem Fall wäre es 2708x sinnvoller, via Trigger einen Satz "Schattentabellen" mit den historisierten Daten auf demselben Server befüllen zu lassen und davon regelmäßg ein Backup zu ziehen oder auf CD zu brennen.
Grüße
Biber
Zitat von @it-frosch:
Biber meinte, dass du z.B. auf die Tabelle einen Insert und Update Trigger setzen könntest die die eingefügten bzw.
geänderten Datensätze in die andere DB übertragen.
Jepp, das meinte Biber. Und ich würde auch einen ON DELETE-Trigger einbauen.Biber meinte, dass du z.B. auf die Tabelle einen Insert und Update Trigger setzen könntest die die eingefügten bzw.
geänderten Datensätze in die andere DB übertragen.
Danke fürs Erläutern.
Ergänzend zu der vom Cheffe gestellten Aufgabe:
Sollten die beiden Server sowohl eine Replikationslösung wg. unterschiedlicher Versionen verweigern und auch nicht "verbindbar" sein...
-> dann würde ich mich weigern, auf die "Quasi-synchron-Daten"-Anforderung einzugehen.
Denn dann bleibt unterm Strich nur ein nächtliches Backup/Restore oder ein Attach/Detach und Transport via USB-Stick oder irgendeine ähnliche Blumenladen-Lösung.
In diesem Fall wäre es 2708x sinnvoller, via Trigger einen Satz "Schattentabellen" mit den historisierten Daten auf demselben Server befüllen zu lassen und davon regelmäßg ein Backup zu ziehen oder auf CD zu brennen.
Grüße
Biber
Moin Chaos99,
nicht, dass ich deinen Eifer bremsen will, aber...
-> in meinem ersten Kommentar stehen so ein, zwei Zeilen, die mit einem "?" enden.
Kannst du darauf denn antworten?
bei Datenbankspielereien habe ich schon ganz gern ein bisschen festen Boden unten den Füssen.
Eine Frage kann ich aber pauschal beantworten:
Alles, was du mit CREATE erzeugen kannst, lässt sich mit einem DROP auch wieder rückstandsfrei entsorgen.
Trigger lassen sich zusätzlich auch Enablen/Disablen, d.h. deaktivieren.
Grüße
Biber
nicht, dass ich deinen Eifer bremsen will, aber...
-> in meinem ersten Kommentar stehen so ein, zwei Zeilen, die mit einem "?" enden.
Kannst du darauf denn antworten?
bei Datenbankspielereien habe ich schon ganz gern ein bisschen festen Boden unten den Füssen.
Eine Frage kann ich aber pauschal beantworten:
kann ich trigger von einer tabelle wieder entfernen?
Bei Datenbankobjekten ist die Welt noch ganz einfach.Alles, was du mit CREATE erzeugen kannst, lässt sich mit einem DROP auch wieder rückstandsfrei entsorgen.
Trigger lassen sich zusätzlich auch Enablen/Disablen, d.h. deaktivieren.
Grüße
Biber
Hallo Christian,
nicht ganz so aktuell aber dafür wahrscheinlich etwas einfacher wäre noch das LogShipping. Da werden einfach die Sicherungen vom Transaktionslog zum Ersatzserver übertragen und dort eingelesen. Wird in anderen als der Expreß-Edition von SQL Server unterstützt, dürfte aber auch bei Expreß relativ leicht zu automatisieren sein. Wie es geht findet man z.B. in einem Artikel auf inside.sql.
Gruß, Mad Max
nicht ganz so aktuell aber dafür wahrscheinlich etwas einfacher wäre noch das LogShipping. Da werden einfach die Sicherungen vom Transaktionslog zum Ersatzserver übertragen und dort eingelesen. Wird in anderen als der Expreß-Edition von SQL Server unterstützt, dürfte aber auch bei Expreß relativ leicht zu automatisieren sein. Wie es geht findet man z.B. in einem Artikel auf inside.sql.
Gruß, Mad Max