Flashback Data Archive
Olá,
Vamos ao terceiro artigo rápido explicando um pouco como funciona no Flashback Data Archive.
Eu removi um arquivo da nossa tablespace de testes “acidentalmente”.Como é um banco de testes em Windows,vamos resolver o problema:
idle> alter database open;
alter database open
*
ERRO na linha 1:
ORA-01157: não e possivel identificar/bloquear arquivo de dados 6 - consulte
arquivo de analise DBWR
ORA-01110: 6 do arquivo de dados: 'D:\DATA\FBDA01.DBF'
Solução:
idle> alter database datafile 'D:\DATA\FBDA01.DBF' offline;
Banco de dados alterado.
idle> alter database open ;
Banco de dados alterado.
Em outra janela:
SQL*Plus: Release 11.1.0.6.0 - Production on Sßb Ago 29 00:44:29 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Informe o nome do usußrio: sys / as sysdba
Informe a senha:
Conectado a:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
GLOBAL_NAME
---------------------------------------------------------------------sys@ORCL11G
sys@ORCL11G> drop tablespace fbda01 including contents and datafiles;
Tablespace eliminado.
Continuando o terceiro post…
No post anterior criamos uma tablespace para armazenar o nosso Flashback Data Archive e também o próprio flashback archive com um período de retenção de 5 anos(somente para teste).
Relembrando:
sys@ORCL11G> create tablespace fbda01
2 datafile ‘d:\data\fbda01.dbf' size 1g;
Tablespace criado.
sys@ORCL11G> create flashback archive fb_test
2 tablespace fbda01 retention 5 year;
Archive de flashback criado.
Esqueci de mencionar no post anterior mas você pode especificar uma quota na tablespace para um flashback data archive.
Ex.
sys@ORCL11G> create flashback archive fbtest02
2 tablespace fbda01 quota 250m
3 retention 2 year;
Flashback archive created.
sys@ORCL11G>
Vamos adicionar duas linhas na nossa tabela de testes:
sys@ORCL11G> select * from tb_test_fb;
no rows selected
Elapsed: 00:00:00.00
sys@ORCL11G>
sys@ORCL11G> insert into tb_test_fb values(8,10) ;
1 row created.
Elapsed: 00:00:00.04
sys@ORCL11G>
sys@ORCL11G> insert into tb_test_fb values(1,20);
1 row created.
Elapsed: 00:00:00.00
sys@ORCL11G>
Agora vamos testar um update na tabela e ver se realmente é gravado no flashback archive:
sys@ORCL11G> update tb_test_fb set x=16 where x=1 ;
1 row updated.
Elapsed: 00:00:00.02
sys@ORCL11G>
sys@ORCL11G> commit ;
Commit complete.
Elapsed: 00:00:00.02
sys@ORCL11G>
Consulta a tabela :
sys@ORCL11G> select * from tb_test_fb;
X Y
---------- ----------
8 10
16 20
Elapsed: 00:00:00.02
Será que conseguimos buscar do histórico armazenado no flashback archive?
sys@ORCL11G> select dbms_flashback.get_system_change_number from dual ;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1589292
Elapsed: 00:00:00.03
sys@ORCL11G>
sys@ORCL11G> update tb_test_fb set x=16 where x=1 ;
1 row updated.
Elapsed: 00:00:00.00
sys@ORCL11G> commit ;
Commit complete.
Elapsed: 00:00:00.00
sys@ORCL11G>
sys@ORCL11G>
sys@ORCL11G> select * from tb_test_fb ;
X Y
---------- ----------
8 10
16 20
Elapsed: 00:00:00.01
sys@ORCL11G>
sys@ORCL11G> select * from tb_test_fb
2 as of timestamp (systimestamp - interval '5' minute) ;
X Y
---------- ----------
8 10
1 20
Elapsed: 00:00:00.04
sys@ORCL11G>
sys@ORCL11G> select dbms_flashback.get_system_change_number from dual ;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1589821
Elapsed: 00:00:00.01
sys@ORCL11G> select sysdate from dual;
SYSDATE
-------------------
29/08/2009 01:50:05
Elapsed: 00:00:00.01
Como visto,conseguimos recuperar o valor antes da mudança como se fosse na tablespace de undo.
Foi um post simples,mas acredito que mostrou a funcionalidade desta feature.
Abs