AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Was tun bei Verbindungsabbruch
Thema durchsuchen
Ansicht
Themen-Optionen

Was tun bei Verbindungsabbruch

Ein Thema von xaromz · begonnen am 18. Jul 2006 · letzter Beitrag vom 18. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#1

Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 11:59
Datenbank: egal • Zugriff über: egal
Hallo,

ich habe mal eine Frage zur grundsätzlichen Strategie:
Wenn man mit Datenbanken arbeitet, kann es ja immer passieren, dass der Datenbankserver plötzlich nicht mehr erreichbar ist (Netzwerk abgeschmiert, Server abgestürzt...).
Wie ist in so einem Fall die beste Vergehensweise, wenn gerade die Ergebnisse eines Queries durchgegangen werden?

Sollte man, nachdem die Verbindung wieder steht, die Abfrage von vorne beginnen, oder in der Zeile weitermachen, wo man aufgehört hat (dann kann sich aber ja das Ergebnis schon geändert haben)?
Was macht eine Datenbank, wenn z. B. ein Insert/Update-Query nur halb ankommt? Ich hoffe doch, den Müll verwerfen, oder?

Macht Ihr vielleicht alles ganz anders? Ich bin gespannt auf Eure Methoden, mit dieser Situation umzugehen.

Gruß
xaromz
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 12:16
Hallo xaromz,
Zitat von xaromz:
Sollte man, nachdem die Verbindung wieder steht, die Abfrage von vorne beginnen, oder in der Zeile weitermachen, wo man aufgehört hat (dann kann sich aber ja das Ergebnis schon geändert haben)?
Ich denke die Frage hast du dir grade selbst beantwortet.

Zitat von xaromz:
Was macht eine Datenbank, wenn z. B. ein Insert/Update-Query nur halb ankommt? Ich hoffe doch, den Müll verwerfen, oder?
Eigentlich schon. Große DB's arbeiten mit den Commit/RollBack-Verfahren (heißt des so?).
Somit ist eine Transaktiontion in der DB erst gültig, wenn ein Commit gesendet wurde.
Stürzt der DB-Server mal ab, sind die Daten auf dem Stand des letzten Commits.
Bricht die DB-Verbindung weg, is es ähnlich. Das letzte Commit zählt.

Ich hoffe, ich hab nix falsches erzählt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 12:26
Zitat von gmc616:
Ich hoffe, ich hab nix falsches erzählt.
Dies gilt für Datenbanken die das ACID-Eigenschaften besitzt.
Dies sollte für jede "normale" SQL-Datenbank der Fall sein.

Bei Desktopdatenbanken schaut es anders aus. Hier kann sehr wohl ein Verbindungsabbruch zu einer zerschossenen DB oder ungültigen Zustand in der DB führen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 12:26
Hallo,
Zitat von gmc616:
Ich denke die Frage hast du dir grade selbst beantwortet.
Schon klar , dann verändere ich meine Frage: Wenn sowas passiert, sollte man dann sämtliche schon verarbeiteten Werte verwerfen und nochmal von vorne anfangen? Bei meinem aktuellen Projekt erstelle ich für jede Tabellenzeile ein Objekt, ich müsste also alle gelesenen Objekte wieder zerstören und neu erstellen. Da ich ungefär 100 Stellen im Programm habe, wo sowas passiert, wäre ich an einer einfacheren Lösung interessiert. Aber wahrscheinlich ist es wie immer im Leben: Einfache Lösungen gibt es nicht.
Zitat von gmc616:
Eigentlich schon. Große DB's arbeiten mit den Commit/RollBack-Verfahren (heißt des so?).
Ja, das heißt so.
Zitat von gmc616:
Somit ist eine Transaktiontion in der DB erst gültig, wenn ein Commit gesendet wurde.
Stürzt der DB-Server mal ab, sind die Daten auf dem Stand des letzten Commits.
Bricht die DB-Verbindung weg, is es ähnlich. Das letzte Commit zählt.
Da ich bisher keine Transaktionen verwende (ich habe keine abhängigen Queries), habe ich natürlich auch kein Commit, aber ich gehe trotzdem 'mal davon aus, dass eine Datenbank einen Verbindungsabbruch mitten im Query erkennt. Wenn ich nämlich ein DELETE sende und die WHERE-Klausel verloren geht, ist das nicht so lustig .

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 12:33
Zitat von xaromz:
Da ich bisher keine Transaktionen verwende (ich habe keine abhängigen Queries), habe ich natürlich auch kein Commit, aber ich gehe trotzdem 'mal davon aus, dass eine Datenbank einen Verbindungsabbruch mitten im Query erkennt. Wenn ich nämlich ein DELETE sende und die WHERE-Klausel verloren geht, ist das nicht so lustig .
Solche ein Query bekommt die Datenbank gar nicht mit da dies auf tieferer Ebene (vermutlich TCP oder erste Layer darüber) erkannt wird und gar nicht bis zum QueryAnalyser der DB kommen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 13:17
Zitat von Bernhard Geyer:
Solche ein Query bekommt die Datenbank gar nicht mit da dies auf tieferer Ebene (vermutlich TCP oder erste Layer darüber) erkannt wird und gar nicht bis zum QueryAnalyser der DB kommen.
Das halte ich für ein Gerücht.
Woher soll z.B. der TCP-Stack wissen, was in den TCP-Paketen drin ist.

Die Transaktionen müssen schon von der Applikation (in diesem Fall die Datenbenk-Software) verwaltet werden. Die meisten DBMS arbeiten intern auf transaktionsbasis, wovon der Anwender (deine Software) nichts mitbekommt.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#7

Re: Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 13:35
Zitat von xaromz:
Da ich bisher keine Transaktionen verwende (ich habe keine abhängigen Queries), habe ich natürlich auch kein Commit, aber ich gehe trotzdem 'mal davon aus, dass eine Datenbank einen Verbindungsabbruch mitten im Query erkennt. Wenn ich nämlich ein DELETE sende und die WHERE-Klausel verloren geht, ist das nicht so lustig .
Dann arbeitet deine Datenbank bzw die Verbindung/Sitzung mit hoher Wahrscheinlichkeit im AutoCommit-Modus - jedenfalls wenn es sich um ein 'richtiges' DBMS handelt und du erfolgreich Änderungen vornehmen kannst. Das bedeutet, daß das DBMS jeden einzelnen Befehl automatisch selbst in eine Transaktion 'einkapselt'. Lies mal büschen was über Transaktionen, AutoCommit und auch implizite Transaktionen. Und so ganz 'egal' wie du eingangs erwähntest ist die DB natürlich auch nicht - Fileserver-DBs zB verhalten sich deutlich weniger 'gnädig', da kann's dann zB die beliebten 'corrupt indices' setzen.

Die Sorge, daß eine nur 'halb angekommene' Query abgearbeitet wird, ist aber schon 'im Vorfeld' unbegründet, wie Bernhard schon schrieb.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 13:44
Zitat von RavenIV:
Das halte ich für ein Gerücht.
Woher soll z.B. der TCP-Stack wissen, was in den TCP-Paketen drin ist.
Dann ist es halt die Klasse/Modul welches auf TCP aufsetzt und den komplett gültige empfang von SQL-Anweisungen verwaltet. Also Layer 5 des OSI-Referenzmodells
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#9

Re: Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 13:46
Zitat von RavenIV:
Das halte ich für ein Gerücht.
Woher soll z.B. der TCP-Stack wissen, was in den TCP-Paketen drin ist.
Wenn der Befehl aber nur 'halb' ankommt, weil die Verbindung während seiner Übermittlung abreißt, fehlt sozusagen seine 'Terminierung'. Die Engine müßte iü ja auch 'wissen' ob da noch was kommt, oder ob's das jetzt war und sie loslegen soll/kann. Und der Stack 'weiß' zwar nicht was drin ist, aber schon, ob die Übermittlung vollständig ist. Und wenn nicht, geht der Befehl da gar nicht erst raus, sondern es wird eine (dem Szenario entsprechend nicht erfolgreiche) 'Neuverhandlung' versucht. Correct me if I'm wrong...
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Was tun bei Verbindungsabbruch

  Alt 18. Jul 2006, 13:49
Zitat von Bernhard Geyer:
Zitat von RavenIV:
Das halte ich für ein Gerücht.
Woher soll z.B. der TCP-Stack wissen, was in den TCP-Paketen drin ist.
Dann ist es halt die Klasse/Modul welches auf TCP aufsetzt und den komplett gültige empfang von SQL-Anweisungen verwaltet. Also Layer 5 des OSI-Referenzmodells
Hast Du das OSI-Modell durchgelesen?
Es kann nicht Schicht 5 sein. Die weis noch nichts von DB-Transaktionen.
Erst Schicht 7 – Anwendungsschicht kennt das und kann das auch erst machen.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz