Rainer Budde
2005-07-12 11:10:25 UTC
Hallo,
ich schreibe ein Programm das die Datenbestände von min. 2 SQL Servern
abgleichen soll. Die Tabellenstruktur ist auf beiden Servern identisch. Es
läuft im Prinzip folgendermaßen ab.
1. Hole alle Daten aus einer Tabelle aus SQL Server A
2. Vergleiche Daten der Tabelle aus SQL Server A mit der Tabelle aus SQL
Server B
a. Füge ggf. neue Datensätze der Tabelle auf SQL Server B hinzu
b. Lösche ggf. nicht mehr gebrauchte Datensätz der Tabelle auf SQL
Server B
c. Aktualisiere die Datensätze der Tabelle auf SQL Server B
3. Führe ein Update auf SQL Server B aus
Alle Schritte passieren in einem Rutsch und was viel wichtiger ist
Tabellenweise, d.h. ich knöpfe mir erst eine Tabelle vor und lasse alle
Schritte durchlaufen und dann die nächste Tabelle (die evtl. sogar von der
vorherigen abhängig ist). Genau das ist auch mein Problem! Da die Tabellen
sehr unterschiedlich untereinander verknüpft sind und auch noch eine
Referentielle Integrietät beinhalten kommt es zum Beispiel beim Löschen oder
Hinzufügen zu Fehlermeldungen.
Genau hier kann ich die Prüfung der RI nicht gebrauchen, da ich im nächsten
Schritt die abhänige Tabelle sowieso überarbeite und alle fehlenden Infos
eintragen werde (Natürlich mit Hilfe von Transaktionen über mehrere
Tabellen). Jetzt habe ich gelesen das ich mit Hilfe von ALTER TABLE WITH
NOCHECK die Referenzielle Integrität deaktivieren kann. Dazu habe ich noch
einige Fragen:
1. Hat jemand Erfahrung mit der Geschwindigkeit des "Alter Table WITH
NOCHECK" gemacht?
2. Wenn ich so vorgehe:
a) Start Transaktion
b) Alter Table WITH NOCHECK
c) Aktualisiere Daten auch über mehrere Tabellen
d) Alter Table WITH CHECK
e) Commit Transaktion
Ist das eine gute Variante und decken die Transaktionen auch das Alter TABLE
WITH NOCHECK ab?
3. Kann ich ALTER TABLE WITH NOCHECK ohne Probleme ausführen oder muss ich
exklusiven Zugriff erstellen?
4. Gibt es vielleicht eine bessere Variante (außer das hier und die RI
Rules)?
Danke Euch
Gruß Rainer
ich schreibe ein Programm das die Datenbestände von min. 2 SQL Servern
abgleichen soll. Die Tabellenstruktur ist auf beiden Servern identisch. Es
läuft im Prinzip folgendermaßen ab.
1. Hole alle Daten aus einer Tabelle aus SQL Server A
2. Vergleiche Daten der Tabelle aus SQL Server A mit der Tabelle aus SQL
Server B
a. Füge ggf. neue Datensätze der Tabelle auf SQL Server B hinzu
b. Lösche ggf. nicht mehr gebrauchte Datensätz der Tabelle auf SQL
Server B
c. Aktualisiere die Datensätze der Tabelle auf SQL Server B
3. Führe ein Update auf SQL Server B aus
Alle Schritte passieren in einem Rutsch und was viel wichtiger ist
Tabellenweise, d.h. ich knöpfe mir erst eine Tabelle vor und lasse alle
Schritte durchlaufen und dann die nächste Tabelle (die evtl. sogar von der
vorherigen abhängig ist). Genau das ist auch mein Problem! Da die Tabellen
sehr unterschiedlich untereinander verknüpft sind und auch noch eine
Referentielle Integrietät beinhalten kommt es zum Beispiel beim Löschen oder
Hinzufügen zu Fehlermeldungen.
Genau hier kann ich die Prüfung der RI nicht gebrauchen, da ich im nächsten
Schritt die abhänige Tabelle sowieso überarbeite und alle fehlenden Infos
eintragen werde (Natürlich mit Hilfe von Transaktionen über mehrere
Tabellen). Jetzt habe ich gelesen das ich mit Hilfe von ALTER TABLE WITH
NOCHECK die Referenzielle Integrität deaktivieren kann. Dazu habe ich noch
einige Fragen:
1. Hat jemand Erfahrung mit der Geschwindigkeit des "Alter Table WITH
NOCHECK" gemacht?
2. Wenn ich so vorgehe:
a) Start Transaktion
b) Alter Table WITH NOCHECK
c) Aktualisiere Daten auch über mehrere Tabellen
d) Alter Table WITH CHECK
e) Commit Transaktion
Ist das eine gute Variante und decken die Transaktionen auch das Alter TABLE
WITH NOCHECK ab?
3. Kann ich ALTER TABLE WITH NOCHECK ohne Probleme ausführen oder muss ich
exklusiven Zugriff erstellen?
4. Gibt es vielleicht eine bessere Variante (außer das hier und die RI
Rules)?
Danke Euch
Gruß Rainer