No curso normal dos eventos em um banco de dados, os comandos DMLs (INSERT, UPDATE e DELETE) e SELECT são utilizados para extrair e inserir dados no banco de dados, porém há situações em que será necessário um método muito mais rápido e eficiente para realizar operações de grande volume.
Antes da versão Oracle 10g, era utilizado o utilitário export e import, que realizava a extração/importação dos dados como um processo de usuário no sistema operacional, usando uma sessão para recuperar os dados e transformá-los em arquivos, para depois salvá-los no sistema operacional.
Após a chegada da versão Oracle 10g, o utilitário padrão passou a ser o Oracle Data Pump usando os clientes expdp e impdp, que rodam como um processo de servidor. Isso melhora consideravelmente o desempenho da extração e importação de dados, pois, por ser um processo de servidor, o acesso aos arquivos de dados e a SGA serão diretos, não sendo mais necessário recuperar os mesmos através de uma sessão como era realizado nos utilitários anteriores.
O Oracle Data Pump é também base para muitos outros recursos-chave no banco de dados Oracle, como AWR, replicação Streams-Based, Logical Standby, Grid e em tablespaces transportáveis (Transportable tablespace). No entanto, não é o objetivo deste artigo detalhar cada um desses recursos.
Além do ganho em performance, os utilitários expdp e impdp trouxeram ganho na administração. É possível gerenciar o andamento de vários jobs se conectando a eles através de um usuário e senha que foram utilizados na execução da rotina ou com algum usuário que tenha os privilégios necessários para administrar o job.
Após conectado a um determinado job, o mesmo poderá ser consultado, pausado, reiniciado, interrompido, ou até mesmo ter alguns parâmetros alterados. Iremos realizar a administração de um job mais adiante.
Quando um job do Data Pump é iniciado, ao menos dois processos se iniciam: um processo Data Pump Master (DMnn) e um ou mais processos Worker (DWnn). Como o nome sugere, o processo mestre irá controlar os outros processos workers. Se for utilizado paralelismo, cada DWnn poderá fazer uso de dois ou mais servidores de execução paralela (Pnnn). O processo interno do Oracle Data Pump não é o escopo desse artigo, sendo assim, não entraremos em mais detalhes referentes ao funcionamento interno do utilitário.
Modos de exportação usando Oracle Data Pump
O Oracle Data Pump possui alguns modos específicos de exportação de dados que podem ser especificados na linha de comando ou usando o arquivo de parâmetros. Os modos que estão disponíveis para o Data Pump Export são:
- "FULL EXPORT MODE";
- "SCHEMA MODE";
- "TABLE MODE";
- "TABLESPACE MODE";
- "TRANSPORTABLE TABLESPACE MODE".
Neste artigo iremos utilizar alguns desses modos, os demais poderão ser consultados na documentação de referência da Oracle 11gR2.
O modo "FULL EXPORT MODE" equivale à exportação completa do banco de dados, todos os dados e meta dados que estiverem no banco de dados, sendo uma exportação de todos os schemas e objetos presentes no banco. Para a execução do Data Pump Export nesse nível, é necessário que o usuário que estiver executando a rotina de exportação tenha o privilégio DATA PUMP_EXP_FULL_DATABASE.
O modo de exportação por schema, "SCHEMA MODE", ocorre quando é especificado o parâmetro schemas e equivale à exportação específica de alguns determinados que forem especificados na linha de comando ou através dos arquivos de parâmetro. Esse modo é o padrão, sendo necessário ter o privilégio DATA PUMP_EXP_FULL_DATABASE para então poder especificar uma lista de schemas a serem exportados.
Se o usuário utilizado na execução da rotina não tiver os privilégios necessários para exportação completa (FULL) do banco de dados, o mesmo poderá somente exportar seu próprio schema.
Objetos que estejam cruzados entre schemas, como uma trigger que está habilitada para uma tabela residente em um determinado schema, mas que pertence a outro que não for especificado no momento da exportação, não serão exportados. A menos que o schema em que o objeto pertence esteja ou seja adicionado na lista dos exportados. É possível especificar todos eles da lista um a um ou através do parâmetro "FULL", o qual irá exportá-los no banco, exceto se houver alguma restrição utilizada com o parâmetro EXCLUDE.
O modo de exportação conhecido como “TABLE MODE” é especificado utilizando o parâmetro TABLES. Nesse modo, somente aquelas tabelas que forem especificadas serão exportadas além de outros objetos pertencentes ao schema em questão. Para utilização desse modo, também é necessário que o usuário tenha o privilégio DATA PUMP_EXP_FULL_DATABASE para exportar tabelas que não estejam no próprio schema, caso contrário, o usuário poderá export ...