macsousa 0 Denunciar post Postado Janeiro 24, 2007 Desejo verificar inclusoes / alteracoes ou exclusoes que aconteceram em uma determinada tabela em um determinado periodo de tempo tipo .. durantem 1 dia aconteceu varias atualizacoes inclusoes e exclusoes em uma tabela por varios usuarios... existe como no final do dia eu rodar um script que me retorne a movimentacao ocorrida nesta tabela??? Compartilhar este post Link para o post Compartilhar em outros sites
MonTiLLa 1 Denunciar post Postado Janeiro 24, 2007 Ola, Pode ser feito isso se o banco de dados estiver no modo ARQUIVELOG e a tiver com a retenção de undo GARANTIDA por 1 dia no seu caso, com isso é possível a recuperação através de queries no dicionário de dados. A view é FLASHBACK_TRANSACTION_QUERY e nela fica armazenada todas as informações de transação efetuadas por commit. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 25, 2007 Outra solução é criar tabela(s) e trigger(s) para tratar e logar algumas alterações, dá um pouco mais de trabalho mas se permite um log mais refinado tratando apenas as alterações relevantes. Basicamente triggers de after insert/update/delete inserem em uma tabela de log. Esta query por exemplo gera parte do código da trigger (compara se a coluna mudou) SELECT 'IF (NVL(:OLD.'||COLUMN_NAME||','|| DECODE(DATA_TYPE,'VARCHAR2',QUOTEDSTR(' '), 'CHAR',QUOTEDSTR(' '), 'NUMBER','-1', 'DATE','(SYSDATE-36500)')||') <> ' || 'NVL(:NEW.'||COLUMN_NAME||','|| DECODE(DATA_TYPE,'VARCHAR2',QUOTEDSTR(' '), 'CHAR',QUOTEDSTR(' '), 'NUMBER','-1', 'DATE','(SYSDATE-36500)')||')) THEN' LINHA FROM ALL_TAB_COLUMNS WHERE OWNER = '...' AND TABLE_NAME = '...' ORDER BY COLUMN_ID Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Janeiro 27, 2007 Existe a opção de trabalhar com os eventos do banco de dados por TRIGGERS, segue um exemplo básico apenas para INSERT numa tabela especifica: SQL*Plus: Release 10.2.0.1.0 - Production on Sßb Jan 27 12:51:12 2007Copyright (c) 1982, 2005, Oracle. All rights reserved.SQL> conn rodrigoalmeidaInforme a senha:Conectado.SQL> create table LOG_AUDIT (tabela varchar2(10), evento varchar2(10), data date);Tabela criada.SQL> create table TAB_TESTE (a varchar2(10), b number(5));Tabela criada.SQL> create or replace trigger TAB_TESTE_AUDIT 2 after insert on tab_teste for each row 3 begin 4 insert into log_audit values ('TAB_TESTE','INSERT',sysdate); 5 end; 6 /Gatilho criado.SQL> declare 2 contador integer; 3 begin 4 contador := 1; 5 while contador <= 10 loop 6 insert into tab_teste values ('TESTE',contador); 7 contador := contador + 1; 8 end loop; 9 end; 10 /Procedimento PL/SQL concluÝdo com sucesso. SQL> select count(*) from TAB_TESTE; COUNT(*)---------- 10SQL> select tabela, evento, to_char(data,'DD-MM-RRRR HH24:MI:SS') from LOG_AUDIT;TABELA EVENTO TO_CHAR(DATA,'DD-MM---------- ---------- -------------------TAB_TESTE INSERT 27-01-2007 12:57:53TAB_TESTE INSERT 27-01-2007 12:57:53TAB_TESTE INSERT 27-01-2007 12:57:53TAB_TESTE INSERT 27-01-2007 12:57:53TAB_TESTE INSERT 27-01-2007 12:57:53TAB_TESTE INSERT 27-01-2007 12:57:53TAB_TESTE INSERT 27-01-2007 12:57:53TAB_TESTE INSERT 27-01-2007 12:57:53TAB_TESTE INSERT 27-01-2007 12:57:53TAB_TESTE INSERT 27-01-2007 12:57:5310 linhas selecionadas.SQL> bem simples, para melhorar você pode colocar os eventos de DELETE e UPDATE na tabela ou no owner, tanto faz, assim irá acompanhar o que as tabelas estão fazendo. Abraços, http://forum.imasters.com.br/public/style_emoticons/default/dormindo.gif Compartilhar este post Link para o post Compartilhar em outros sites
macsousa 0 Denunciar post Postado Janeiro 27, 2007 muito obrigado a todos... :lol: :D ^_^ Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Janeiro 29, 2007 http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites