Track the Changes to Data over a Period of Time

Em um post anterior vimos como recuperar o estado da tabela em um tempo anterior. Veremos mais 3 operações de FLASHBACK.

Flashback Query (FQ)

Essa será a primeira operação que veremos neste post. Esta operação é apenas uma cláusula adicional ao SELECT que já conhecemos. Podemos fazer uma query de dados que existiram em um tempo passado sem a necessidade de restaurar esses dados. Para fazer isso no final de um SELECT comum devemos adicionar as palavras reservadas AS OF TIMESTAMP timestamp_desejado. O timestamp desejado é a data precisa da qual queremos ver como era o banco de dados. Vamos para um exemplo para simplificar. Vamos criar uma tabela e adicionar dados nela através de dois commits.

FLASHBACK QUERY

FLASHBACK QUERY

Após criar a tabela e a sequencia, adicionamos algumas linhas, 3 e um commit, e depois mais 3 linhas e um commit Após cada commit tem uma pausa de 15 segundos e depois de tudo isto fazemo o nosso Flashback Query, um SELECT com AS OF. Especificamos que o nosso timestamp é de 20 segundos atrás, ou seja, entre os dois commits. Vejam que pelo resultado só tinha 3 linhas, que era o que existia a 20 segundos atrás, mas se fizemos a query sem um timestamp terá o resultado abaixo, com 6 linhas.

A configuração do banco de dados Oracle para realizações desse tipo geralmente é uma janela de tempo pequena. Cerca de minutos, horas ou um dia, ou seja, não podemos geralmente fazer uma query dessa especificando meses ou anos atrás. Temos mais uma opção ao realizar uma FQ que oa invés de utilizar um TIMESTAMP poderemos utilizar um SCN. E para obter o TIMESTAMP OU SCN não podemos utilizar subquery.

Flashback Version Query (FVQ)

Com o FVQ podemos ver linhas de múltiplas versões de commits em um período de tempo. A observação a se fazer é que FVQ não riá mostrar linhas que não sofreram um commit, ou seja, se fizeram um rollback e não um commit ela não será visualizada em um FVQ.

A sintaxe é bem parecida com a anterior, FQ.

SELECT colunas
FROM tabela
VERSIONS BETWEEN TIMESTAMP timestamp1 AND timestamp2;

Podemos utilizar SCN no lugar do TIMESTAMP. Temos também as palavras reservadas MINVALUE e MAXVALUE em que representam o menor e o maior valor SCN ou TIMESTAMP disponíveis para esta operação. O WHERE deverá ser após a cláusula VERSIONS. Não podemos utilizar em uma view, mas podemos utilizar para criar uma view.

Existe também uma série de pseudocolumns que poderá nos ajudar a identificar as colunas.

  • VERSIONS_STARTTIME | VERSIONS_STARTSCN – Tempo inicial ou SCN da versão quando a linha foi criada. NULL se a linha foi criada antes do tempo estipulado no BETWEEN
  • VERSIONS_ENDTIME | VERSIONS_ENDTSCN – Hora em que expirou ou o SCN da versão da linha. NULL se a linha é corrente ou foi deletada
  • VERSIONS_XID – Identifica a transação que criou a linha
  • VERSIONS_OPERATION – A operação que criou ou modificou a linha. I para INSERT, D para DELETE e U para UPDATE
  • Podemos também combinar FVQ com FQ. FVQ deverá vir antes do FQ. Vejamos um exemplo de um FVQ.

    FLASHBACK VERSION QUERY

    FLASHBACK VERSION QUERY

    Flashback Transaction Query

    Esta última operação que veremos agora se difere das outras, que é apenas uma query em uma view do dicionário de dados chamada FLASHBACK_TRANSACTION_QUERY. Vejam a descrição dessa view abaixo.

    Nome Nulo Tipo
    —————- —- ————–
    XID RAW(8 BYTE)
    START_SCN NUMBER
    START_TIMESTAMP DATE
    COMMIT_SCN NUMBER
    COMMIT_TIMESTAMP DATE
    LOGON_USER VARCHAR2(30)
    UNDO_CHANGE# NUMBER
    OPERATION VARCHAR2(32)
    TABLE_NAME VARCHAR2(256)
    TABLE_OWNER VARCHAR2(32)
    ROW_ID VARCHAR2(19)
    UNDO_SQL VARCHAR2(4000)

    Algo que iremos nos concentrar aqui é a primeira coluna XID. Vimos isto anteriormente em FVQ, em que podemos verificar esse valor. XID é um que identifica uma transaction, cada transaction tem um valor único. O valor é armazenado em RAW, para podemos “ler” deveremos converter ele em hexadecimal utilizando a função ROWTOHEX, podemos fazer o contrário também utilizando HEXTORAW.

    Essa coluna é muito importante em conjunto com outra coluna, a UNDO_SQL, para desfazer tudo o que foi realizado pela transação identificada pelo XID, que armazena um código SQL para desfazer tudo que foi feito.

    Anúncios

    Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

    Marcado com: , , , , , , , , , , , , , , ,
    Publicado em Certificação Oracle, SQL, SQL Expert

    Deixe um comentário

    Preencha os seus dados abaixo ou clique em um ícone para log in:

    Logotipo do WordPress.com

    Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

    Foto do Google

    Você está comentando utilizando sua conta Google. Sair /  Alterar )

    Imagem do Twitter

    Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

    Foto do Facebook

    Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

    Conectando a %s

    Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

    Esse Blog é reconhecido pela
    Certificações
    Sou articulista

    Clique para seguir este blog e receber notificações via email de novos posts.

    Tércio Costa

    Tércio Costa

    Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

    Links Pessoais

    Serviços verificados

    Visualizar Perfil Completo →

    Total de Visualizações da Página
    • 138.077 Visualizações
    %d blogueiros gostam disto: