- Este tópico contém 5 respostas, 2 vozes e foi atualizado pela última vez 15 anos, 2 meses atrás por
Doids.
-
AutorPosts
-
21 de dezembro de 2010 às 9:50 pm #97391
Doids
ParticipantePessoal,
são 3 duvidas:1 – Como transformo as sqls da coluna REDO para a forma original?
ex:
tenho no log consultando a V$LOGMNR_CONTENTS:
update “UNKNOWN”.”OBJ# 31755″ set “COL 11” = HEXTORAW(‘c103’) where “COL 11” = HEXTORAW(‘c102’) and ROWID = ‘AAAIJyAAfAAAxjKAAN’;Tem alguma maneira facil de passar a linha acima para algo entendivel?
Sei apenas passar os valores um de cada vez.2 – As sqls que estao no log de update são examente iguais as que aparecem na V$LOGMNR_CONTENTS?
Pelo que eu pode constatar fica igual ate a clausula where. Dpois do where o log vem todo modficado do real update executado no banco.
ALguem confirma isso ou tem alguma explicacao?
Falo isso pq a aplicacao tem um update de uma forma e no log esta de outra forma (apenas a clausula WHERE).3 – Tenho a sessao e usuario que fez o acesso, mas ela não existem mais no Banco na v$session. Onde posso verificar isso?Tem algum log de sessoes?
Toda esta analise é no oracle 9i!
Obrigado.
22 de dezembro de 2010 às 4:34 pm #97411Doids
ParticipanteNinguem sabe me responder?
23 de dezembro de 2010 às 7:22 pm #97430vieri
ParticipantePara passar isso ai pra forma original você precisa
fazer consultas na dba_objects e dba_tab_columns,
para ver quem é o OBJ# 31755 e COL11 e demais.ex:
select owner,object_name from dba_objects where object_id=31775 ;
depois
select column_name from dba_tab_columns where table_name in ( select object_name from dba_objects where object_id=31775 )
and COLUMN_ID = 11;Estará de posse da tabela e coluna que fora alterada.
Para audar a pesquisar o processo que vc quer descubrir,
adapte as queryes abaixo.select timestamp, username, session_info, sql_redo, info
from v$logmnr_contents
where operation=’DDL’;select xid, substr(sql_redo,1,100)
from v$logmnr_contents
where operation=’DDL’ and lower(sql_redo) like ‘create%procedure%’;select sql_undo from v$logmnr_contents where xid=’ 07002100D8850600′ and table_name=’SOURCE$’ and operation=’DELETE’;
set pagesize 1000 linesize 150 heading off feedback off verify off trimspool on trimout on
undef xid
select timestamp from v$logmnr_contents where xid=’&&xid’ and operation=’DDL’;
column txt format a150
select REGEXP_REPLACE(
REGEXP_REPLACE(sql_undo,
‘insert into “SYS”.”SOURCE$”(“OBJ#”,”LINE”,”SOURCE”) values (”[0-9]+”,”[0-9]+”,”’,”
),”’);$’,”
) txt
from v$logmnr_contents where xid=’&&xid’ and table_name=’SOURCE$’ and operation=’DELETE’;Para iniciar o processo de leitura de arquives:
alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss’;
begin
dbms_logmnr.start_logmnr(
startTime => ‘2007-04-16 00:00:00’,
endTime => ‘2007-04-20 00:00:00’,
options => dbms_logmnr.DICT_FROM_ONLINE_CATALOG + dbms_logmnr.CONTINUOUS_MINE);
end;
/De posse disso vc descobre oque quiser.
Caso seja um update indevido, restaure um backup da base em outro lugar, faça um recuperação pint in time até um LOGSEQ ou until time do update. E faça o update ajustando os dados corretos via database link para base que foi alterada.
23 de dezembro de 2010 às 7:24 pm #97431vieri
Participantevc postar no forum e não obter resposta em um dia naum significa que ninguem sabe te responde, significa que ninguem ainda se prontificou ou está com paciencia para ajudar… vai estudando o assunto enquanto não for respondido. Não jogue a responsabilidade de aprender no forúm,
é apenas uma ferramenta de ajuda mutua e não um DBA senior do seu lado sempre a sua disposição..😉
23 de dezembro de 2010 às 7:27 pm #97432vieri
Participantelog se sessões somente o listener.log
14 de janeiro de 2011 às 5:08 pm #97713Doids
ParticipanteObrigado Pela ajuda.
Sobre a msg ‘ninguem sabe responder’ é que estava precisando urgente da informação.
De qualquer forma fica no forum um otima fonte de informação para todos os usuários. -
AutorPosts
- Você deve fazer login para responder a este tópico.