sexta-feira, 30 de julho de 2010

Commitou o que não era pra comittar? Dá "Rollback"!

Fala ai, pessoal!

Se você é de TI, com certeza já passou por uma situação como essa:
Atualizando dados de uma tabela em um banco de dados Oracle, você alterou um ou vários campos com o valor errado, ou até mesmo excluiu um ou mais registros e deu COMMIT. E agora?!?! Fedeu?!?! NÃO!!! Você pode recuperar os dados...
Fala ai, pessoal!

Se você é de TI, com certeza já passou por uma situação como essa:
Atualizando dados de uma tabela em um banco de dados Oracle, você alterou um ou vários campos com o valor errado, ou até mesmo excluiu um ou mais registros e deu COMMIT. E agora?!?! Fedeu?!?! NÃO!!! Você pode recuperar os dados através do Oracle Flashback.

Para isso, a tarefa é muito simples. Basta fazer um select na tal tabela, normal mesmo, com os campos e condições que você quer e, no from, após o nome da tabela, colocar "as of timestamp systimestamp - interval 'X' minute", onde esse "X" é o tempo que passou desde a bobagem que você fez até agora.

Por exemplo: Tenho uma tabela CLIENTE na minha base de dados Oracle e vou atualizar os clientes que não fazem compras há mais de 1 mês para Inativos.

Então fiz lá meu update, atualizando o campo STATUS_CLIENTE para "I", depois de fazer um select que retorna os tais clientes que não compraram no último mês. Dei o COMMIT. Alguns desses clientes estavam com o STATUS "A" de Ativo, "D" de Devedor, "V" de VIP.

Daí, chega o meu chefe, 30 minutos depois que eu fiz o update, dizendo que esse update não pode ser feito em clientes VIP e eu... DANÇO? Não! Eu faço o seguinte:

select ID_CLIENTE
from CLIENTE
as of timestamp systimestamp - interval '30' minute
where STATUS_CLIENTE = 'V';

PRONTO! Peguei todo mundo que tava com o campo STATUS_CLIENTE = 'V' 30 minutos atrás.
Com os IDs, eu faço um novo update, passando essa galera, que está com o STATUS = 'I', pra 'V'.

Salvei meu emprego e deixei meu chefe feliz!

PS.: Agradecimentos ao camarada Willian Rodrigues que ajudou nesse post!

Abraço a todos!

9 comentários:

  1. Aeeee....oi .... Daniel Bezerra e Willian Rodrigues “Gerço”!!! Essa parceria é boa!
    Show de bola essa parada, o Willian já tinha me falado dessa situ.
    Os amigos do Estação Zn agradecem.
    Diante disso, penso que seria oportuno, quem afirma que “fezes evacuadas jamais retornarão ao orifício que as propagou”, rever seu paradigma ... rsrsrsrsrs! Presumo eu ... não sei ..
    =D

    ResponderExcluir
  2. Ah! O recurso didático do Dejavú foi show de bola!
    Mto bom!

    ResponderExcluir
  3. Kra.... Simplesmente Genial! Tanto da parte do Oracle quanto de vocês por terem achado essa parada!

    Ainda tenho muito a aprender...

    ResponderExcluir
  4. Falae Bezerra! Legal isso do flashback pelo log de transações. Só um detalhe, pra ver se eu entendi. Por esse design, cliente VIP nunca é devedor? ;)

    ResponderExcluir
  5. Adorei!

    Quem é o responsável pelo site? O conteúdo é incrível! Alguns pontos avançados demais pra mim, mas gostei!

    ResponderExcluir
  6. O nome desse recurso é Oracle Flashback Query, que nada mais é que um versionador de objetos de BD e registros. Isso é muito foda mesmo!

    ResponderExcluir
  7. Postei no meu blog tbm =)
    http://willianrdg.com/blog/2012/05/commitou-o-que-nao-era-pra-comittar-da-rollback-oracle-flashback/

    ResponderExcluir
  8. Te encontrei aqui Daniel Bezerra, forte abraço parceiro!

    ResponderExcluir

 
BlogBlogs.Com.Br