Parallele Aufrufe verhindern?

Alles Rund um SAP®.
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Parallele Aufrufe verhindern?

Beitrag von cbe (ForumUser / 2 / 0 / 0 ) »
Hallo,

ich habe ein Programm, das nicht parallel laufen darf. Wenn es parallel aufgerufen wird, soll es sich einfach beenden.

Ich habe es so gelöst, indem ich folgende Zeilen direkt am Anfang ausführe:

Code: Alles auswählen.

  "Einfach beenden, wenn das Programm schon bzw. noch in einem anderen Job läuft.
  CALL FUNCTION 'ENQUEUE_E_TLOCK'
    EXPORTING
      MODE_RSE_TLOCK       = 'E'
      PGMID                = 'LIMU'
      OBJECT               = 'REPS'
      OBJ_NAME             = sy-cprog
    EXCEPTIONS
      FOREIGN_LOCK         = 1
      SYSTEM_FAILURE       = 2
      OTHERS               = 3.
  CASE sy-subrc.
    WHEN 1.
      WRITE:  'Same job is already running - this instance is stopped.'.
      LEAVE PROGRAM.
    WHEN 2 OR 3.
      WRITE:  'Error in enqueue - this instance is stopped.'.
      LEAVE PROGRAM.
  ENDCASE.
aber das funktioniert nur meistens, aber nicht zuverlässig:
Z.B. werden 5 Jobs eventgesteuert zur gleichen Sekunde gestartet, 2 davon laufen parallel, 3 beenden sich wie gewünscht.

Evtl. liegt es daran, dass mehrere Server-Instanzen parallel laufen?
Vielleicht ist es auch etwas ganz anderes?

Kennt jemand dieses Problem? Und vor allem, wie man drum herumkommt?

Gruß,
Christian

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Parallele Aufrufe verhindern?

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin Christian.
Ich könnte mir vorstellen, dass z.B. bei einem Verbuchungsprozess das Programm zwar beendet ist, jedoch die Verbuchung noch nicht abgeschlossen ist, oder die Jobs so schnell parallel gestartet werden, das der ENQUEUE noch gar nicht so schnell registriert ist.

Code: Alles auswählen.

 "Einfach beenden, wenn das Programm schon bzw. noch in einem anderen Job läuft.
  CALL FUNCTION 'ENQUEUE_E_TLOCK'
    EXPORTING
      MODE_RSE_TLOCK       = 'E'
      PGMID                = 'LIMU'
      OBJECT               = 'REPS'
      OBJ_NAME             = sy-cprog
    EXCEPTIONS
      FOREIGN_LOCK         = 1
      SYSTEM_FAILURE       = 2
      OTHERS               = 3.
  CASE sy-subrc.
    WHEN 1.
      WRITE:  'Same job is already running - this instance is stopped.'.
      LEAVE PROGRAM.
    WHEN 2 OR 3.
      WRITE:  'Error in enqueue - this instance is stopped.'.
      LEAVE PROGRAM.
  ENDCASE.

* Wait Enqueu is active 
Do 10000 TIMES.
Call Function ENQUE_REPORT
       :
       :

if not number is initial.
      exit.
endif.
ENDDO.


Was macht denn Dein Programm sonst so ?

gruß Jens
PS.
Ich verwende als "Freies Sperrobjekt" gern ENQUEUE_E_TABLE
und zum Lesen aller gewünschten Sperren ENQUE_REPORT
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Parallele Aufrufe verhindern?

Beitrag von cbe (ForumUser / 2 / 0 / 0 ) »
Ich möchte diesen Mechanismus in mehreren Programmen nutzen. Sie suchen z.B. zu einer BANF Daten zusammen und legen sie in einer Tabelle ab, oder aktualisieren Statusfelder. Aber vor allem sind es nicht meine sondern externe Programme, auf die ich wenig Einfluss habe.

Danke für den Tipp, ich werde mit enque_e_table ansehen. Hoffentlich zeigt der nicht dasselbe Problem, denn einen Sperrmechanismus, der nicht zuverlässig ist, kann ich nicht gebrauchen...

Re: Parallele Aufrufe verhindern?

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Ich würde auf das SY-CPROG als Übeltäter tippen.
Versuch den ENQUEUE_E_TLOCK mal testweise mit einem statischen Reportnamen oder SY-REPID aufzurufen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Parallele Aufrufe verhindern?

Beitrag von Garfield (ForumUser / 5 / 0 / 0 ) »
Spät, aber immerhin...
Der Sperrmodus 'E' erlaubt es, dass der selbe User mehrfach die Sperre setzen kann. Daher denke ich, der Sperrmodus 'X' sollte der korrekte sein.

Seite 1 von 1

Vergleichbare Themen

9
Antw.
10818
Views
Parallele Workprozesse
von Smeagol » 16.12.2005 11:02 • Verfasst in ABAP® Core
0
Antw.
1826
Views
SAP Query: verschiedene parallele Zweige
von Skydizer » 08.05.2007 14:52 • Verfasst in ABAP® für Anfänger
1
Antw.
2615
Views
Kurstyp - parallele Währung - Buchungskreiswährung
von Gast » 06.07.2005 19:19 • Verfasst in Financials
0
Antw.
1237
Views
parallele Hintergrundjobs mit gleichem Endezeitpunkt
von Timoniac » 20.10.2017 13:18 • Verfasst in Basis
2
Antw.
2248
Views
Protokollierung RFC Aufrufe Schnittstellenparameter
von almialmi » 04.09.2006 15:48 • Verfasst in Basis

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor 10 Stunden von tar 21 / 1717
Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3136
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1024
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 598

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor 10 Stunden von tar 21 / 1717
Dialog-Container mit Toolbar/Status
vor 12 Stunden von DeathAndPain gelöst 22 / 3136
Daten an Tabelle binden
vor 17 Stunden von Lukas Sanders 2 / 1024
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 598

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2598
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9183