Announcement

Collapse
No announcement yet.

Too many concurrent executions ...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Too many concurrent executions ...

    ... of the same request. So heißt der bizarre Fehler, den ich an einer Stelle meiner Anwendung regelmäßig kriege - nur durch ein einfaches Update.

    Was noch merkwürdiger ist: Ich habe zwei verschiedene Tabellen mit (verschiedenen Arten von) Personen. Dann habe ich eine Routine, die eine CSV-Adressdatei einliest und mit diesen Daten eine Personentabelle auf Adressabweichungen abklopft. Das ganze klappt mit einer der beiden Personentabellen problemlos, mit der anderen tritt o.g. Fehler auf. Warum!? Leider war durch Googeln und Forensuche über diesen mysteriösen Fehler nichts herauszukriegen. Ach ja, ich benutze den Embedded Server, greife ergo allein auf die DB zu und mache außer einer UPDATE-Anweisung bei Adressänderungen nix.

    Derselbe Fehler tritt auch manchmal beim Bearbeiten von anderen Tabellen auf, aber eben nur manchmal (aber immer an denselben Stellen). Ich weiß mir keinen Reim drauf zu machen.

    Viele Grüße,

    Stefan Balzter

  • #2
    Hallo Stefan,
    <br>
    dies deutet in der Regel auf eine endlose Rekursion in einem Trigger hin. Kann es sein, dass Du auf einer Tabelle einen Trigger hast, der "irrtümlich" über eine DML-Anweisung den selben Trigger wieder feuert, usw ...
    <br>
    Schöne Grüße,
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Hi,

      ich habe 3 Sachen im Verdacht. 1. das was Thomas gesagt hat. 2. die Transaction wird zu spät committed. Und vor allem :

      3. den embedded Server ! Ich glaube, bei Tests damit habe ich das auch schon mal gesehen. Vielleicht täusche ich mich, aber ich glaube, da war nicht nur eine Anwendung offen. Im Hintergrund war noch IBExpert aktiv oder vielleicht auch Delphi. Und da war eine Transaction gestartet und nicht committed.

      Viele denken, der embedded Server wäre nur auf einen Benutzer beschränkt, aber es geht auch nicht mit 2 Programmen gleichzeitig. Wenn die 3. Vermutung zutrifft, dann dürften allerdings früher oder später noch einige Quereffekte mehr auftauchen

      Comment


      • #4
        Ich achte schon drauf, dass ich mit dem ES keine weiteren Programme laufen lasse - und wenn doch, dann gibt's eh gleich eine Fehlermeldung (database accessed by other users). Das mit den Triggern checke ich mal ausführlich. In der Transaktion lief in diesem Fall nur der eine UPDATE-Befehl.

        <I>etwas später :-)</I>

        Potzblitz, ja, da war was ... ich hatte AFTER UPDATE einen Trigger, der nach erfolgter Tabellenänderung das Feld "Änderungstimestamp" setzen sollte. Und zwar über eine UPDATE-Anweisung ...

        Das war wohl noch mein BDE-Trauma, dass ich den Änderungstimestamp erst nach dem UPDATE schreiben wollte (bloß nicht zu früh als geändert markieren, vielleicht geht kurz vor Schluss noch alles schief ;-) Natürlich gehört das in ein BEFORE UPDATE mit new.aenderungstimestamp= ...

        Vielen Dank fürs Augenöffnen!

        Stefa

        Comment


        • #5
          Hallo Stefan,
          <br>
          hmm, mein "durch die Glaskugel schaun" funktioniert also noch einwandfrei. ;-)
          <br>
          Zum Embedded Server vielleicht noch ein Wort. Man kann durchaus von mehreren Anwendungen über den Embedded Server auf ein und die selbe Datenbank zugreifen, wenn der Zugriff über die eine - bereits geladene - Embedded Server DLL erfolgt. Was natürlich nicht geht ist, dass mehrere Serverprozesse auf eine Datenbankdatei zugreifen, die bereits von einem Embedded Server geöffnet wurde.
          <br>
          Thoma
          Thomas Steinmaurer

          Firebird Foundation Committee Member
          Upscene Productions - Database Tools for Developers
          Mein Blog

          Comment

          Working...
          X