Ajuda com trigger - Pelo amor de Deus

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Doug
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Qua, 07 Fev 2007 1:08 pm
Localização: São Paulo

Me ajudem por favor...

Eu preciso fazer uma trigger, que ao o usuário logar no banco, a mesma deve fazer um insert em um determinado campo de uma tabela.

Criei uma tabela com apenas um campo e resolvi fazer o insert na mesma para testes, mas a trigger não dispara de jeito nenhum..

Segue o código..

Selecionar tudo

create or replace trigger marca_logon
after logon on database
begin
insert into vigia 
values
(User || ' entrou no systema' ||
    to_char(sysdate, 'DD-MM-YYYY HH24:MI:SS'));
    COMMIT;
    END;
att
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

A primeira coisa à se fazer, no meu ponto de vista, seria colocar uma exception nesta tua trigger, para ver se não dispara ou, dispara e gera um erro:

Selecionar tudo

create or replace trigger marca_logon 
after logon on database 
begin 
insert into vigia 
values 
(User || ' entrou no systema' || 
    to_char(sysdate, 'DD-MM-YYYY HH24:MI:SS')); 
    COMMIT; 
EXCEPTION
  WHEN OTHERS THEN 
    RAISE_APPLICATION_ERROR(-20001,'Erro ao logar:'||sqlerrm);
END; 
Tenta isso e, manda aqui pra gente o retorno.
Dulima-SP
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 193
Registrado em: Qui, 24 Jan 2008 1:56 pm
Localização: SP

Amigo você já pensou em realizar uma auditoria??

E so ativar um parâmetro no Bando e já so que necessario ter previlegio de DBA para ativa-la e ver os resultados....
Doug
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Qua, 07 Fev 2007 1:08 pm
Localização: São Paulo

Amigos, com relação a grant de DBA , isso não é o problema.O usário já está com o mesmo.

já coloquei o exception na trigger. O que devo mandar pra você ??
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Ele acusou algum erro?
Inseriu algo em tua tabela?
Se acusou erro, mande-nos o erro por favor.
Doug
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Qua, 07 Fev 2007 1:08 pm
Localização: São Paulo

Amigo, ele não acusou nenhum erro.

A trigger compila normalmente.Dai vou e fecho minha sessão e me logo novamente, só que a mesma não inclui nada na tabela.

Obrigado..
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, dei uma pesquisada e, verifiquei que o pessoal cria no schema do SYS.
Talvez só funcione nele.

Tenta criar nele e, qualquer coisa retorna aqui, que eu movo este tópico para a equipe de DBA's aqui do fórum.

Segue abaixo o exemplo que busquei:

Selecionar tudo

CREATE OR REPLACE TRIGGER sys.security_check
  AFTER LOGON ON DATABASE
DECLARE
  v_sid      NUMBER;
  v_isdba    VARCHAR2(10);
  v_program  VARCHAR2(30);
  v_osuser   VARCHAR2(30);
  v_username VARCHAR2(30);
BEGIN
  select distinct sid 
  INTO   v_sid
  from   sys.v_$mystat;
  select program, osuser, username 
  INTO   v_program, v_osuser, v_username 
  from   sys.v_$session 
  where  sid = v_sid;
  SELECT sys_context ('userenv','ISDBA') 
  INTO   v_isdba 
  FROM   DUAL;
  IF (UPPER(v_osuser) != UPPER(v_username))
  THEN
    RAISE_APPLICATION_ERROR
      (-20001,'You cant access the database!',TRUE);
  END IF;
END;
/
Doug
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Qua, 07 Fev 2007 1:08 pm
Localização: São Paulo

Caro Trevisolli ,

criei a mesma trigger, com o usuário sys e mesmo assim nada foi inserido na tabela...
Ele compilou normalmente, mas quando vi a trigger a mesma estava com erro, mandei recompilar e o erro era da tabela vigia, que não existia.
Criei a mesma e a trigger compilou normalmente. Fechei a sessão e me loguei com o user sys e novamente nada foi add na tabela.

Selecionar tudo

create or replace trigger sys.marca_logon
after logon on database
begin
insert into vigia
values
(User || ' entrou no sistema ' || to_char(sysdate, 'DD-MM-YYYY HH24:MI:SS'));
    COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20001,'Erro ao logar:'||sqlerrm);
END;
ps - agradeço muito pela atenção.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Vou mandar o post para o grupo de DBA's aqui do fórum.
Eles podem nos orientar melhor, ok?
ruevers
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 324
Registrado em: Sex, 02 Jun 2006 1:48 pm
Localização: sp
Contato:

Crianças...
qual a versão do banco???isso é muito importante pode ser um bug.
Outra coisa...
já tentou "BEFORE LOGON" ao invés de after...
se compilou e est´´a invalida...teria que ter dado erro
dá um "show errors" depois de cimpilar no sqlplus...mostra algo?
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Bom, vamos lá, "meu velho".

No caso, versão de banco, eu creio que não possa interferir na trigger de After-Logon, mas...

Outra coisa, não pode ser (creio eu) de Before-Logon, pois "antes" de entrar? Como pegar essas informações? Conversei com o DBA aqui e, disse que tem que ser com o After mesmo.

Se surgiu erros, ele me informou que não.

Uma outra coisa que confirmei, muito importante:
Criar com o próprio SYS ou, o usuário que esteja criando, tenha permissão explícita nos objetos.

Outra coisa, você deu uma olhada no Alert do banco pra ver se existe alguma informação referente à essa tentativa? Conversando aqui com a DBA, só me passou pra se tomar cuidado com esta trigger, pois você pode não conseguir logar mais na base.
Doug
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Qua, 07 Fev 2007 1:08 pm
Localização: São Paulo

Bom Dia

A versão do banco é a 9.2.0.1.0.

Tentei compilar a trigger com o before, mas não é possível.

Erro: ORA-30508 - os gatilhos de logon de cliente não podem ter o tipo before.

att...
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Doug, seguinte brother...

Segui religiosamente os passos abaixo, com o usuário SYS e, funcionou perfeitamente.

Faz uns testes ai brother, qualquer coisa, manda pra gente:

Selecionar tudo

--1) tabela 
CREATE TABLE auditoria (usuario VARCHAR2(30),
                        data    DATE);
                        

--2) trigger

CREATE OR REPLACE TRIGGER log_auditoria AFTER LOGON ON  DATABASE 

DECLARE

BEGIN 
   INSERT INTO auditoria (usuario,
                          data)
                  VALUES (USER,
                          SYSDATE);
   COMMIT;
EXCEPTION
  WHEN OTHERS THEN 
     raise_application_error(-20001,'Erro logando no banco:'||sqlerrm);                           
END;
                        

-- depois de logado com Sys e Scott
SELECT *
  FROM auditoria;


-- resultado 
SCOTT 	27-fev-2008 10:36:40
SYS   	27-fev-2008 10:37:03
Doug
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Qua, 07 Fev 2007 1:08 pm
Localização: São Paulo

É amigo, acho que esse meu oracle está zuado. Vou formatar meu pc e vou tentar novamente...

Desde já agradeço muito pela sua atenção..

Deus abençõe...
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

Antes de fazer isso, verifique se essa trigger está ENABLE =D
digita um

Selecionar tudo

 ALTER TRIGGER nome_da_trigger ENABLE
ai para confirmar mesmo que a trigger está ativada faça este select

Selecionar tudo

 select trigger_name,owner, status from dba_triggers where trigger_name = 'NOME_DA_TRIGGER' 
:-o
diegoleite
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 115
Registrado em: Sáb, 10 Nov 2007 2:54 pm
Localização: rio de janeiro
Att,


Diego Leite
DBA ORACLE

Cuidado Com Triggers de Auditoria em. não esqueça delas

Verifique Periodicamente o Crescimento de suas tabelas.

Ou se ligar o Audit acompanhe seu espaco em disco.
Doug
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Qua, 07 Fev 2007 1:08 pm
Localização: São Paulo

beleza galera..Consegui o resultado esperado..

Agradeço a ajuda e dicas de todos...
jucruzjc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 11 Jan 2007 10:26 am
Localização: Santa Bárbaba d'Oeste

commit em trigger?
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes