Wie wirkt sich dies auf die Daten aus, die Schleifen mit Rollback-Transaktion verwenden?

8
%Vor%

Diese gespeicherte Prozedur wird jeden Tag mit einem Scheduler ausgeführt und die Daten werden über das Netzwerk übertragen. Wenn diese gespeicherte Prozedur ausgeführt wird und dann während des Ausführungsprozesses, tritt plötzlich ein Netzwerk-Timeout auf. Dadurch wird jede Zeile ausgeführt, die über das Netzwerk an den anderen Server gesendet wird.

Jetzt ist mein Problem:
  • Wie wirkt sich dies auf die Daten aus, die die Rollback-Transaktion innerhalb der Schleife aufrufen?
  •     
  • Wird es alle Zeilen erneut lesen und es zum Einfügen an den Server senden oder es wird nur die Zeile gelesen, in der es während der Ausführung fehlschlägt?

Brauchen Sie einen Rat. Danke

    
Androidz 18.06.2013, 02:45
quelle

4 Antworten

6

Sie könnten versuchen mit der verteilten Transaktion zu beginnen. Verteilte Transaktion ist in diesem Fall eine perfekte Lösung für verteilte Transaktionen wurden entworfen, um zwei oder mehr Server zu umfassen. Bei einer Transaktion, selbst wenn das System abstürzt, oder wenn ein Stromausfall auftritt, kann das System weiterhin in den konsistenten Zustand zurückkehren.

%Vor%

Bei verteilten Transaktionen müssen Sie den Cursor nicht verwenden. In Ihrem Fall ist es besser, Parallelitätsprobleme zu vermeiden, indem Sie eine temporäre Tabelle erstellen. Der Grund dafür ist: Die INSERT-Anweisung kann einige Zeit dauern, und während sie Daten einfügt, kann Ihre Tabelle von einem anderen Benutzer aktualisiert werden, und die darauf folgende Update-Anweisung kann falsche Zeilen aktualisieren.

%Vor%     
Khanh TO 22.06.2013, 09:11
quelle
3

Wenn ich dich richtig verstehe. TRY / CATCH sollte dir helfen -

%Vor%     
Devart 20.06.2013 05:24
quelle
1

Ich denke, du bist am falschen Ort verwirrt,

@@ fetch_status

hier, 0 = The FETCH statement was successful.

So lange, bis der Abruf erfolgreich ist, wird die Schleife fortgesetzt, und wenn irgendein Fehler auftritt, wird sie mit allen Zeilen des erstellten Cursors enden. Und wenn kein Fehler aufgetreten ist

Sie sind logisch richtig, und es wird gut funktionieren, wenn die CursorSale richtig definiert ist, an der richtigen Stelle ..

Weitere Ideen finden Sie im obigen Link

Ich hoffe, dies wird tun ..

    
MarmiK 20.06.2013 12:14
quelle
0

Ich würde vorschlagen, anstatt jeden Datensatz zu loopen, den Einsatz in Chunks zu machen. Wie 5000 Datensätze gleichzeitig, wenn es ein automatisierter Job ist, dann wäre dies machbar.

Hier ist ein Link, den ich gefunden habe, aber im Grunde genommen würdest du jedes Mal Top 5000 machen, wenn du oben liegst. Ich stelle mir vor, wenn Sie einen Job haben, der einen Cursor auf jeden Datensatz für eine Einfügung führt, wird es wahrscheinlich sehr teuer.

Ссылка

    
mgmedick 27.06.2013 03:15
quelle