Transaction ja/nein

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Transaction ja/nein

Beitrag von Manfred »

Hi Leute,
folgendes Szenario

Code: Alles auswählen

INSERT INTO wartungsarten (id,bez,intkm, intzeit)
VALUES ('498bbb21-9d10-40c8-aa18-9106c52742f8','Test2',10000,5);
INSERT INTO wartungsarten2fahrzeugtypen (id,idkfztyp,idwartart)
VALUES ('be51ff80-2c21-40c8-9d92-f12e85c63f39','5c880ae5-0e30-4336-862c-0b4648b42cbe','498bbb21-9d10-40c8-aa18-9106c52742f8');
INSERT INTO wartungsarten2fahrzeugtypen (id,idkfztyp,idwartart)
VALUES ('c29e45d7-8634-420a-a247-f40492333d6b','746a5062-e0f1-4559-ad4d-485c76e32850','498bbb21-9d10-40c8-aa18-9106c52742f8')
Sollte man sowas in ein Transaction packen, oder ist das noch zu harmlos?
Und wenn ja, was passiert denn dann überhaupt und wie müßte ich auf Probleme reagieren?
Wie verhält sich das mit den SAVEPOINTS?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Transaction ja/nein

Beitrag von UliTs »

Manfred hat geschrieben: Di, 30. Nov 2021 16:21 ...
Sollte man sowas in ein Transaction packen, oder ist das noch zu harmlos?
Und wenn ja, was passiert denn dann überhaupt und wie müßte ich auf Probleme reagieren?
...
Wenn Du das innerhalb einer Transaction durchführst, wird es entweder vollständig oder gar nicht ausgeführt. Das hilft sehr, Daten konsistent zu halten. Insbesondere, wenn dabei verschiedene Tabellen geändert werden.
Wenn es zu einem Fehler kommt, reagierst Du genauso wie sonst auch. :D .
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Transaction ja/nein

Beitrag von Manfred »

Nee,
das ist für mich jetzt neu und ich habe eigentlich überhaupt noch nicht auf sowas reagiert. Ich wollte erstmal wissen,was es da überhaupt für Möglichkeiten gibt. Wie ich in Joachims Buch gesehen habe gibt es Rollback und Savepoints usw. Aber wie geht man mit sowas um, wann nutzt man was?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Transaction ja/nein

Beitrag von UliTs »

Du hast doch sicher in der Vergangenheit auf Fehlermeldung reagiert, wenn Du etwas nicht speichern konntest. Genau das meinte ich.
Wenn Du eine Transaction startest, kann es sein, dass Du sie selbst abbrechen willst. Dafür ist der Rollback-Befehl gedacht.
Savepoints kenne ich nicht.
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: Transaction ja/nein

Beitrag von nightcrawler »

in Deinem Fall einfach ein BEGIN TRANSACTION oben und ein COMMIT unten.
Bei längeren Transaktionen kannst Du zB eine Bedingung prüfen und entsprechend die Transaktion rückgängig machen (konto1 +50 EUR, konto2-50 EUR, falls Konto2<0 dann ROLLBACK).
Savepoints kann man bei sehr langen Transaktionen mit vielen Bedingungen nutzen, um nur teilweise zurückzufahren.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Transaction ja/nein

Beitrag von Manfred »

aha,
ich hatte gedacht, Rollback wäre dafür dem Server zu sagen was er machen soll, wenn es nicht klappt. Was macht denn der Server automatisch, wenn die Transaction nicht bis zum Ende klappte?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Transaction ja/nein

Beitrag von UliTs »

ein RollBack 8) .
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Transaction ja/nein

Beitrag von Manfred »

Du hast aber oben von dem Rollback Befehl geschrieben und da war ich der meinung das der "händisch" gemacht wird. Also nicht vom Server sondern von der Applikation
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 996
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Transaction ja/nein

Beitrag von HaPe »

Du hast aber oben von dem Rollback Befehl geschrieben und da war ich der meinung das der "händisch" gemacht wird
Ja, einfach indem man nach dem Erkennen eines Fehlers/Problems in deiner Applikation den Befehl ROLLBACK absetzt.
Der sorgt dann dafür dass der Server wieder den Zustand vor dem BEGIN TRANSACTION herstellt 8)

Vergleichbar mit einem SnapShot einer Virtualisierung und dann wieder zurück auf den Zustand zum Zeitpunkt vor dem SnapShot. Die Applikation muss nicht wissen was zu tun ist, das weiß die Virtualisierung und in deinem Fall der ADS.

Das sollte ähnlich für alle SQL-Server gelten: https://docs.microsoft.com/de-de/sql/re ... rver-ver15
--
Hans-Peter
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Transaction ja/nein

Beitrag von Manfred »

also bei INSERT ist es so:
Ich habe 4 Sätze in 2 tabellen anhängen wollen und in dem letzten Insert einen Fehler eingebaut. Das Ergebnis war, das er wohl zuerst alles ausgeführt hat bis zum Fehler und dann alle Insert geleert und gelöscht hat (DBF). Damit kann iche rstmal gut leben. Jetzt werde ich mal sehen, wie er bei UPDATE reagiert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: Transaction ja/nein

Beitrag von Marcus Herz »

Es gibt auch das für SQL Scripte, ähnlich einer SEQUENCE in Xbase. In der Doku steht noch mehr bruachbares

Code: Alles auswählen

TRY
BEGIN TRANS;

.....

COMMIT;

CATCH ALL
ROLLBACK WORK;
// evtl. Fehlerhandling wegschreiben
insert into log(...) values (....)
FINALLY
// Erfolg schreiben

END TRY;
Da gibt es viele Scenarien dafür
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Antworten