Ola pessoal. Segue mais um artigo sobre o Oracle 12c. Dessa vez eu brinquei um pouco com a feature de RECOVER TABLE do RMAN, feature essa que foi uma das mais anunciadas pela Oracle. Essa feature facilita e muito a vida do DBA que precisa realizar o restore de apenas uma ou poucas tabelas corrompidas/truncadas “acidentalmente”. Ela nada mais é do que um Tablespace Point-in-time recovery mais automático, e como consequência disso, menos suscetível a erros.

 

Conceitos iniciais

Para realizar o RECOVER de uma tabela específica, o RMAN cria uma base de dados auxiliar (auxiliary instance) para ser usada durante o recover. O destino dessa base de dados auxiliar é definido pelo comando AUXILIARY DESTINATION. Depois da base ter sido criada, o RMAN realiza um export da tabela dessa base auxiliar e importa seus dados na base principal, via Datapump.

A base auxiliar restaura as tablespaces SYSTEM, SYSAUX, UNDO, SYSEXT (caso presente), e as tablespaces que contenham as tabelas a serem restauradas, portando, deve-se verificar antes do restore, se há espaço suficiente para armazenar essa instância auxiliar (soma das tablespaces SYSTEM, SYSAUX, UNDO, SYSEXT e tablespaces das tabelas a serem restauradas)

O RECOVER TABLE permite recuperar uma ou varias tabelas até um certo sequence#, SCN ou período de tempo – UNTIL [SEQUENCE|SCN|TIME] respectivamente.

A tabela usada para testes foi a seguinte:

Pré-requisitos

– Banco de dados deve estar em ARCHIVELOG

– Pelo menos um backup FULL das tablespaces SYSTEM, SYSAUX, UNDO, SYSEXT (caso presente), e as tablespaces que contenham as tabelas a serem restauradas, mais os archives até o período desejado de restore.

– Espaço suficiente para armazenar a instância auxiliar

– Caso a tabela a ser recuperada possua dependentes (child tables), estas também devem ser incluídas no RECOVER.

– O RECOVER deve ser executado a partir do Container.

– Case a tabela a ser recuperada esteja em um PDB, deve-se especificar a clausula OF PLUGGABLE DATABASE <nome_pdb>

 

Exemplos

… vejam que após o término da execução do comando acima, eu tenho meu dump, como havia definido na clausula DUMP FILE:

… após gerar o dump, a instância auxiliar é removida (assim como em todas as operações acima):

… como não confio muito nas coisas, gerei o arquivo DDL a partir do dump acima gerado, somente para ter certeza de que tudo foi bem:

… o comando acima me gerou um arquivo .sql contendo os DDLs do dump. Nele podemos ver que a tabela está lá bem como todas as suas costraints: