PDA

View Full Version : Frage zum Thema "Satzsperren"



CrazyJoe
22-08-07, 08:29
Hallo,

eines meiner Dialogprogramme besteht aus mehreren einzelnen Programmen welche als Module gewandelt und anschließend zu einem Programm gebunden wurden.

Jetzt habe ich folgendes Problem: Das erste Modul liest einen Satz zur weitern Bearbeitung ein und sperrt diesen, vor jedem Modul wechsel muss ich dann den Satz wieder freigeben, um ihn dann wieder zu sperren. Genau in dem kurzen Zeitraum kann ein anderes Programm den Satz sperren, was eigentlich nicht sein sollte.

Gibt es eine Möglichkeit, dass die zu einem Programm vereinten Module einen Satz gemeinsam nutzen können ohne den Datensatz vor jedem Modul wechsel freizugeben und wieder zu sperren?

Danke für Eure Hilfe!

Joe

cbe
22-08-07, 12:02
Hallo Joe,

die Wahrscheinlichkeit dass ein anderer Job beim Modulwechsel dazwischenkommt dürfte gar nicht so gering sein, da idR. bei Satzsperre eine gewisse Zeit gewartet wird, bis die Datei frei ist.

Ob es eine modulübergreifende Sperre gibt weiß ich leider nicht.
Evtl. kannst Du den Dateizugriff in ein eigenes Modul auslagern und nur noch darüber lesen/schreiben?

Gruß
Christian

Zehetner
22-08-07, 12:57
Ich möchte nur 2 Begriffe in den Raum stellen:
"Shared Open" und "Commitment"


Gruß
Z

Fuerchau
22-08-07, 13:14
Shared Open hilft da auch nur bedingt (OVRDBF/CHGPF ... SHARE(*YES).

Hier kommt es insbesonders auf die Openart des 1. Programmes an.
Öffnet das 1. Programm die Datei Input, kann das folgende Programm die Datei auch nur noch Input eröffnen obwohl ggf. mit Update definiert ist.
Gemerkt wird das aber erst, wenn denn dann tatsächlich ein Update/Write erfolgt.
Desweiteren kann der aktuelle Satzzeiger durch untergeordnete Programme verschoben werden.
Liest das 1. Programm einen Satz mit Sperre und das das Unterprogramm dann ohne oder einen ganz anderen Satz, stimmt eben der Satzzeiger nicht mehr.

Hier empfielt sich doch eher die Verwendung eine "File-Handler's" der diese Operationen vornimmt.

CrazyJoe
22-08-07, 16:03
Hallo,

d.h. ich muss die Lese-/Schreibzugriffe in ein eigenes Modul auslagern, damit ich das Problem in den Griff bekommen kann.

Sollte man die IO-Operationen mittels Modul oder Serviceprogramm einbinden?

Gibt es ev. Beispiele für derartige Funktionen?


Danke!

Joe

Fuerchau
22-08-07, 17:23
Anmerkung:

Die Alternative ist die Übergabe der Satzstruktur als Parameter, so dass das Modul nicht selber nochmal lesen muss.

Ein Filehandler löst allerdings Design-Probleme nicht, da ja ggf. jedes Modul in der Aufruf-Kette wiederum einen anderen Satz der selben Datei lesen kann und somit auf bestimmte Informationen dann kein Verlass ist.

BenderD
25-08-07, 11:30
Hallo,

Commit Steuerung ermöglicht die Festlegung des Sperrverhaltens. Bei repeatable read (as400 nennt das auch all) bleiben gelesene Sätze bis zum Transaktionsende (commit oder rollback) gesperrt.

mfg

Dieter Bender


Hallo,

eines meiner Dialogprogramme besteht aus mehreren einzelnen Programmen welche als Module gewandelt und anschließend zu einem Programm gebunden wurden.

Jetzt habe ich folgendes Problem: Das erste Modul liest einen Satz zur weitern Bearbeitung ein und sperrt diesen, vor jedem Modul wechsel muss ich dann den Satz wieder freigeben, um ihn dann wieder zu sperren. Genau in dem kurzen Zeitraum kann ein anderes Programm den Satz sperren, was eigentlich nicht sein sollte.

Gibt es eine Möglichkeit, dass die zu einem Programm vereinten Module einen Satz gemeinsam nutzen können ohne den Datensatz vor jedem Modul wechsel freizugeben und wieder zu sperren?

Danke für Eure Hilfe!

Joe