Saturday, August 29, 2009

Flashback Data Archive (Oracle Total Recall) III

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,
JC

No comments: