Announcement

Collapse
No announcement yet.

Wie sehr lange laufende Prozedur anstossen ohne auf das Ergebnis zu warten?

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

  • Wie sehr lange laufende Prozedur anstossen ohne auf das Ergebnis zu warten?

    hallo,
    ich habe eine Prozedur welche ziemlich lange läuft, 30 Minuten oder ggf. mehr. Wenn ich die anstosse bekommt meine Clientapplikation logischerweise immer einen Timeout weil kein Ergebnis zurück geliefert wird. Mittlerweile nutze ich die Mailfunktion des SQL-Servers. Wie kann ich nun, mit einer anderen Prozedur evtl. mit speziellen Aufrufparametern die lange andauernde Prozedur anstossen? Die Prozedur liefert mit dann eine E-Mail wenn sie fertig ist.

  • #2
    rufe doch die Prozedur über den Befehlszeilenmodus auf:
    schreibe dir ne Batchdatei mit dem Inhalt:

    sqlcmd -d Datenbankname -Q "exec Prozedur;"

    und rufe dann diese Bachdatei auf.

    Damit sollte es funktionieren.

    Comment


    • #3
      Hallo openshinok,

      DBMS sind eigentlich dazu ausgelegt, alles synchron in einer Transaktion ablaufen zu lassen.

      Ich sehe 2 Möglichkeiten:

      1. Als Schedule-Job über den Server-Agent
      Lege eine Tabelle an, in der Du die anstehenden "Jobs" reinschriebst, also "Arbeite die SP ab".
      Dann legst Du im Server-Agent eine Job an, der sagen wir mal alle 5 min ausgeführt wird; dabei wird nachgesehen, ob was zu tun ist.

      2. Service Broker
      Ab MSSQL2005 steht der Service Broker zur Verfügung, der asynchron Nachrichten abarbeitet; das könntest Du ebenfalls nutzen.
      Falls Du damit noch nicht gearbeitet hast, sieh mal in der BOL unter "Service Broker, Lernprogramme" nach, da gibt es einfache Beispiel (ist alles im allen auch nicht kompliziert).
      Dann musst Du nur eine Nachricht in die Queue des SB senden und die hinterlegte SP wird abgearbeitet.
      Ebenso könntest Du Dir in eine weitere Queue eine Nachricht senden lassen, wenn die SP fertig ist.
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        Mit was arbeitest du denn im Client? Ich verwende C# und Ado.Net, da gibt es auch die Möglichkeit des asynchronen Ausführens mit zB BeginExecuteReader(). Zusätzlich lasse ich die stored proc zwischendurch Statusmeldungen in eine Hilfsdatei schreiben, die ich im Client in einer Zeitschleife (einmal pro Sekunde, unter Einsatz von READ UNCOMMITTED) auslese und so dem Aufrufer den Arbeitsfortschritt der stored proc visualisieren kann. Denn gerade bei "Langläufern" ist es ungut, nicht zu wissen, ob/was gerade passiert.

        bye,
        Helmut

        Comment

        Working...
        X