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:
Fabricio,
Além da recover tables, esclareci muitas outras dúvidas através do site. Parabéns e obrigado!