Wiederherstellen von Verbindungen (FireDAC)

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Arbeiten mit Verbindungen (FireDAC)


In diesem Thema wird beschrieben, wie in einer instabilen Umgebung gearbeitet wird. FireDAC ermöglicht, dass eine Anwendung nach einem Verbindungsfehler wiederhergestellt werden kann.

Allgemeine Informationen

Eine Datenbankanwendung kann in einer instabilen Umgebung arbeiten, in der die Verbindung zum Netzwerk physisch unterbrochen sein kann oder der DBMS-Server neu gestartet wurde. Die Anwendung muss von solchen Unterbrechungen nahtlos wiederhergestellt werden und die Kommunikation mit dem DBMS fortsetzen können.

Die automatische Verbindungswiederherstellung von FireDAC ermöglicht die Ermittlung einer abgebrochenen Verbindung und die ordnungsgemäße Reaktion auf diese Situation sowie die Wiederherstellung der Verbindung. Der Verbindungsabbruch wird nur erkannt, wenn eine bestimmte DB-Aktion ausgeführt wird, wie z. B. Open, ExecSQL oder Ping. Der DBMS-Treiber löst in diesem Fall eine EFDDBEngineException mit Kind = ekServerGone aus.

Am einfachsten lässt sich mit der Methode TFDCustomConnection.Ping ein Verbindungsstatus überprüfen und/oder die Verbindung aktiv halten. Die Ping-Methode kann sogar verwendet werden, wenn eine Verbindung geschlossen ist, um festzustellen, ob eine Verbindung hergestellt werden kann.

Bekannte Einschränkungen:

DBMS Beschreibung
Advantage Database Wird für eine lokale freie Verbindung nicht unterstützt.
dbExpress-Brückentreiber
  • FireDAC kann ggf. ekServerGone nicht ermitteln.
  • Die Ping-Methode wird nicht unterstützt.
Informix DirectExecute muss auf True gesetzt werden.
Microsoft Access Nicht unterstützt.
MySQL Um Aufrufverzögerungen beim Verbindungsabbruch mit dem Netzwerk so gering wie möglich zu halten, sollten Sie die Verbindungsdefinitionsparameter ReadTimeout und WriteTimeout anpassen.
ODBC-Brückentreiber
  • FireDAC kann ggf. ekServerGone nicht ermitteln.
  • Die Ping-Methode wird nicht unterstützt.
SQLite Nicht unterstützt.

Steuern der Verbindungswiederherstellung

Setzen Sie ResourceOptions.AutoReconnect auf True, um die automatische Verbindungswiederherstellung zu aktivieren. Optional können Sie auch die TFDCustomConnection-Ereignisbehandlungsroutinen verwenden:

  • OnRecover – zur Reaktion auf das Ereignis des Verbindungsabbruchs und Bereitstellung der nächsten Aktion für FireDAC.
  • OnLosted – wird ausgelöst, wenn eine Verbindung abgebrochen und nicht wiederhergestellt wurde.
  • OnRestored – wird ausgelöst, wenn eine Verbindung abgebrochen und wiederhergestellt wurde.

Die Reaktion der TFDCustomConnection.OnRecover-Ereignisbehandlungsroutine kann die Wiederherstellung der Verbindung, der Wechsel in den Offline-Modus oder einfach das Schließen der Verbindung sein. Wenn OnRecover nicht angegeben ist, versucht FireDAC, die Verbindung wiederherzustellen. Zum Beispiel:

 procedure TForm1.FDConnection1Recover(ASender: TObject;
   const AInitiator: IFDStanObject; AException: Exception;
   var AAction: TFDPhysConnectionRecoverAction);
 var
   iRes: Integer;
 begin
   iRes := MessageDlg('Connection is lost. Offline - yes, Retry - ok, Fail - Cancel',
     mtConfirmation, [mbYes, mbOK, mbCancel], 0);
   case iRes of
   mrYes:    AAction := faOfflineAbort;
   mrOk:     AAction := faRetry;
   mrCancel: AAction := faFail;
   end;
   Log('Connection is recovering');
 end;

Es wird dringend empfohlen, den FireDAC-Manager nicht aus den Ereignisbehandlungsroutinen OnRecover, OnLost und OnRestored zu schließen, weil dies zu unerwarteten Problemen führen kann.

Vorbereiten der Anwendung

Wenn eine Verbindung wiederhergestellt wird, geht Folgendes verloren:

  • Aktive Transaktionen werden zurückgesetzt, und die Ausführung wird bei der fehlgeschlagenen Anweisung fortgesetzt.
  • Ergebnismengen, die noch nicht abgerufen wurden, werden abgeschnitten, und TFDDataSet.SourceEOF wird auf True gesetzt.
  • Der Datenbanksitzungsstatus geht verloren, einschließlich der Status von Oracle-Paketen und Sitzungsvariablen.
  • Registrierte Datenbankwarnungen werden deregistriert.

Zur Vorbereitung einer Anwendung für die Arbeit in einer instabilen Umgebung und zur Minimierung von Fehlerauswirkungen legen Sie die folgenden Optionswerte fest:

Option Wert

FetchOptions.Mode

fmAll

FetchOptions.RowsetSize

200 - 300

FetchOptions.AutoClose

True (Vorgabe)

TxOptions.AutoCommit

True

ResourceOptions.AutoReconnect

True

Die Anwendung kann den Offline-Verbindungsmodus und CachedUpdates verwenden.

Siehe auch