Fehlende Daten bei Übertragung von Server1 auf Server2

Romero

Aktiver Benutzer
Beiträge
46
Hallöchen,

ich stehe gerade vor einem Rätsel, was ich bisher noch nicht aufklären konnte.

Ich habe 2 Server (DB01 & DB02), worauf ich auf Server DB01 eine View erstellt habe, auf Server DB02 eine Tabelle. Diese Tabelle DB02.dbo.TABLE01 lasse ich mittels Job (Ausführungsscript siehe unten) mit Daten aus der DB01.dbo.VIEW01. Dieser Job läuft aller 5min und wird wie folgt ausgeführt:

DB01 => Produktiv-Server
DB02 => Abfrage-Server

INSERT INTO DB02.dbo.TABLE01

SELECT * FROM DB01.dbo.VIEW01

GO

Nun habe ich aber festgestellt, dass zu unterschiedlichen Zeiten bei der Übertragung einige Daten fehlen, welche aber definitiv vorhanden sind.

Nun also die Frage: woran kann es liegen, dass hier Daten nicht übertragen werden (obwohl vorhanden)? Liegt es hier am Statement des INSERT INTO im Job?
Meine laienhafte Vermutung ist, dass die View noch nicht fertig mit laden ist und schon übertragen wird.

Datenmenge beträgt in den 5min so um die 100-150 Zeilen á 10 Spalten.

LG Romero
 
Werbung:
Nun habe ich aber festgestellt, dass zu unterschiedlichen Zeiten bei der Übertragung einige Daten fehlen, welche aber definitiv vorhanden sind.

Schuß ins Blaue: diese Daten wurden in einer anderen Transaction, die zu Begin der Transaction des Kopiervorganges noch nicht commited war, eingegeben. Sowas in der Art, vermutlich.
 
Das würde ich so auch vermuten.
*Schuss zurück ins Grüne* Wie kann ich das umgehen? Also wie kann ich den INSERT-Befehl erst ausführen, wenn "alle" Daten der letzten 5min geladen sind?
 
Vertauschen der beiden Befehle wird es sicherlich nicht sein.
Wie kann ich also das Laden vorab bewerkstelligen?
 
Wie kann ich also das Laden vorab bewerkstelligen?

Das ist alles zu schwamming...

  • das kopieren erfolgt ja offenbar wia CRON, oder wie das entsprechende Tool unter Windows da heißt ...
  • die Inserts erfolgen wie?
  • Du kopierst immer alle Daten von A nach B. Was ist mit Daten, die schon in B sind? Was mit Daten, die in A gelöscht werden? Was mit Daten, die einen PK haben und sich in nicht-PK-Felder via Update geändert haben?

Hängt das mit dem Versuch zusammen, ein Archiv aufzubauen, was wir schon mal besprochen hatten?

Wie auch immer: was weiß ich schon, was Du da genau willst, wie was zusammen funktionieren soll. Dazu kommt: von M$SQL hab ich kaum Ahnung. Aller N Minuten da Daten stupide hinzukopieren ist vermutlich eh nicht das, was Dich/Euch auf Dauer glücklich machen wird. Vielleicht sucht ihr eher etwas wie logical replication - aber vielleicht denke ich auch zu sehr in PostgreSQL-Dimensionen.
 
Mein Ziel ist es, dass ich auf Server1 eine VIEW erstellen lasse, welche Daten aus mehreren Tabellen vom Server1 verarbeitet und berechnet und ich das Ergebnis (für weitere Auswertungen) auf Server2 kopiere. Und das aller 5min.
Und hier gibt es am Ende kleinere Datenverluste, wo nur ca. 98% ankommen. Nicht immer aber schon 4/5 mal am Tag.

Der Ansatzpunkt von akretschmer mit der VIEW-Laden und dann übertragen (INSERT) finde ich schon den richtigen Ansatz, nur fehlt mir hier das Coding dazu, und leider finde ich dazu nix im Web (oder suche hier falsch :().
Daher erhoffe ich mir, dass mir einer weiterhelfen kann.
 
@akretschmer
Die Daten werden von A nach B kopiert. Und die die Daten in B bleiben ja bestehen, da immer die neusten Daten von A (letzten 5min) an B angehangen werden, somit habe ich ja am Ende eine Tabelle B mit allen berechneten und verarbeiteten Daten aus A.
Und ja, es hängt indirekt mit dem Versuch zusammen, "mein" Archiv aufzubauen.
 
Wäre für mich gefühlt zu hoher Aufwand für eine kleine Übertragung berechneter Ergebnisse.
Ich lasse schon die Berechnung der Tabellen-Extrakte auf dem gleichen Server und DB aber bei der Übertragung auf einen Nicht-Produktiven-Server kommt es zu Datenverlusten. Und das wollte ich gern umgehen. Und der Ansatz von dem "erst laden dann kopieren" finde ich verständlich, nur mit der Umsetzung hakt es momentan...
 
Werbung:
Wäre das eine Lösung zum "erst Laden, dann einfügen"?

SELECT * INTO #TempTabelle FROM [Server1].[DB1].[dbo].[Tabelle1]

BEGIN
WAITFOR DELAY '00:00:02'

INSERT INTO [Server2].[DB1].[dbo].[Tabelle1] SELECT * FROM #TempTabelle

DROP TABLE #TempTabelle
END

GO
 
Zurück
Oben