Como usar o Flashback Query no Oracle 12c

Você sempre quis uma máquina do tempo? Tal coisa não existe. Ou não? O tempo 12c máquina conhecida como a Oracle Flashback permite-lhe voltar, avançar, e se recuperar de situações com facilidade. Flashback pode parecer intimidante, mas o recurso é simples.

Um recurso chamado Flashback Query é um dos mais simples e mais fácil de usar variações da tecnologia Oracle Flashback. Simplificando, ele permite que você consultar uma tabela em um ponto no passado. Isto significa que, apesar de todas as atualizações, inserções e exclusões que pode ter acontecido, você vê a mesa, tal como existia no momento em que você escolher.

Aqui está uma demonstração rápida com o esquema de exemplo, HR:

  1. Entrar e SQL * Plus como o usuário HR.

  2. Olhe para os dados em sua tabela de departamentos.

  3. Restringir a consulta para ambos minimizar a saída e fazer a demonstração mais evidente. Digite o seguinte:

    Você deve ver algo como isto:

    DEPARTMENT_ID department_name ------------- ------------------------------ 120 Treasury130 empresarial Tax140 Controle e linhas Credit150 Acionista Services160 Benefits170 Manufacturing180 Construction190 Contracting200 Operations210 TI Support220 NOC230 TI Helpdesk240 Governo Sales250 Retail Sales260 Recruiting270 Payroll16 selecionado.
  4. Modificar a tabela, removendo as linhas selecionadas na saída anterior. Para remover as linhas, tipo de

    Você deve ver o seguinte:

    16 linhas excluídas.
  5. Confirmar as alterações, digitando

    Você deve ver o seguinte:

    Commit completa.
  6. Executar a consulta original novamente.

    Você deve ver o seguinte:

    nenhuma linha selecionada

    O próximo passo é onde você usar a magia de Flashback Query. Pense no tempo antes da exclusão ocorreu. Neste exemplo caso, foi há cinco minutos.

  7. Digite algo semelhante ao seguinte para ver os dados, tal como existia há cinco minutos:

Você vê as linhas que existiam no Passo 2. A chave é a partir de cláusula TIMESTAMP. Para o alvo do timestamp, você pode ver que o exemplo usa a matemática sobre a função SYSDATE. SYSDATE representa o tempo atual, no momento.

Subtrair 1 de SYSDATE significa ontem. O exemplo que se subtrai a fracção 1/288, o que significa que cinco minutos, a partir SYSDATE. Para obter a fracção, o exemplo utiliza a seguinte fórmula:

24 (horas em um dia) x 60 (minutos e horas) = ​​1440 (minutos) em um dia

Então, 5 sobre 1440 é igual a 1 sobre 288.

Você também pode usar um timestamp explícito, em vez de uma função SYSDATE. Por exemplo:

selecione department_id, department_namefrom departmentsAS do timestamp TO_DATE ('16 -AUG 2013 20:04:00 ',' DD-MON-AAAA HH24: MI: SS '), onde manager_id é nulo-

Aqui está um truque. Suponha que você acidentalmente apagou as linhas e quer inseri-los de volta para sua mesa. Você pode usar o Flashback Query para fazer uma coisa dessas. Este vai ser muito mais rápido do que fazer uma recuperação RMAN a um ponto no tempo.

Para inserir suas linhas excluídas de volta para sua mesa, tipo

lt; inserir em departmentsselect * from departmentsAS do timestamp TO_DATE ('16 -AUG 2013 20:04:00 ',' HH24 DD-MON-YYYY: MI: SS '), onde manager_id é nulo->

Você deve ver o seguinte:

16 linhas criado.

Consultar a tabela e, quando estiver satisfeito, confirmar as alterações.

Você só pode flash back, tanto quanto a sua definição para o undo_retention parâmetro de instância. Por padrão, esse parâmetro é definido como 15 minutos (900 segundos). Se o tempo que você deseja voltar para é ainda mais do que o seu undo_retention, você pode não ser capaz de ver os seus dados e receberá um erro em seu lugar.

Antes de tomar a ponta anterior e definir o seu undo_retention para refletir no valor de um mês de tempo, consideram que isso fará com que a sua tabela de undo a crescer porque tem que armazenar imagens de seus dados antigos. Você deve equilibrar cuidadosamente a undo_retention realista ajuste com o consumo de espaço.

menu