chaos99
Goto Top

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

Content-ID: 189919

Url: https://administrator.de/contentid/189919

Ausgedruckt am: 23.11.2024 um 07:11 Uhr

Biber
Biber 21.08.2012 aktualisiert um 18:06:47 Uhr
Goto Top
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
Chaos99
Chaos99 21.08.2012 um 13:57:10 Uhr
Goto Top
Hallo Biber!

nein ich möchte das nicht ;) garantiert nicht jedesmal wenn sich eine eintragung in der tabelle ändert ;)

Server und Ersatzserver sind verbunden und entsprechend berechtigt ja.

Eine Replikation ist meiner Meinung nach nicht wirklich möglich.
Es handelt sich immerhin (siehe titel) um MSSQL 2008 express.

Mir wäre neu dass der das unterstützt. Ausserdem haben wir keine sonderlich guten erfahrungen mit replikationen gemacht und mein chef ist deswegen dagegen...

Die fleißaufgabe wäre es also in visual studio 2010 mit vb.net sowas selber zu machen.
Also auszulesen wann haben wir neues (wie auch immer ich das mache)
und diese dann gezielt zu übertragen.

wie funktionieren trigger? (okay ich google das mal)

das ganze muss halt entsprechend sicher sein und nahezu synchron.

den batchjob habe ich schon vor monaten implementiert.
genügt dem cheffe nicht...
it-frosch
it-frosch 21.08.2012 um 14:07:49 Uhr
Goto Top
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
Biber
Biber 21.08.2012, aktualisiert am 22.08.2012 um 08:58:14 Uhr
Goto Top
Moin it-frosch,

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.
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
Chaos99
Chaos99 22.08.2012 um 08:47:34 Uhr
Goto Top
Moin liebe Helfer ;)

das ganze konzept mit triggern sieht für mich sehr gut aus.

ich denke damit kann ich mal wieder probieren ihm eine lösung zu zaubern.

als skript kann man ja zumindest viel machen


sollte allerdings der hauptserver abschmieren wird bei uns in den ersatzserver eingespeichert.

wenn ich dann meine trigger auf tabellen des hauptservers habe brauche ich dafür eine lösung...

kann ich trigger von einer tabelle wieder entfernen?


so könnte ich ja quasi eine syntax rausjagen die erstmal die trigger des hauptservers löscht (obwohl das ja in dem sinne nicht mal nötig ist oder?)
und trigger für alle relevanten tabellen des ersatzservers anlegt


gedanken dazu nehm ich gern an ;)

und merci zwischendrin ;)
Biber
Biber 22.08.2012 aktualisiert um 09:06:38 Uhr
Goto Top
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:
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
Chaos99
Chaos99 22.08.2012 um 09:17:58 Uhr
Goto Top
du willst doch wohl nicht im Ernst jedesmal die ganze Tabelle kopieren, wenn sich ein Datensatz oder ein paar Datensätze
geändert haben???

nein das will ich definitiv nicht ;)

Stehen denn "Server" und "Ersatzserver" in Verbindung/sind Datenbank-User von \\Server\DeineDB auf
\\ErsatzServer\DeineDB berechtigt?


Server und Ersatzserver sind über Switch via Gigabit LAN verbunden.
Die SQL Server teilen sich die Nutzer und sind von daher voll aufeinander zugriffsberechtigt.
ich sehe da kein Problem.


Meinen "Eifer" bremst du sicherlich nicht ;)
Ich bin nur wie immer Mädchen für alles und während ich mich mit 5 Projekten simultan bespasse versuche ich ein bisschen gezielten Input zu den Sachen zu bekommen bei denen ich mich suboptimal auskenne ^^


das mit dem drop ist schonmal gut...
MadMax
MadMax 22.08.2012 um 13:27:19 Uhr
Goto Top
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