Como mover dados de tablespaces “normais” para tablespaces criptografadas?
No artigo de hoje vou demonstrar como mover objetos de tablespaces “normais” para tablespaces criptografadas. Para este exemplo, instalei na minha máquina o Oracle Database 11.2.0.3 Enterprise Edition e os objetos do esquema HR (Human Resources). Lembrando que essa feature está disponível apenas na versão Enterprise Edition.
O esquema HR é um esquema de uma aplicação de Recursos Humanos, criado pela Oracle, e muito utilizado nos treinamentos oficiais. Este pode ser instalado durante a criação do banco de dados através do utilitário DBCA ou através dos scripts customizados do nosso amigo Fábio Prado.
Podemos mover dados entre tablespaces utilizando o Oracle Data Pump ou através dos comandos SQL ALTER TABLE … MOVE TABLESPACE, ALTER INDEX … REBUILD TABLESPACE.
A seguir um passo-a-passo utilizando o Oracle Data Pump:
Passo 1: Criação da tabela de exemplo EMP2
A tabela EMP2 é uma cópia da tabela EMPLOYEES do esquema HR. A tabela contém informações sobre funcionários.
Passo 2: Export do esquema HR
Conforme explicado no artigo do Oracle Data Pump, antes de iniciar um export ou import, é necessário criar um “directory” no Oracle. O “directory” é um ponteiro para o diretório no sistema operacional e que o usuário deve ter privilégio de leitura/escrita, pois os dumps serão armazenados ali.
expdp hr/hr dumpfile=emp2.dmp logfile=emp2.log directory=dmpdir schemas=hr
Passo 3: Criação do wallet (carteira)
Antes de executar o comando de criação no SQL*Plus, é pré-requisito criar a estrutura de diretório que a wallet será armazenada. Suponha que você optou por armazenar no diretório C:\temp\wallet, o subdiretório “wallet” deve existir; se ele não existir e mesmo assim você tentar criar a wallet, receberá a mensagem ORA-28368: não foi possível criar a wallet automaticamente ou ORA-28368: cannot auto-create wallet
Além desta atividade de criação do diretório, deve-se alterar o arquivo sqlnet.ora para incluir a referência a wallet que será utilizada pelo banco de dados. Por default, em ambientes Windows, o sqlnet.ora está localizado em C:\app\oracle\product\11.2.0\db_1\NETWORK\ADMIN. Exemplo:
ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=C:\oracle\admin\db11g\wallet))) SQL> alter system set encryption key identified by camilla; Sistema alterado.
Passo 4: Criação da tablespace criptografada
Passo 5: Import da tabela EMP2 para a tablespace ENCRYPTED_TS
Pronto! Simples não é mesmo?
Agora vou exemplificar como mover a tabela DEPT3 para a tablespace ENCRYPTED_TS usando o comando
ALTER TABLE … MOVE TABLESPACE.
Passo 1: Criação da tabela DEPT3
A tabela DEPT3 é uma cópia da tabela DEPARTMENTS do esquema HR. A tabela contém a lista de departamentos dos funcionários.
Passo 2: Mover a tabela para tablespace ENCRYPTED_TS
Neste exemplo utilizei apenas 2 passos, pois no exemplo anterior a criação da wallet e alteração do arquivo sqlnet.ora já foi feito, e como estou utilizando a mesma base de dados não faz sentido refazê-los.
Importante: Quando movemos uma tabela para nova tablespace, todos os índices da tabela ficam inutilizáveis (status=UNUSABLE). A solução é reconstruir todos os índices, ALTER INDEX REBUILD. Você pode aproveitar a oportunidade para mover algum índice “perdido” para a tablespace de índice.
Conclusão
Pode-se escolher qual método utilizar para mover objetos entre tablespaces. É um trabalho que requer muita atenção do DBA para que nenhum objeto fique para trás, também é necessário fazer o levantamento correto de todos os objetos e seus tipos, com o resultado verificar se existe alguma particularidade e tratá-las da melhor forma.
Se for preciso mover uma quantidade significativa de dados, utilize o Data Pump por ser mais rápido, prático e porque você não vai precisar gastar um certo tempo montando queries com os comandos ALTER TABLE MOVE TABLESPACE, ALTER INDEX REBUILD TABLESPACE e etc.
Se você for mover uma ou duas tabelas pequenas, pode até utilizar os comandos SQL para movimentar os dados entre as tablespaces.
Referências
Até o próximo artigo!