Anmelden

View Full Version : ILE-Frage



Allrounder
26-11-09, 15:12
Ich habe ein Triggerprogramm (ILE mit benannter Aktivierungsgruppe X), das Tabelle A fortschreibt.
Jetzt soll Tabelle A durch Tabelle B ersetzt werden.

Was passiert, wenn ich die neue Version des Triggerprogramms, das dann Tabelle B fortschreibt, erstelle?

Wird ab diesem Moment nur noch Tabelle B fortgeschrieben?

Oder, was ich befürchte, werden beide Tabellen fortgeschrieben, bis alle Aktivierungsgruppen X der laufenden Jobs geschlossen werden?

Fuerchau
26-11-09, 15:42
Ich denke wohl letzteres.
Du kannst ja den Trigger für Tabelle A nicht löschen, so dass eben das Programm aufgerufen wird.

Für solche Aktionen empfehle ich externe Parameter (DTAARA, PF) um dem Trigger ggf. Stati mitgeben zu können ob er denn was tun soll.

Das Triggerprogramm läßt sich ja leider im laufenden Betrieb auch nicht austauschen.

Allrounder
26-11-09, 16:28
Du hast recht, ich kann nicht einmal die aktuelle Version des Triggerprogramms neu erstellen, die Datei ist gelocked.

Damit hat sich die Umstellung im laufenden Betrieb erst einmal erledigt.

Externe Steuerparameter sind eine Überlegung wert, lohnt sich hier allerdings nicht, da es ein einmaliger "Datenumzug" ist.

B.Hauser
27-11-09, 05:37
... was man natürlich auch machen kann ist:
Das registrierte Trigger-Programm als Wapper zu verwenden und aus diesem heraus das eigentliche Trigger-Programm (das die Verarbeitung erledigt) aufrufen. Dieses Programm kann dann geändert und neu erstellt werden, ohne dass Exklusiv-Rechte auf die Datei notwendig sind.

... wobei die Exklusiv-Rechte beim Austausch/Ändern von Triggern durch aus Sinn machen!! Damit treten solche Situationen, wie Du sie beschreibst, Datei A und Datei B werden fortgeschrieben, obwohl nur eine Datei aktualisiert werden soll, erst gar nicht auf.

Birgitta

Fuerchau
27-11-09, 08:11
@Birgitta
Das geht aber nur mit einem OPM-CLP als Wrapper, da nur dieses bei jedem Call das aktuelle Programm neu ermittelt.
Nach dem CALL muss dann auch noch die ggf. offene ACTGRP wieder geschlossen werden.
Die Performance-Einbußen sind aber teils nicht unerheblich.

BenderD
28-11-09, 07:38
...ist eigentlich ein Standard Weg, habe ich zwar ne Weile nicht mehr gemacht, aber mit der Performance gibt es da keinerlei Probleme. Ausgetauscht wird das dann, wenn es aktiviert werden muss. ILE oder OPM geht da beides, wenn man mit replace arbeitet, nur löschen darf man das Objekt nicht - lediglich SQL Trigger scheiden als Wrapper aus, die dürfen keinen Call.
@Birgitta: ich sehe da keine Entschuldigungsgründe, das ist einfach Schlamperei, dass der Austausch eines Triggers einen exclusive Lock braucht, da würde eine temporäre Schreibsperre reichen und das Sperrhandling von RLA beim open for update ist ohnehin vom Feature zum Bug geworden, mit der Folge, dass Transaction Isolation Serializable (den der SQL Standard als default fordert!) auf einer DB2/400 nicht verwendbar ist.
(siehe auch RGZPFM, da hat sich ja endlich was getan, was jahrelang angeblich nicht ging)

D*B


@Birgitta
Das geht aber nur mit einem OPM-CLP als Wrapper, da nur dieses bei jedem Call das aktuelle Programm neu ermittelt.
Nach dem CALL muss dann auch noch die ggf. offene ACTGRP wieder geschlossen werden.
Die Performance-Einbußen sind aber teils nicht unerheblich.