Prozeduraufruf mit Datenbankadapter lässt sich nicht abbrechen

  • Beitrag
    julianma
    Teilnehmer
    Hallo,

    ich rufe mit dem Datenbank Adapter zwei Prozedur Calls mit Parametern auf (Typ “Procedure” auf MSSQL Server).

    Der erste Call wird sehr schnell ohne Probleme abgearbeitet.

    <hr />

    2022-04-27 12:50:59.295 [INFO ] [MSSQL] [CONNECTION 0] establishing connection
    2022-04-27 12:50:59.404 [INFO ] [MSSQL] [CONNECTION 0] execute UPDATE
    2022-04-27 12:50:59.413 [DEBUG] [MSSQL] [CONNECTION 0] procedure call to be executed: {call proc_ABC(?, ?, ?)}
    2022-04-27 12:50:59.413 [DEBUG] [MSSQL] [CONNECTION 0] prepare callable statement: {call proc_ABC(?, ?, ?)}
    2022-04-27 12:50:59.413 [DEBUG] [MSSQL] [CONNECTION 0] set parameter values
    2022-04-27 12:50:59.413 [TRACE] [MSSQL] [CONNECTION 0] set parameter #1: parameter1
    2022-04-27 12:50:59.413 [TRACE] [MSSQL] [CONNECTION 0] set parameter #2: parameter2
    2022-04-27 12:50:59.413 [TRACE] [MSSQL] [CONNECTION 0] set parameter #3: parameter3
    2022-04-27 12:50:59.413 [DEBUG] [MSSQL] [CONNECTION 0] call procedure proc_ABC
    2022-04-27 12:50:59.415 [DEBUG] [MSSQL] [CONNECTION 0] rows affected: 0
    2022-04-27 12:50:59.415 [DEBUG] [MSSQL] [CONNECTION 0] processing time: 5 ms
    2022-04-27 12:50:59.415 [INFO ] [MSSQL] [CONNECTION 0] interaction UPDATE has been executed in 11 milliseconds

    <hr />

    Der zweite Call bleibt bei der Verarbeitung hängen

    <hr />

    2022-04-27 12:50:59.447 [DEBUG] [MSSQL_Staging_Sales] establishing new connection: [CONNECTION 0]
    2022-04-27 12:50:59.447 [INFO ] [MSSQL_Staging_Sales] [CONNECTION 0] establishing connection
    2022-04-27 12:50:59.794 [INFO ] [MSSQL_Staging_Sales] [CONNECTION 0] execute UPDATE
    2022-04-27 12:50:59.795 [DEBUG] [MSSQL_Staging_Sales] [CONNECTION 0] procedure call to be executed: {? = call proc_ABC(?, ?, ?, ?, ?, ?, ?, ?, ?)}
    2022-04-27 12:50:59.795 [DEBUG] [MSSQL_Staging_Sales] [CONNECTION 0] prepare callable statement: {? = callproc_ABC(?, ?, ?, ?, ?, ?, ?, ?, ?)}
    2022-04-27 12:50:59.795 [DEBUG] [MSSQL_Staging_Sales] [CONNECTION 0] set parameter values
    2022-04-27 12:50:59.795 [TRACE] [MSSQL_Staging_Sales] [CONNECTION 0] register parameter RETURNVALUE for output
    2022-04-27 12:50:59.795 [TRACE] [MSSQL_Staging_Sales] [CONNECTION 0] set parameter @parameter1: parameter1
    2022-04-27 12:50:59.795 [TRACE] [MSSQL_Staging_Sales] [CONNECTION 0] set parameter @parameter3: parameter2
    2022-04-27 12:50:59.795 [TRACE] [MSSQL_Staging_Sales] [CONNECTION 0] set parameter @parameter2: parameter3
    
    ...
    2022-04-27 12:50:59.795 [DEBUG] [MSSQL_Staging_Sales] [CONNECTION 0] call procedure callproc_ABC

    <hr />

    Wenn die Prozedur mit den identischen Parametern direkt über einen SQL Client aufgerufen wird funktioniert diese und wird ebenfalls in unter einer Sekunde abgearbeitet. Im Transconnect bleibt die Nachricht auch noch nach Stunden auf INPROGRESS und es wird nichts weiteres mehr geloggt.

    Das viel größere Probleme bei der Fehlersuche ist allerdings, dass ich scheinbar keine Möglichkeit habe die Verarbeitung abzubrechen. Es wurde auch der Tipp, der in einem anderen Forumsbeitrag angesprochen wurde ausprobiert, die Queue anzuhalten bzw. zu Stoppen, allerdings führt der “Stopp” Vorgang nicht zu einem Ergebnis und läuft ebenfalls ins nichts. Ein Schließen aller offenen DB Verbindungen würde schon helfen, da während der Ausführung Tabellen auf der Datenbank gesperrt werden.

    Das einzige, das zuverlässig geholfen hat war ein kompletter Neustart des Servers.

    Gibt es hier noch andere Möglichkeiten? Auf dem Entwicklungssystem ist ein Neustarten noch hinnehmbar, auf dem Produktivsystem wäre so ein Vorgehen nicht so einfach möglich.

    Vielleicht hat auch jemand noch eine Idee, wieso der Call überhaupt nicht ordentlich verarbeitet wird.

     

    0
    0
Ansicht von 1 Antwort (von insgesamt 1)
  • Antworten
    Hallo,

    die Logausschriften sehen aus, als ob zwei verschiedene Datenbankadapter für die beiden Prozeduraufrufe verwendet werden. Wenn das so ist, werden dafür auch zwei Datenbanktransaktionen gestartet, wenn kein Autocommit konfiguriert ist. Evtl. muss hier noch eine Transaktionssteuerung im Prozess ergänzt werden.
    Im SQL-Servermanager könnte man die Datenbanksperren prüfen. Dort müssten die Verbindungen vom TRANSCONNECT zu sehen sein.

    Das Abbrechen von klemmenden Datenbankaktivitäten im TRANSCONNECT funktioniert nur, wenn der benutzte JDBC-Treiber Thread-Interrupts erkennt und entsprechend behandelt. Falls nicht, gibt es keine saubere Möglichkeit im TRANSCONNECT, die Verarbeitung abzubrechen. Im SQL-Servermanager könnte man in einem solchen Fall versuchen, die Verbindung zu killen.

    Ihr TRANSCONNECT Support-Team

    0
    0
Ansicht von 1 Antwort (von insgesamt 1)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.