[oracle_br] Re: Problema trigger na V$session
Andre e Chiappa eu agradeço a atenção de vc´s, muito obrigado. att Anderson --- Em oracle_br@yahoogrupos.com.br, "Andre Santos" <[EMAIL PROTECTED]> escreveu > > Anderson > > Considerando isso que o Chiappa nos explicou, então teria que tentar > contornar o problema... talvez utilizando a package DBMS_APPLICATION_INFO > (com SET_CLIENT_INFO) para preencher o campo CLIENT_INFO da V$SESSION. > > [ ] > > André > > > > Em 30/07/07, jlchiappa <[EMAIL PROTECTED]> escreveu: > > > > Muito ** mito *** provável bug no cacareco do 8i, veja o exemplo > > abaixo (que, É CLARO, eu ** não criei ** no SYS, é absolutamente > > CONTRA-RECOMENDADO vc mexer com o SYS, SYS não é um schema teu, é > > particular da própria Oracle, só objs NATIVOS DO BANCO deveriam estar > > lá, ** E QUE ** logicamente NÂO TEM commit,. como documentado vc não > > deve fazer transações em triggers a não ser com autonomous > > transacts), sendo banco 8.1.7.4 PE : > > > > [EMAIL PROTECTED]:SQL>CREATE OR REPLACE TRIGGER scott.T_REG_LOG_ACCESS > > AFTER LOGON ON DATABASE > > declare > > wmod varchar2(60); > > BEGIN > > select substr(module,1,60) > > into wmod > > from v$session > > where audsid=userenv('sessionid'); > > -- > > insert into scott.log_acesso ( > > NO_DBUSER, > > NO_OSUSER, > > NO_APLICACAO, > > NO_HOST, > > NM_IP, > > DT_ACESSO, > > ID_PERMISSAO > > ) > > values( > > user, > > sys_context('USERENV','os_user'), > > wmod, > > sys_context('USERENV','HOST'), > > sys_context('USERENV','IP_ADDRESS'), > > sysdate, > > 'S' > > ); > > END; > > > > Gatilho criado. > > > > ==> ok, vou conectar via sqlplus em outra sessão : > > > > [EMAIL PROTECTED]:SQL>@conn scott/[EMAIL PROTECTED] > > Conectado. > > > > ==> consulto a tabela : > > > > [EMAIL PROTECTED]:SQL>select * from scott.log_acesso; > > > > NO_DBUSER NO_OSUSER NO_APLICACAO NO_HOST > > NM_IP DT_ACESSO I > > - - -- - - > > -- --- - > > SCOTT jlchiappa meudominioSP\microjl039476 > > aa.bb.cc.ddd 30/07/2007 11:21:28 S > > > > ==> realmente não trouxe... Pra reforçat totalmente a chance de que é > > problema na hora do trigger acessar a v$session na coluna module, > > trunco a tabela de log, e vou guardar TODO O REGISTRO da v$session > > numa outra tab que criei : > > > > [EMAIL PROTECTED]:SQL>create table log_sessao as (select * from v$session > > where 1=2); > > > > Tabela criada. > > > > [EMAIL PROTECTED]:SQL>CREATE OR REPLACE TRIGGER scott.T_REG_LOG_ACCESS > > AFTER LOGON ON DATABASE > > declare > > wmod varchar2(60); > > BEGIN > > select substr(module,1,60) > > into wmod > > from v$session > > where audsid=userenv('sessionid'); > > -- > > insert into scott.log_acesso ( > > NO_DBUSER, > > NO_OSUSER, > > NO_APLICACAO, > > NO_HOST, > > NM_IP, > > DT_ACESSO, > > ID_PERMISSAO > > ) > > values( > > user, > > sys_context('USERENV','os_user'), > > wmod, > > sys_context('USERENV','HOST'), > > sys_context('USERENV','IP_ADDRESS'), > > sysdate, > > 'S' > > ); > > insert into log_sessao (select * from v$session where > > audsid=userenv('sessionid') ); > > END; > > > > Gatilho criado. > > > > ==> conecto como SCOTT em outra sessão, novamente veja que o select > > * da v$session trouxe tudo ** menos ** o module : > > > > [EMAIL PROTECTED]:SQL>select * from scott.log_sessao; > > > > SADDR SID SERIAL# AUDSID PADDR USER# USERNAME COMMAND > > OWNERID TADDR LOCKWAIT STATUS SERVER SCHEMA# SCHEMANAME > > OSUSER PROCESS MACHINE TERMINAL > > PROGRAM TYPE SQL_ADDR SQL_HASH_VALUE PREV_SQL PREV_HASH_VALUE > > MODULE MODULE_HASH ACTION ACTION_HASH CLIENT_INFO > > FIXED_TABLE_SEQUENCE ROW_WAIT_OBJ# ROW_WAIT_FILE# > > ROW_WAIT_BLOCK# ROW_WAIT_ROW# LOGON_TIME > > LAST_CALL_ET PDM FAILOVER_TYPE FAILOVER_M FAI RESOURCE_CONSUMER_GROUP > > PDML_STA PDDL_STA PQ_STATU > > --- --- -- - - --- > > -- - --- -- -- --- - > > -- - -- -- -- > > -- -- --- - -- -- > > - --- --- - - > > - -- -- - -- -- > > --- - -- --- --- - > > --- > > 021C4F20 15 35 214 0219FAD4 34 SCOTT 2 > > 2147483644 023CD1D0 ACTIVE DEDICATED 34 SCOTT > > jlchiappa 3848:1664 meudominioSP\microjl039476 microjl039476 > > sqlplusw.exe USER 03C2D07C 4061851594 00 > > 0 0 > > 0 66 -1 > > 0 0 0 30/07/2007 > > 11:24:38 0 NO NONE NONE NO > > DEFAULT_CONSUMER_GROUP DISABLED ENABLED ENABLED > > > > ==> notar que se eu fizer o acesso diretamente lá na sessão logada o > > campo vem normal : > > > > [EMAIL PROTECTED]:SQL>select * from v$session where audsid=userenv > > ('sessionid'); > > > > SADDR SID SERIAL# AUDSID PADDR USER# USERNAME COMMAND > > OWNERID TADDR LOCKWAIT ST
Re: [oracle_br] Re: Problema trigger na V$session
Anderson Considerando isso que o Chiappa nos explicou, então teria que tentar contornar o problema... talvez utilizando a package DBMS_APPLICATION_INFO (com SET_CLIENT_INFO) para preencher o campo CLIENT_INFO da V$SESSION. [ ] André Em 30/07/07, jlchiappa <[EMAIL PROTECTED]> escreveu: > > Muito ** mito *** provável bug no cacareco do 8i, veja o exemplo > abaixo (que, É CLARO, eu ** não criei ** no SYS, é absolutamente > CONTRA-RECOMENDADO vc mexer com o SYS, SYS não é um schema teu, é > particular da própria Oracle, só objs NATIVOS DO BANCO deveriam estar > lá, ** E QUE ** logicamente NÂO TEM commit,. como documentado vc não > deve fazer transações em triggers a não ser com autonomous > transacts), sendo banco 8.1.7.4 PE : > > [EMAIL PROTECTED]:SQL>CREATE OR REPLACE TRIGGER scott.T_REG_LOG_ACCESS > AFTER LOGON ON DATABASE > declare > wmod varchar2(60); > BEGIN > select substr(module,1,60) > into wmod > from v$session > where audsid=userenv('sessionid'); > -- > insert into scott.log_acesso ( > NO_DBUSER, > NO_OSUSER, > NO_APLICACAO, > NO_HOST, > NM_IP, > DT_ACESSO, > ID_PERMISSAO > ) > values( > user, > sys_context('USERENV','os_user'), > wmod, > sys_context('USERENV','HOST'), > sys_context('USERENV','IP_ADDRESS'), > sysdate, > 'S' > ); > END; > > Gatilho criado. > > ==> ok, vou conectar via sqlplus em outra sessão : > > [EMAIL PROTECTED]:SQL>@conn scott/[EMAIL PROTECTED] > Conectado. > > ==> consulto a tabela : > > [EMAIL PROTECTED]:SQL>select * from scott.log_acesso; > > NO_DBUSER NO_OSUSER NO_APLICACAO NO_HOST > NM_IP DT_ACESSO I > - - -- -- > -- --- - > SCOTT jlchiappa meudominioSP\microjl039476 > aa.bb.cc.ddd 30/07/2007 11:21:28 S > > ==> realmente não trouxe... Pra reforçat totalmente a chance de que é > problema na hora do trigger acessar a v$session na coluna module, > trunco a tabela de log, e vou guardar TODO O REGISTRO da v$session > numa outra tab que criei : > > [EMAIL PROTECTED]:SQL>create table log_sessao as (select * from v$session > where 1=2); > > Tabela criada. > > [EMAIL PROTECTED]:SQL>CREATE OR REPLACE TRIGGER scott.T_REG_LOG_ACCESS > AFTER LOGON ON DATABASE > declare > wmod varchar2(60); > BEGIN > select substr(module,1,60) > into wmod > from v$session > where audsid=userenv('sessionid'); > -- > insert into scott.log_acesso ( > NO_DBUSER, > NO_OSUSER, > NO_APLICACAO, > NO_HOST, > NM_IP, > DT_ACESSO, > ID_PERMISSAO > ) > values( > user, > sys_context('USERENV','os_user'), > wmod, > sys_context('USERENV','HOST'), > sys_context('USERENV','IP_ADDRESS'), > sysdate, > 'S' > ); > insert into log_sessao (select * from v$session where > audsid=userenv('sessionid') ); > END; > > Gatilho criado. > > ==> conecto como SCOTT em outra sessão, novamente veja que o select > * da v$session trouxe tudo ** menos ** o module : > > [EMAIL PROTECTED]:SQL>select * from scott.log_sessao; > > SADDR SID SERIAL# AUDSID PADDR USER# USERNAME COMMAND > OWNERID TADDR LOCKWAIT STATUS SERVER SCHEMA# SCHEMANAME > OSUSER PROCESS MACHINE TERMINAL > PROGRAM TYPE SQL_ADDR SQL_HASH_VALUE PREV_SQL PREV_HASH_VALUE > MODULE MODULE_HASH ACTION ACTION_HASH CLIENT_INFO > FIXED_TABLE_SEQUENCE ROW_WAIT_OBJ# ROW_WAIT_FILE# > ROW_WAIT_BLOCK# ROW_WAIT_ROW# LOGON_TIME > LAST_CALL_ET PDM FAILOVER_TYPE FAILOVER_M FAI RESOURCE_CONSUMER_GROUP > PDML_STA PDDL_STA PQ_STATU > --- --- -- - - --- > -- - --- -- - - > -- - -- > -- -- --- --- -- > - --- --- - - > - -- -- --- -- > --- - -- --- > --- > 021C4F20 15 35 214 0219FAD4 34 SCOTT 2 > 2147483644 023CD1D0 ACTIVE DEDICATED 34 SCOTT > jlchiappa 3848:1664 meudominioSP\microjl039476 microjl039476 > sqlplusw.exe USER 03C2D07C 4061851594 00 > 0 0 > 0 66 -1 > 0 0 0 30/07/2007 > 11:24:38 0 NO NONE NONE NO > DEFAULT_CONSUMER_GROUP DISABLED ENABLED ENABLED > > ==> notar que se eu fizer o acesso diretamente lá na sessão logada o > campo vem normal : > > [EMAIL PROTECTED]:SQL>select * from v$session where audsid=userenv > ('sessionid'); > > SADDR SID SERIAL# AUDSID PADDR USER# USERNAME COMMAND > OWNERID TADDR LOCKWAIT STATUS SERVER SCHEMA# SCHEMANAME > OSUSER PROCESS MACHINE TERMINAL > PROGRAM TYPE SQL_ADDR SQL_HASH_VALUE PREV_SQL PREV_HASH_VALUE > MODULE MODULE_HASH ACTION ACTION_HASH CLIENT_INFO > FIXED_TABLE_SEQUENCE ROW_WAIT_OBJ# ROW_WAIT_FILE# > ROW_WAIT_BLOCK# ROW_WAIT_ROW# LOGON_TIME > LAST_CALL_ET PDM FAILOVER_TYPE FAILOVER_M FAI RESOURCE_CONSUMER_GROUP > PDML_STA PDDL_STA PQ_STATU > --- --- -- - - --- > -- - ---
[oracle_br] Re: Problema trigger na V$session
Muito ** mito *** provável bug no cacareco do 8i, veja o exemplo abaixo (que, É CLARO, eu ** não criei ** no SYS, é absolutamente CONTRA-RECOMENDADO vc mexer com o SYS, SYS não é um schema teu, é particular da própria Oracle, só objs NATIVOS DO BANCO deveriam estar lá, ** E QUE ** logicamente NÂO TEM commit,. como documentado vc não deve fazer transações em triggers a não ser com autonomous transacts), sendo banco 8.1.7.4 PE : [EMAIL PROTECTED]:SQL>CREATE OR REPLACE TRIGGER scott.T_REG_LOG_ACCESS AFTER LOGON ON DATABASE declare wmod varchar2(60); BEGIN select substr(module,1,60) into wmod from v$session where audsid=userenv('sessionid'); -- insert into scott.log_acesso ( NO_DBUSER, NO_OSUSER, NO_APLICACAO, NO_HOST, NM_IP, DT_ACESSO, ID_PERMISSAO ) values( user, sys_context('USERENV','os_user'), wmod, sys_context('USERENV','HOST'), sys_context('USERENV','IP_ADDRESS'), sysdate, 'S' ); END; Gatilho criado. ==> ok, vou conectar via sqlplus em outra sessão : [EMAIL PROTECTED]:SQL>@conn scott/[EMAIL PROTECTED] Conectado. ==> consulto a tabela : [EMAIL PROTECTED]:SQL>select * from scott.log_acesso; NO_DBUSER NO_OSUSER NO_APLICACAO NO_HOST NM_IPDT_ACESSO I - - -- -- -- --- - SCOTT jlchiappa meudominioSP\microjl039476 aa.bb.cc.ddd 30/07/2007 11:21:28 S ==> realmente não trouxe... Pra reforçat totalmente a chance de que é problema na hora do trigger acessar a v$session na coluna module, trunco a tabela de log, e vou guardar TODO O REGISTRO da v$session numa outra tab que criei : [EMAIL PROTECTED]:SQL>create table log_sessao as (select * from v$session where 1=2); Tabela criada. [EMAIL PROTECTED]:SQL>CREATE OR REPLACE TRIGGER scott.T_REG_LOG_ACCESS AFTER LOGON ON DATABASE declare wmod varchar2(60); BEGIN select substr(module,1,60) into wmod from v$session where audsid=userenv('sessionid'); -- insert into scott.log_acesso ( NO_DBUSER, NO_OSUSER, NO_APLICACAO, NO_HOST, NM_IP, DT_ACESSO, ID_PERMISSAO ) values( user, sys_context('USERENV','os_user'), wmod, sys_context('USERENV','HOST'), sys_context('USERENV','IP_ADDRESS'), sysdate, 'S' ); insert into log_sessao (select * from v$session where audsid=userenv('sessionid') ); END; Gatilho criado. ==> conecto como SCOTT em outra sessão, novamente veja que o select * da v$session trouxe tudo ** menos ** o module : [EMAIL PROTECTED]:SQL>select * from scott.log_sessao; SADDRSID SERIAL# AUDSID PADDRUSER# USERNAME COMMAND OWNERID TADDRLOCKWAIT STATUS SERVERSCHEMA# SCHEMANAME OSUSERPROCESS MACHINETERMINAL PROGRAM TYPE SQL_ADDR SQL_HASH_VALUE PREV_SQL PREV_HASH_VALUE MODULE MODULE_HASH ACTION ACTION_HASH CLIENT_INFO FIXED_TABLE_SEQUENCE ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# LOGON_TIME LAST_CALL_ET PDM FAILOVER_TYPE FAILOVER_M FAI RESOURCE_CONSUMER_GROUP PDML_STA PDDL_STA PQ_STATU --- --- -- - - --- -- - --- -- - - -- - -- -- -- --- --- -- - --- --- - - - -- -- --- -- --- - -- --- --- 021C4F20 15 35214 0219FAD434 SCOTT 2 2147483644 023CD1D0 ACTIVE DEDICATED 34 SCOTT jlchiappa 3848:1664 meudominioSP\microjl039476 microjl039476 sqlplusw.exe USER 03C2D07C 4061851594 00 00 0 66-1 0 0 0 30/07/2007 11:24:38 0 NO NONE NONE NO DEFAULT_CONSUMER_GROUP DISABLED ENABLED ENABLED ==> notar que se eu fizer o acesso diretamente lá na sessão logada o campo vem normal : [EMAIL PROTECTED]:SQL>select * from v$session where audsid=userenv ('sessionid'); SADDRSID SERIAL# AUDSID PADDRUSER# USERNAME COMMAND OWNERID TADDRLOCKWAIT STATUS SERVERSCHEMA# SCHEMANAME OSUSERPROCESS MACHINETERMINAL PROGRAM TYPE SQL_ADDR SQL_HASH_VALUE PREV_SQL PREV_HASH_VALUE MODULE MODULE_HASH ACTION ACTION_HASH CLIENT_INFO FIXED_TABLE_SEQUENCE ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# LOGON_TIME LAST_CALL_ET PDM FAILOVER_TYPE FAILOVER_M FAI RESOURCE_CONSUMER_GROUP PDML_STA PDDL_STA PQ_STATU --- --- -- - - --- -- -
[oracle_br] Re: Problema trigger na V$session
Então André, seu eu fizer a consulta fora da trigger ele me tráz os dados, está muito estranho. --- Em oracle_br@yahoogrupos.com.br, "Andre Santos" <[EMAIL PROTECTED]> escreveu > > Anderson > > Se não me engano, a informação "module" da V$SESSION nem sempre está > preenchida. > Depende das informações passadas pela aplicação na conexão (conforme a > biblioteca/método de acesso). > > [ ] > > André > > > Em 30/07/07, anderson.castro_16 <[EMAIL PROTECTED]> escreveu: > > > > O owner da trigger é sys! > > > > att > > > > Anderson Castro > > > > --- Em oracle_br@yahoogrupos.com.br , > > "Alex Fernando Kirsten" > > escreveu > > > > > > grant select any dictionary to OWNER_DA_TRIGGER > > > > > > []'s > > > > > > > > > Alex Fernando Kirsten > > > Oracle 9i Database Administrator Certified Professional > > > Depto. de Tecnologia > > > Operacional Têxtil > > > > > > - Original Message - > > > From: anderson.castro_16 > > > To: oracle_br@yahoogrupos.com.br > > > Sent: Monday, July 30, 2007 10:07 AM > > > Subject: [oracle_br] Problema trigger na V$session > > > > > > > > > Pessoal estou com problemas na trigger abaixo, pois a mesma não > > está > > > inputando a informação do Module, da v$session na tabela que > > criei > > > com outro usuário. > > > > > > Alguém pode me ajudar é uma banco Oracle 8i. > > > > > > att > > > > > > Anderson Castro > > > > > > CREATE OR REPLACE TRIGGER SYS.T_REG_LOG_ACCESS > > > AFTER LOGON ON DATABASE > > > declare > > > > > > wmod varchar2(60); > > > > > > BEGIN > > > > > > select substr(module,1,60) > > > into wmod > > > from v$session > > > where sys_context('USERENV','SESSIONID') = audsid; > > > > > > insert into sisadm.log_acesso ( > > > NO_DBUSER, > > > NO_OSUSER, > > > NO_APLICACAO, > > > NO_HOST, > > > NM_IP, > > > DT_ACESSO, > > > ID_PERMISSAO > > > ) values( > > > user, > > > sys_context('USERENV','os_user'), > > > wmod, > > > sys_context('USERENV','HOST'), > > > sys_context('USERENV','IP_ADDRESS'), > > > sysdate, > > > 'S' > > > ); > > > commit; > > > END; > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] >
Re: [oracle_br] Re: Problema trigger na V$session
Anderson Se não me engano, a informação "module" da V$SESSION nem sempre está preenchida. Depende das informações passadas pela aplicação na conexão (conforme a biblioteca/método de acesso). [ ] André Em 30/07/07, anderson.castro_16 <[EMAIL PROTECTED]> escreveu: > > O owner da trigger é sys! > > att > > Anderson Castro > > --- Em oracle_br@yahoogrupos.com.br , > "Alex Fernando Kirsten" > <[EMAIL PROTECTED]> escreveu > > > > grant select any dictionary to OWNER_DA_TRIGGER > > > > []'s > > > > > > Alex Fernando Kirsten > > Oracle 9i Database Administrator Certified Professional > > Depto. de Tecnologia > > Operacional Têxtil > > > > - Original Message - > > From: anderson.castro_16 > > To: oracle_br@yahoogrupos.com.br > > Sent: Monday, July 30, 2007 10:07 AM > > Subject: [oracle_br] Problema trigger na V$session > > > > > > Pessoal estou com problemas na trigger abaixo, pois a mesma não > está > > inputando a informação do Module, da v$session na tabela que > criei > > com outro usuário. > > > > Alguém pode me ajudar é uma banco Oracle 8i. > > > > att > > > > Anderson Castro > > > > CREATE OR REPLACE TRIGGER SYS.T_REG_LOG_ACCESS > > AFTER LOGON ON DATABASE > > declare > > > > wmod varchar2(60); > > > > BEGIN > > > > select substr(module,1,60) > > into wmod > > from v$session > > where sys_context('USERENV','SESSIONID') = audsid; > > > > insert into sisadm.log_acesso ( > > NO_DBUSER, > > NO_OSUSER, > > NO_APLICACAO, > > NO_HOST, > > NM_IP, > > DT_ACESSO, > > ID_PERMISSAO > > ) values( > > user, > > sys_context('USERENV','os_user'), > > wmod, > > sys_context('USERENV','HOST'), > > sys_context('USERENV','IP_ADDRESS'), > > sysdate, > > 'S' > > ); > > commit; > > END; > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Re: Problema trigger na V$session
O owner da trigger é sys! att Anderson Castro --- Em oracle_br@yahoogrupos.com.br, "Alex Fernando Kirsten" <[EMAIL PROTECTED]> escreveu > > grant select any dictionary to OWNER_DA_TRIGGER > > []'s > > > Alex Fernando Kirsten > Oracle 9i Database Administrator Certified Professional > Depto. de Tecnologia > Operacional Têxtil > > - Original Message - > From: anderson.castro_16 > To: oracle_br@yahoogrupos.com.br > Sent: Monday, July 30, 2007 10:07 AM > Subject: [oracle_br] Problema trigger na V$session > > > Pessoal estou com problemas na trigger abaixo, pois a mesma não está > inputando a informação do Module, da v$session na tabela que criei > com outro usuário. > > Alguém pode me ajudar é uma banco Oracle 8i. > > att > > Anderson Castro > > CREATE OR REPLACE TRIGGER SYS.T_REG_LOG_ACCESS > AFTER LOGON ON DATABASE > declare > > wmod varchar2(60); > > BEGIN > > select substr(module,1,60) > into wmod > from v$session > where sys_context('USERENV','SESSIONID') = audsid; > > insert into sisadm.log_acesso ( > NO_DBUSER, > NO_OSUSER, > NO_APLICACAO, > NO_HOST, > NM_IP, > DT_ACESSO, > ID_PERMISSAO > ) values( > user, > sys_context('USERENV','os_user'), > wmod, > sys_context('USERENV','HOST'), > sys_context('USERENV','IP_ADDRESS'), > sysdate, > 'S' > ); > commit; > END; > > > > > > [As partes desta mensagem que não continham texto foram removidas] >