De volta ao passado.
Hoje o assunto é máquina do tempo. rsrsrs
Imagino que todo mundo, pelo menos uma vez na vida já teve vontade de voltar no tempo. Que bom seria deixar de fazer certos erros, magoar certas pessoas, tomar decisões erradas não é mesmo? Que bom seria voltar a traz e fazer um novo começo.
É meu amigo claro que eu sei! Eu já senti isso (e não foi apenas uma vez) e sei que você também sabe. Porém nesta louca batalha chamada vida só se vai para frente, a busca pelo aperfeiçoamento, o tempo, caminham em uma só direção. E esta não permite retroceder ao passado.
Sendo assim, ao passado somente restará a certeza de termos aprendido algo, e mesmo ele não podendo ser desfeito ou refeito, servirá sempre como uma experiência. Positiva ou negativa, no momento não importa. Apenas experiência.
Porém, para nossa sorte, quando o assunto é gerenciamento de banco de dados temos algo que pode muito nos ajudar. É uma tecnologia que permite embarcar na máquina do tempo e voltar no passado. É a tecnologia de FLASHBACK.
Com ela conseguimos ver como os dados estavam no passado, comparar como que estão hoje, corrigir para que voltem a estar como antes. Ou seja, nos permite mil e uma chances de refazer as mesmas coisas.
Abaixo eu coloquei um pequeno caso de teste que irá ajudar a entender o que estou falando.
Vamos a ele?
SQL> set time on; — serve para que mostre os horários e assim ficar mais fácil de nos acharmos
1- Criando a tabela de teste
16:53:41 SQL> create table teste (id number, salary number);
Table created.
2- inserindo valores na tabela
16:53:46 SQL> insert into teste values (1,50);
1 row created.
16:53:57 SQL> insert into teste values (2,100);
1 row created.
16:54:03 SQL> insert into teste values (3,200);
1 row created.
16:54:09 SQL> commit;
Commit complete.
3- Mais DMLs na tabela(alterações)
16:54:13 SQL> delete from teste where id = 3;
1 row deleted.
16:54:20 SQL> commit;
Commit complete.
16:54:24 SQL> insert into teste values (4,80);
1 row created.
16:54:32 SQL> commit;
Commit complete.
16:54:35 SQL> update teste set salary=salary+350 where id =1;
1 row updated.
16:54:44 SQL> commit;
Commit complete.
4- Setando o formato de data e hora da sessão. Isso é necessário para que eu possa solicitar valores deste tipo nesta formatação (máscara de dado)
16:54:48 SQL> ALTER SESSION SET nls_timestamp_format = ‘DD-MON-YYYY HH24:MI:SS.FF3’;
Session altered.
5- Verificando com a tecnologia de FLASHBACK QUERY
16:54:56 SQL> SELECT id, salary FROM teste VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE ORDER BY id;
ID SALARY
———- ———-
1 400
1 50
2 100
3 200
3 200
4 80
6 rows selected.
16:55:04 SQL> select * from teste;
ID SALARY
———- ———-
1 400
2 100
4 80
6- Verificando qual a data e hora atuais
16:56:02 SQL> select sysdate from dual;
SYSDATE
———
29-FEB-14
7- Habilitando o flashback para o horário em questão. Ou seja, programando a volta no tempo.
Perceba que coloquei “to_date” para definir padrão da data (formato)
16:57:50 SQL> exec dbms_flashback.enable_at_time(to_date(‘2016-FEB-29 16:54:24’, ‘YYYY-MON-DD HH24:MI:SS’));
PL/SQL procedure successfully completed.
16:58:06 SQL> select * from teste;
ID SALARY
———- ———-
1 50
2 100
8- Tentando voltar no tempo… Ihhh nem sempre dá certo.
16:58:12 SQL> FLASHBACK TABLE TESTE TO TIMESTAMP (TO_TIMESTAMP(‘2016-FEB-29 16:54:03’, ‘YYYY-MON-DD HH24:MI:SS’));
FLASHBACK TABLE TESTE TO TIMESTAMP (TO_TIMESTAMP(‘2016-FEB-29 16:54:03’, ‘YYYY-MON-DD HH24:MI:SS’))
*
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled
17:00:01 SQL> alter table teste enable row movement;
alter table teste enable row movement
*
ERROR at line 1:
ORA-08182: operation not supported while in Flashback mode
## Acima erro dado por executar em modo FLASHBACK por isso desativar conforme abaixo:
17:00:27 SQL> exec dbms_flashback.disable;
PL/SQL procedure successfully completed.
17:00:55 SQL> alter table teste enable row movement;
Table altered.
9- Agora sim! Apertem os cintos e vamos voltar no tempo!
17:01:02 SQL> FLASHBACK TABLE TESTE TO TIMESTAMP (TO_TIMESTAMP(‘2016-FEB-29 16:54:03’, ‘YYYY-MON-DD HH24:MI:SS’));
Flashback complete.
17:01:12 SQL> select * from teste;
no rows selected
17:04:06 SQL> FLASHBACK TABLE TESTE TO TIMESTAMP (TO_TIMESTAMP(‘2016-FEB-29 16:54:32’, ‘YYYY-MON-DD HH24:MI:SS’));
Flashback complete.
17:04:18 SQL> commit;
Commit complete.
17:04:22 SQL> select * from teste;
ID SALARY
———- ———-
1 50
2 100
FIM, THE END
É isso aí! Acredito que tenha conseguido entender bem o que eu quis dizer com “tecnologia que nos permite voltar no tempo”. Eu particularmente sou muito fã desta tecnologia, já usei, uso e acho que sempre haverá uma situação onde poderá nos ajudar quando o assunto e ver e voltar ao passado.
E você? Gostou deste post? Aprendeu algo novo? Compartilhe, comente participe.
Graaaande abraço! FOCO NA METAAAA!
Ahhh por falar nisso após bater a marca de 10.000 visualizações resolvi dobrar a meta…
Hummm acho que já ouvi isso em algum lugar… hehehehe.
Grande abraço e até a próxima!