Hallo,
ich baue an einem Logontrigger, der später mal eine bestimmte Session tracen soll.
Im ersten Schritt versuche ich den Parameter tracefile_identifier umzuschießen.
Wenn ich den PL/SQL-Block separat abschicke, dann schießt der mir den Parameter auch entsprechend meiner if-Klausel um, aber als Trigger passiert einfach nichts.
Hier mein Arbeitsmodell:
create or replace trigger trace_ident_tr
after logon on database
declare
program_v varchar2(20);
user_v varchar2(20);
trace_id_v varchar2(100);
begin
SELECT SYS_CONTEXT(‚USERENV‘, ‚MODULE‘) into program_v from dual;
select sys_context(‚USERENV‘, ‚CURRENT_SCHEMA‘) into user_v from dual;
if upper(program_v) = ‚SQL*PLUS‘ and user_v = ‚ENT_USR‘ then
dbms_output.put_line(‚user=ENT_USR und Program = sqlplus‘);
select sys_context(‚USERENV‘, ‚OS_USER‘)||’_’||sys_context(‚USERENV‘, ‚CURRENT_SCHEMA‘) into trace_id_v from dual;
execute immediate ‚alter session set tracefile_identifier=‘||chr(39)||’’||trace_id_v||’’||chr(39);
dbms_output.put_line(‚alter session set tracefile_identifier=‘||chr(39)||’’||trace_id_v||’’||chr(39));
else
dbms_output.put_line(‚Programm nicht sqlplus, oder User nicht ENT_USR‘);
select sys_context(‚USERENV‘, ‚MODULE‘)||’_’||sys_context(‚USERENV‘, ‚CURRENT_SCHEMA‘) into trace_id_v from dual;
execute immediate ‚alter session set tracefile_identifier=‘||chr(39)||’’||trace_id_v||’’||chr(39);
dbms_output.put_line(‚alter session set tracefile_identifier=‘||chr(39)||’’||trace_id_v||’’||chr(39));
end if;
end;
/
Wo liegt mein Fehler ?
Danke und Grüße
Chris