[oracle_br] Re: Auditoria de usuário no oracle
Boa tarde, blz ? Então, antes de Responder a primeira coisa que eu te digo é que, se REALMENTE vc não está com o parâmetro AUDIT_TRAIL apontando para DB (isso é o default, então normalmente está) eu te Recomendo que vc negocie uma janelinha de manutenção o quano antes e implemente a Auditoria de banco, mesmo : hoje tudo bem, vc quer só logon logoff, que é uma coisa que vc pode obter via trigger facilmente, mas COM CERTEZA daqui a pouco neguim VAI te exigir informação de logins falhados, Objetos acessados durante a sessão (pra ver se tem alguém acessando dados confidenciais que não tem direito) e coisas assim, que vc não consegue obter facilmente sem a Auditoria... Aviso/recomendação feita, a resposta : a msg de erro (ORA-01438: valor maior que a precisão especificada usado para esta coluna) é BEM clara e específica, vc está tentando carregar numa variável ou coluna de tabela um valor que ultrapassa o comprimento/precisão previstos No seu caso, como (olhando por cima o código que vc mostra) não vi nenhum carregamento direto em variável (ie, vc não te SELECT coluna INTO variável, FETCH, nem atribuição tipo variavel := valor), é um dos INSERTs ou dos UPDATEs que tá botando um valor muito grande Fosse um código extremamente complexo e longo, onde não é humanamente possível/viável se encontrar os SQLs possíveis causadores, eu diria pra vc fazer um trace OU setar um evento de dump, mas como não é tão longo, eu diria para vc analisar um pouco o código, descobrir qual DML carrega valores em quais colunas E então comparar o comprimento/precisão da fonte com as colunas... Por exemplo, o UPDATE seguinte : UPDATE stats$user_log SET last_action = (SELECT action FROM v$session tá buscando o valor da coluna ACTION na V$SESSION e botando na coluna LAST_ACTION da STAT$USER_LOG - dá um desc na V$SESSION, um desc na STAT$USER_LOG e compare a coluna ACTION com a LAST_ACTION, se a coluna da STAT$USER_LOG for menor, aumente-a Idem para as outras colunas, okdoc ?? []s Chiappa
[oracle_br] Re: Auditoria de Usuário no Oracle
Ola, -- Para a auditoria, primeiro você pesquisa quem está conectado: set pagesize 1000; set linesize 160; set verify off; set feedback on; col sid format a5; col serial# format a7; col username format a16; col USUARIO format a20; col COMPUTADOR format a25; col PROGRAMA format a30; column status format a8; prompt accept owner prompt 'Escolha o USUARIO ou ENTER para todos: ' select lpad(to_char(sid),5,' ') sid, lpad(to_char(serial#),7,' ') serial, lower(username) username, lower(osuser) osuser, substr(lower(machine),1,25) COMPUTADOR, substr(lower(module),1,30) programa, status from v$session where ((username is not null and 'owner' is null) or (upper(osuser) like upper('owner'))) and status != 'KILLED' order by 3; -- Depois veja o que está rodando no banco: set pagesize 1000; set linesize 100; set verify off; set feedback on; col sid format a5; col serial# format a7; set long 5000; SELECT a.OSUSER, substr(a.username,1,15) username, a.TERMINAL, to_char(a.SID) SID, to_char(a.SERIAL#) SERIAL#, b.executions, b.SQL_TEXT FROM V$SESSION a, V$SQL b WHERE a.SQL_ADDRESS = b.ADDRESS AND a.STATUS = 'ACTIVE'; Sabendo SID e SERIAL, já dá para usar o set_sql_trace_in_session. Ederson Elias DBA Oracle http://www.linkedin.com/profile/view?id=83793732 -- --- Em oracle_br@yahoogrupos.com.br, Eliane SILVA ecssilva@... escreveu Pessoal, Vocês sabem se tem como auditarmos um determinado usuário, independente da conexão e também sem ter que dar o shutdown ? Tentamos fazer isso utilizando o sys.dbms_system.set_sql_trace_in_session(SID, SERIAL#,TRUE).Porém temos que saber a conexão. Obrigada. Eliane. [As partes desta mensagem que não continham texto foram removidas]