Hi!
Ich habe ein Problem und bin leider mit Hilfe von Google nicht ans Ziel gekommen. Ich hoffe sehr dass mir von euch jemand helfen kann!
Bei einem unserer Kunden ist eine Oracle 10g DB im Einsatz, darauf läuft auch die Datenbank für unsere Anwendung. Bisher wurde das Programm lokal installiert, nun soll es über Citrix eingestzt werden.
Bei einer lokalen Installation wurde in unserer Datenbank in der Tabelle "Arbeitsplatz" dieser eingetragen (Name, Installverzeichnis, Lizenzart)
Greift ein PC ohne dass auf diesem installiert wurde (z.B. Programmverzeichnis und Registry einträge wurden kopiert) auf die Datenbank zu wird er in der Tabelle "Arbeitsplatz" mit der niedrigsten Lizenzstufe eingetragen, der Anwender darf also praktisch gar nichts. Dies geschiet dementsprechend auch ein Benuter das Programm über Citrix aufruft. Allerdings hat dieser Kunde nun eine Hauslizenz erworben und jeder PC der sich einträgt soll eine höre Lizenzstufe erhalten. Dies wollte ich "einfach" mit einem Trigger machen, der so aussehen sollte:
CREATE OR REPLACE TRIGGER "USERX"."LIZENZUPDATE"
AFTER INSERT ON "ARBEITSPLATZ"
REFERENCING NEW AS newRow
FOR EACH ROW
WHEN (newRow."LizenzVerwendung" = '1')
BEGIN
UPDATE USERX.ARBEITSPLATZ SET "LizenzVerwendung" = '2'
WHERE "LizenzVerwendung" = '1';
END;
Leider fliegt mir das Ding um die Ohren! Wenn das Programm aufgerufen wird kommt die Fehlermeldung:
Fehlermeldung: Run-time error '-2147217900 (80040e14)'
ORA-04091: Tabelle USERX.ARBEITSPLATZ wird gerade geändert, Trigger sieht dies möglicherweise nicht.
ORA-06512: "USERX.LIZENZUPDATE", Zeile 2
ORA-04088: Fehler bei der Ausführung von Trigger 'USERX.LIZENZUPDATE'
Das interessante daran ist, dass wenn ich das AFTER mit einem BEFORE ersetze läuft er. Aber das bringt eben nichts, da bei einer neuen Anmeldung am Server dann die Lizenzstufe 1 für diesen Arbeitsplatz bestehen bleibt!
Bin mal gespannt was ihr dazu meint. Danke schonmal!
Gruß
Mika
Ich habe ein Problem und bin leider mit Hilfe von Google nicht ans Ziel gekommen. Ich hoffe sehr dass mir von euch jemand helfen kann!
Bei einem unserer Kunden ist eine Oracle 10g DB im Einsatz, darauf läuft auch die Datenbank für unsere Anwendung. Bisher wurde das Programm lokal installiert, nun soll es über Citrix eingestzt werden.
Bei einer lokalen Installation wurde in unserer Datenbank in der Tabelle "Arbeitsplatz" dieser eingetragen (Name, Installverzeichnis, Lizenzart)
Greift ein PC ohne dass auf diesem installiert wurde (z.B. Programmverzeichnis und Registry einträge wurden kopiert) auf die Datenbank zu wird er in der Tabelle "Arbeitsplatz" mit der niedrigsten Lizenzstufe eingetragen, der Anwender darf also praktisch gar nichts. Dies geschiet dementsprechend auch ein Benuter das Programm über Citrix aufruft. Allerdings hat dieser Kunde nun eine Hauslizenz erworben und jeder PC der sich einträgt soll eine höre Lizenzstufe erhalten. Dies wollte ich "einfach" mit einem Trigger machen, der so aussehen sollte:
CREATE OR REPLACE TRIGGER "USERX"."LIZENZUPDATE"
AFTER INSERT ON "ARBEITSPLATZ"
REFERENCING NEW AS newRow
FOR EACH ROW
WHEN (newRow."LizenzVerwendung" = '1')
BEGIN
UPDATE USERX.ARBEITSPLATZ SET "LizenzVerwendung" = '2'
WHERE "LizenzVerwendung" = '1';
END;
Leider fliegt mir das Ding um die Ohren! Wenn das Programm aufgerufen wird kommt die Fehlermeldung:
Fehlermeldung: Run-time error '-2147217900 (80040e14)'
ORA-04091: Tabelle USERX.ARBEITSPLATZ wird gerade geändert, Trigger sieht dies möglicherweise nicht.
ORA-06512: "USERX.LIZENZUPDATE", Zeile 2
ORA-04088: Fehler bei der Ausführung von Trigger 'USERX.LIZENZUPDATE'
Das interessante daran ist, dass wenn ich das AFTER mit einem BEFORE ersetze läuft er. Aber das bringt eben nichts, da bei einer neuen Anmeldung am Server dann die Lizenzstufe 1 für diesen Arbeitsplatz bestehen bleibt!
Bin mal gespannt was ihr dazu meint. Danke schonmal!
Gruß
Mika
Comment