Oracle Datapump – Conceito e Aplicação
Este artigo fornece uma visão geral das principais funcionalidades do Oracle Data Pump. Conhecido como Data Pump, surgiu a partir do Oracle 10g, permite mover dados e metadados (estrutura dos dados) de um banco de dados para outro com mais agilidade.
O DBA considera que o export é um backup lógico do banco de dados. Definimos backup lógico como a leitura de um conjunto de registros que são escritos para um ou mais arquivos. O import lê os dados contidos no(s) arquivo(s) e insere no banco de dados.
O Data Pump gerencia os seguintes tipos de arquivos:
- Dump: Arquivos que contém os dados e metadados que são movidos.
- Log: Arquivos de log que grava as mensagens associadas ao job em execução.
- SQL: Todos os comandos DDL gravados em um arquivo SQL.
Os arquivos Log e SQL sobrescrevem arquivos pré-existentes. Os arquivos Dump, utiliza-se o parâmetro REUSE_DUMPFILES=Y para especificar que o arquivo existente será substituído.
Arquitetura do Oracle Data Pump
O data pump é composto de três partes distintas:
- Os utilitários de linha de comando expdp e impdp. Ao digitar os comandos expdp e impdp na linha de comando do seu sistema operacional, o Oracle chama implicitamente a package DBMS_DATAPUMP.
- O pacote PL/SQL DBMS_DATAPUMP, também conhecida como Data Pump API. Esta API fornece alta velocidade na execução do export/import. Abaixo um exemplo de utilização da API para fazer export de um esquema:
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
l_dp_handle NUMBER;
l_last_job_state VARCHAR2(30) := 'UNDEFINED';
l_job_state VARCHAR2(30) := 'UNDEFINED';
l_sts KU$_STATUS;
BEGIN
l_dp_handle := DBMS_DATAPUMP.open(
operation => 'EXPORT',
job_mode => 'SCHEMA',
remote_link => NULL,
job_name => 'EMP_EXPORT',
version => 'LATEST');
DBMS_DATAPUMP.add_file(
handle => l_dp_handle,
filename => 'SCOTT.dmp',
directory => 'TEST_DIR');
DBMS_DATAPUMP.add_file(
handle => l_dp_handle,
filename => 'SCOTT.log',
directory => 'TEST_DIR',
filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
DBMS_DATAPUMP.metadata_filter(
handle => l_dp_handle,
name => 'SCHEMA_EXPR',
value => '= ''SCOTT''');
DBMS_DATAPUMP.start_job(l_dp_handle);
DBMS_DATAPUMP.detach(l_dp_handle);
END;
/
Uma vez que o processo foi iniciado, o status dele pode ser verificado através da query:
system@certifbd> select * from dba_datapump_jobs;
- O pacote PL/SQL DBMS_METADATA, também conhecida como Metadata API. Armazena definições de objetos em XML, é usado por todos os processos de carga e descarga dos metadados.
O Data Pump possui mecanismos para aumentar o desempenho dos jobs, o paralelismo.
O paralelismo é um job de export ou import sendo executado com o máximo de aproveitamento dos recursos do servidor (CPU, Memória, Processador).
Em geral, o grau de paralelismo deve ser definido para não mais que duas vezes o número de CPU em uma instância.
O paralelismo esta disponível apenas na versão Enterprise Edition, na versão Standard Edition o valor do parâmetro PARALLEL é igual a 1.
O usuário executor do expdp e impdp precisa de privilégio nas roles DATAPUMP_EXP_FULL_DATABASE e DATAPUMP_IMP_FULL_DATABASE. As roles são criadas automaticamente na instalação do Oracle e criação do banco de dados, elas permitem que o usuário faça export e import de objetos pertencentes a outros esquemas e permite monitorar os processos iniciados por outro usuário. Essas roles são poderosas, o DBA deve usá-las com muito cuidado e avaliar se um usuário pode ter acesso a elas.
Antes de iniciar um Export, deve-se especificar em qual diretório no servidor de banco de dados será mantido os arquivos de Log, Dump e/ou SQL. No exemplo abaixo, criamos o diretório dpump_dir1 que aponta para o diretório físico /usr/apps/datafiles. Depois indicamos que o usuário HR terá permissão para ler e escrever neste diretório.
Observação: É recomendado que somente o DBA execute os comandos.
SQL> CREATE DIRECTORY dpump_dir1 AS '/usr/apps/datafiles';
SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO hr;
Consultando a view ALL_DIRECTORIES podemos visualizar os diretórios existentes.
Se o diretório não for criado ou o usuário não tiver privilégio de leitura/gravação, o Oracle emitirá uma mensagem de erro.
O data pump não escreve no diretório local da máquina cliente, pois é uma tecnologia baseada em servidor.
Quando você move os dados do banco de dados, muitas vezes é necessário informar ao Oracle que estes dados serão armazenados em esquemas, tablespaces ou tabelas diferentes. Para isso utilizam-se os parâmetros abaixo:
REMAP_TABLE=[schema.]old_tablename[.partition]:new_tablename
REMAP_DATA=[schema.]tablename.column_name:[schema.]pkg.function
REMAP_TABLESPACE=source_tablespace:target_tablespace
REMAP_SCHEMA=source_schema:target_schema
REMAP_DATAFILE=source_datafile:target_datafile
Você iniciou um export e durante a execução descobriu que o espaço em disco no servidor quase chegou ao fim, logo você adiciona mais arquivos utilizando o comando ADD_FILE. No Import, todos os arquivos devem ser especificados no momento que o job é startado.
Help
O comando HELP=Y mostra todos os parâmetros disponíveis.
C:\Users\Administrator>expdp help=y
Export: Release 11.2.0.1.0 - Production on Sun May 19 11:34:32 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
The Data Pump export utility provides a mechanism for transferring data objects
between Oracle databases. The utility is invoked with the following command:
Example: expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
You can control how Export runs by entering the 'expdp' command followed
by various parameters. To specify parameters, you use keywords:
Format: expdp KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
Example: expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=scott
or TABLES=(T1:P1,T1:P2), if T1 is partitioned table
------------------------------------------------------------------------------
ATTACH
Attach to an existing job.
For example, ATTACH=job_name.
COMPRESSION
Reduce the size of a dump file.
Valid keyword values are: ALL, DATA_ONLY, [METADATA_ONLY] and NONE.
CONTENT
Specifies data to unload.
Valid keyword values are: [ALL], DATA_ONLY and METADATA_ONLY.
DIRECTORY
Directory object to be used for dump and log files.
DUMPFILE
Specify list of destination dump file names [expdat.dmp].
For example, DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp.
C:\Users\Administrator>impdp help=y
Import: Release 11.2.0.1.0 - Production on Sun May 19 11:38:06 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
The Data Pump Import utility provides a mechanism for transferring data objects
between Oracle databases. The utility is invoked with the following command:
Example: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
You can control how Import runs by entering the 'impdp' command followed
by various parameters. To specify parameters, you use keywords:
Format: impdp KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
Example: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp
------------------------------------------------------------------------------
ATTACH
Attach to an existing job.
For example, ATTACH=job_name.
CONTENT
Specifies data to load.
Valid keywords are: [ALL], DATA_ONLY and METADATA_ONLY.
DATA_OPTIONS
Data layer option flags.
Export/Import de tabelas
Para especificar as tabelas que serão exportadas utilizamos o parâmetro TABLES.
Segue um exemplo da sintaxe.
expdp system/Oracle2013@certifbd tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=expdpEMP_DEPT.log
impdp system/Oracle2013@certifbd tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=impdpEMP_DEPT.log
O parâmetro TABLE_EXISTS_ACTION=APPEND permite o import dos dados nas tabelas que já existem.
Exemplo do resultado de um export:
;;;
Export: Release 10.1.0.2.0 - Production on Tuesday, 23 March, 2004 10:34
Copyright (c) 2003, 2007, Oracle. All rights reserved.
;;;
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SCOTT"."SYS_EXPORT_TABLE_01": scott/******** tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=expdpEMP_DEPT.log
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 128 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "SCOTT"."DEPT" 5.656 KB 4 rows
. . exported "SCOTT"."EMP" 7.820 KB 14 rows
Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
*************************************************************************
Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:
/tmp/EMP_DEPT.dmp
Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 10:35
Exemplo do resultado de um import:
;;;
Import: Release 10.1.0.2.0 - Production on Tuesday, 23 March, 2004 10:34
Copyright (c) 2003, Oracle. All rights reserved.
;;;
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
Master table "SCOTT"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SCOTT"."SYS_IMPORT_TABLE_01": scott/********@db10g tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=impdpEMP_DEPT.log
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
. . imported "SCOTT"."DEPT" 5.656 KB 4 rows
. . imported "SCOTT"."EMP" 7.820 KB 14 rows
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 10:35
Export/Import de esquemas
O parâmetro OWNER foi substituído pelo parâmetro SCHEMAS que é usado para especificar os esquemas a serem exportados. Segue a sintaxe do comando:
expdp scott/tiger@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
impdp scott/tiger@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=impdpSCOTT.log
Exemplo do resultado de um export:
;;;
Export: Release 10.1.0.2.0 - Production on Tuesday, 23 March, 2004 10:34
Copyright (c) 2003, 2007, Oracle. All rights reserved.
;;;
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SCOTT"."SYS_EXPORT_SCHEMA_01": scott/********@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 192 KB
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "SCOTT"."DEPT" 5.656 KB 4 rows
. . exported "SCOTT"."EMP" 7.820 KB 14 rows
. . exported "SCOTT"."SALGRADE" 5.585 KB 5 rows
. . exported "SCOTT"."BONUS" 0 KB 0 rows
Master table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:
/tmp/SCOTT.dmp
Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 10:35
Exemplo do resultado de um import:
;;;
Import: Release 10.1.0.2.0 - Production on Tuesday, 23 March, 2004 10:34
Copyright (c) 2003, Oracle. All rights reserved.
;;;
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
Master table "SCOTT"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
Starting "SCOTT"."SYS_IMPORT_SCHEMA_01": scott/********@db10g schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=impdpSCOTT.log
Processing object type SCHEMA_EXPORT/SE_PRE_SCHEMA_PROCOBJACT/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."DEPT" 5.656 KB 4 rows
. . imported "SCOTT"."EMP" 7.820 KB 14 rows
. . imported "SCOTT"."SALGRADE" 5.585 KB 5 rows
. . imported "SCOTT"."BONUS" 0 KB 0 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Job "SCOTT"."SYS_IMPORT_SCHEMA_01" successfully completed at 10:35
Export/Import de banco de dados
O parâmetro FULL indica que um export completo do banco de dados é solicitado.
Segue a sintaxe do export e import full do banco de dados.
expdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=expdpDB10G.log
impdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=impdpDB10G.log
Exemplo do resultado do export full:
;;;
Export: Release 10.1.0.2.0 - Production on Tuesday, 23 March, 2004 10:34
Copyright (c) 2003, 2007, Oracle. All rights reserved.
;;;
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_FULL_01": system/********@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=expdpDB10G.log
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 78.62 MB
Processing object type DATABASE_EXPORT/TABLESPACE
Processing object type DATABASE_EXPORT/PROFILE
Processing object type DATABASE_EXPORT/SYS_USER/USER
Processing object type DATABASE_EXPORT/SCHEMA/USER
Processing object type DATABASE_EXPORT/ROLE
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/POST_TABLE_ACTION
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TRIGGER
Processing object type DATABASE_EXPORT/SCHEMA/VIEW/TRIGGER
Processing object type DATABASE_EXPORT/SCHEMA/JOB
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/POST_INSTANCE/PROCACT_INSTANCE
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/POST_INSTANCE/PROCDEPOBJ
Processing object type DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCOBJ
Processing object type DATABASE_EXPORT/SCHEMA/POST_SCHEMA/PROCACT_SCHEMA
. . exported "SYSMAN"."MGMT_SEVERITY" 4.744 MB 15276 rows
. . exported "SYSMAN"."MGMT_METRICS_1HOUR" 2.934 MB 39250 rows
. . exported "SYSMAN"."MGMT_METRICS_RAW" 2.404 MB 41870 rows
. . exported "SYSMAN"."MGMT_METRICS_1DAY" 624.6 KB 7596 rows
. . exported "SYSMAN"."MGMT_METRICS" 534.2 KB 2582 rows
. . exported "SYSMAN"."MGMT_STRING_METRIC_HISTORY" 558.8 KB 5246 rows
. . exported "SYSTEM"."TOOL__LRAW" 0 KB 0 rows
. . exported "SYSTEM"."TOOL__LTEXT" 0 KB 0 rows
. . exported "SYSTEM"."TOOL__MODULE" 0 KB 0 rows
. . exported "SYSTEM"."TOOL__PLSQL" 0 KB 0 rows
. . exported "TSMSYS"."SRS$" 0 KB 0 rows
Master table "SYSTEM"."SYS_EXPORT_FULL_01" successfully loaded/unloaded
*************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_FULL_01 is:
/tmp/DB10G.dmp
Job "SYSTEM"."SYS_EXPORT_FULL_01" successfully completed at 10:35
INCLUDE e EXCLUDE
Usando os parâmetros EXCLUDE e INCLUDE, podemos escolher quais tipos de objetos exportar e importar. O exemplo a seguir exporta todos os objetos do esquema HR exceto views, packages e functions.
expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_exclude.dmp EXCLUDE=VIEW,PACKAGE,FUNCTION
O próximo exemplo exporta todas as tabelas (e seus objetos dependentes) do esquema HR.
expdp hr INCLUDE=TABLE DUMPFILE=dpump_dir1:exp_inc.dmp NOLOGFILE=YES
Vários objetos podem ser referenciados em uma instrução usando os operadores LIKE e IN.
EXCLUDE=SCHEMA:"LIKE 'SYS%'"
EXCLUDE=SCHEMA:"IN ('OUTLN','SYSTEM','SYSMAN','FLOWS_FILES','APEX_030200','APEX_PUBLIC_USER','ANONYMOUS')"
Export/Import na Rede (NETWORK_LINK)
O parâmetro NETWORK_LINK indica que um dblink será usado como fonte para um export/import. O seguinte dblink será usado para demonstrar a sua utilização.
CONN / AS SYSDBA
GRANT CREATE DATABASE LINK TO test;
CONN test/test
CREATE DATABASE LINK remote_scott CONNECT TO scott IDENTIFIED BY tiger USING 'DEV';
O valor especificado na cláusula USING precisa estar definido no arquivo TNSNAMES.ORA.
No exemplo a seguir, será executado o export da tabela EMP localizada no banco de dados remoto “DEV”. A conexão com o banco será feito com o usuário “scott” e senha “tiger”.
O arquivo “.dmp” será criado no servidor local ao invés do servidor remoto.
Tanto o usuário “scott” quanto o usuário “test” precisam ter acesso a role EXP_FULL_DATABASE.
expdp test/test@db10g tables=SCOTT.EMP network_link=REMOTE_SCOTT directory=TEST_DIR dumpfile=EMP.dmp logfile=expdpEMP.log
No import também é necessário especificar o parâmetro NETWORK_LINK=REMOTE_SCOTT. A diferença é que a tabela EMP será importada diretamente do servidor remoto para o servidor local.
O parâmetro DUMPFILE não é utilizado porque o import não gera arquivos “.dmp”. A criação do diretório é necessária para que o arquivo log seja gerado durante a operação.
Tanto o usuário “test” quanto o usuário “scott” precisam ter acesso a role IMP_FULL_DATABASE.
impdp test/test@db10g tables=SCOTT.EMP network_link=REMOTE_SCOTT directory=TEST_DIR logfile=impdpSCOTT.log remap_schema=SCOTT:TEST
Tabelas Externas
A Oracle incorporou suporte ao data pump dentro de tabelas externas.
CREATE TABLE emp_xt
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY test_dir
LOCATION ('emp_xt.dmp')
)
AS SELECT * FROM emp;
SELECT * FROM emp_xt;
DROP TABLE emp_xt;
CREATE TABLE emp_xt (
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2))
ORGANIZATION EXTERNAL (
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY test_dir
LOCATION ('emp_xt.dmp')
);
SELECT * FROM emp_xt;
Export utilizando Flashback
O exp utiliza o parâmetro CONSISTENT=Y para indicar que o export deve ser consistente num determinado ponto no tempo. Por default o utilitário expdp é consistente apenas em tabelas.
Se você quer que todas as tabelas no export fiquem consistentes no mesmo ponto no tempo, utilize os parâmetros FLASHBACK_SCN ou FLASHBACK_TIME.
O valor do parâmetro FLASHBACK_TIME é convertido para o SCN mais próximo para o tempo especificado.
expdp ..... flashback_time=systimestamp
# In parameter file.
flashback_time="to_timestamp('09-05-2011 09:00:00', 'DD-MM-YYYY HH24:MI:SS')"
# Escaped on command line.
expdp ..... flashback_time=\"to_timestamp\(\'09-05-2011 09:00:00\', \'DD-MM-YYYY HH24:MI:SS\'\)\"
Para fazer um export consistente especificando um tempo passado ou SCN é necessário possuir espaço suficiente na UNDO para manter a leitura consistente dos dados. Execute a query a seguir para obter o SCN desejado.
SELECT current_scn FROM v$database;
SELECT DBMS_FLASHBACK.get_system_change_number FROM dual;
SELECT TIMESTAMP_TO_SCN(SYSTIMESTAMP) FROM dual;
Utilize o SCN no parâmetro FLASHBACK_SCN.
expdp ..... flashback_scn=5474280
As querys a seguir podem ser úteis para a conversão entre TIMESTAMP e SCN.
SELECT TIMESTAMP_TO_SCN(SYSTIMESTAMP) FROM dual;
SELECT SCN_TO_TIMESTAMP(5474751) FROM dual;
COMPRESSION
Este parâmetro permite comprimir o export. Além disso, o parâmetro de inicialização COMPATIBLE deve ser definido como “11.0.0” ou superior exceto para a opção METADATA_ONLY que esta disponível com COMPATIBLE=10.2.
A sintaxe do comando é:
COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
EXCRYPTION e ENCRYPTION_PASSWORD
Esses parâmetros estão disponíveis somente na versão Enterprise Edition. Além disso, o parâmetro de inicialização da instância COMPATIBLE deve ser definido como “11.0.0” ou superior.
ENCRYPTION = {ALL | DATA_ONLY | ENCRYPTED_COLUMNS_ONLY | METADATA_ONLY | NONE}
ALL: Metadados e dados são criptografados.
DATA_ONLY: Apenas os dados são criptografados.
ENCRYPTED_COLUMNS_ONLY: Apenas colunas criptografadas são escritas para o dump, em um formato de criptografia.
METADATA_ONLY: Somente os metadados são criptografados.
NONE: Nada é criptografado.
expdp test/test schemas=TEST directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log encryption=all encryption_password=password
O valor default é NONE.
ENCRYPTION_ALGORITHM
Define o algoritmo de criptografia a ser utilizado durante o export. O valor default é “AES128”. Exemplo:
expdp test/test schemas=TEST directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log encryption=all encryption_password=password encryption_algorithm=AES256
ENCRYPTION_MODE
Especifica o tipo de segurança usado durante o export e import.
ENCRYPTION_MODE = { DUAL | PASSWORD | TRANSPARENT }
expdp test/test schemas=TEST directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log encryption=all encryption_password=password encryption_mode=password
TRANSPORTABLE
O parâmetro TRANSPORTABLE é similar ao parâmetro TRANSPORT_TABLESPACES da versão 10g.
TRANSPORTABLE = {ALWAYS | NEVER}
Algumas considerações:
- Este parâmetro é aplicável somente no export de tabelas.
- O usuário executor do export deve ter o privilégio EXP_FULL_DATABASE.
- As tablespaces que contém os objetos fonte devem estar em read-only.
- O parâmetro de inicialização COMPATIBLE deve ser definido como 11.0.0 ou superior.
- A tablespace default do usuário executor do export não deve ser a mesma que qualquer uma das tablespaces que serão movidas.
PARTITION_OPTIONS
O parâmetro PARTITION_OPTIONS determina como as partições serão tratadas durante o export e import. A sintaxe é mostrada abaixo.
PARTITION_OPTIONS={none | departition | merge}
expdp test/test directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log tables=test.tab1 partition_options=merge
NONE: As partições são criadas exatamente como elas foram exportadas.
DEPARTITION: Cada partição e subpartição são criadas como uma tabela separada.
MERGE: Combina todas as partições em uma única tabela.
DATA_OPTIONS
SKIP_CONSTRAINT_ERRORS
Durante o import usando o método de acesso de tabela externa, este parâmetro permite que os erros de violação de constraints sejam ignorados e o import não é abortado. O problema dessa opção é a integridade dos dados ficar prejudicada.
DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS
impdp test/test tables=TAB1 directory=TEST_DIR dumpfile=TEST.dmp logfile=impdpTEST.log data_options=SKIP_CONSTRAINT_ERRORS
XML_CLOBS
Definindo o parâmetro DATA_OPTIONS=XML_CLOBS especifica que todas as colunas XMLTYPE devem ser exportadas como objetos CLOB descompactados.
expdp test/test tables=TAB1 directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log version=11.1 data_options=XML_CLOBS
O Que Acontece Durante A Execução Do Data Pump?
Para todo export e import, um processo master é criado.
O processo master controla o job inteiro, incluindo a comunicação com as máquinas clientes, criando e controlando um pool de processos e executando operações de registro.
Enquanto os dados e metadados são transferidos, uma tabela master é usada para rastrear o progresso do job.
Durante o export, a tabela master grava a localização dos objetos do banco de dados dentro de um conjunto de arquivos (dump files). O Export cria e mantém a tabela master até a execução do job. No final da execução, o conteúdo da tabela é gravado em um arquivo no conjunto de arquivo (dump file). Durante o import, a tabela master é carregada a partir de um conjunto de arquivos e é usada para controlar a sequência das operações, para localizar objetos que precisam ser importados na base de dados de destino.
A tabela master é criada no esquema do usuário que executa o processo. O nome da tabela master é o mesmo do job que a criou, portanto, não é recomendado nomear explicitamente o job do data pump para o mesmo nome de uma tabela ou view que já existe.
A tabela master é mantida ou excluída dependendo as circunstâncias abaixo:
- Após o job ser finalizado com sucesso, a tabela é excluída.
- Se um job é interrompido usando o comando STOP_JOB, a tabela é mantida para uso no restart do job.
- Se um job é abortado usando o comando KILL_JOB, a tabela é excluída e o job não poderá ser reiniciado.
- Se um job finalizar inesperadamente, a tabela é mantida.
Você poderá excluí-la se não tem intenção de reinicializar o job.
- Se um job parar antes de começar, ou seja, antes que qualquer objeto do banco de dados seja copiado, a tabela será excluída.
Como monitorar um job de export/import?
- Consultando as views de dicionário DBA_DATAPUMP_JOBS, USER_DATAPUMP_JOBS, DBA_DATAPUMP_SESSIONS.
system@db10g> select * from dba_datapump_jobs;
OWNER_NAME JOB_NAME OPERATION
------------------------------ ------------------------------ ------------------------------
JOB_MODE STATE DEGREE ATTACHED_SESSIONS
------------------------------ ------------------------------ ---------- -----------------
SYSTEM SYS_EXPORT_FULL_01 EXPORT
FULL EXECUTING
2. Digitando “status” no prompt de comando.
Export> status
Job: SYS_EXPORT_FULL_01
Operation: EXPORT
Mode: FULL
State: EXECUTING
Bytes Processed: 0
Current Parallelism: 1
Job Error Count: 0
Dump File: D:\TEMP\DB10G.DMP
bytes written: 4,096
Worker 1 Status:
State: EXECUTING
Object Schema: SYSMAN
Object Name: MGMT_CONTAINER_CRED_ARRAY
Object Type: DATABASE_EXPORT/SCHEMA/TYPE/TYPE_SPEC
Completed Objects: 261
Total Objects: 261
- Criando um arquivo de log que manterá informações como o nome do job, a descrição dos parâmetros, uma estimativa da quantidade de dados a serem exportados, descrição da operação atual ou item em execução, arquivos utilizados, erros encontrados e o estado final do job (STOPPED ou COMPLETED).
Eu utilizo a terceira opção, pois posso enviar o log por e-mail para usar como evidência.
O Data Pump quando em execução, inclui uma entrada na view V$SESSION_LONGOPS indicando o progresso do job. Esta entrada é periodicamente atualizada para refletir a real quantidade de dados transferidos.
As colunas da view V$SESSION_LONGOPS que são relevantes para o data pump são:
- USERNAME – job owner
- OPNAME – job name
- TARGET_DESC – job operation
- SOFAR – megabytes transferred thus far during the job
TOTALWORK – estimated number of megabytes in the job
- UNITS – megabytes (MB)
- MESSAGE – a formatted status message of the form:
‘job_name: operation_name : nnn out of mmm MB done’
Referências
- http://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_overview.htm#SUTIL100
- http://docs.oracle.com/cd/E11882_01/server.112/e25789/cncptdba.htm#CNCPT1277
- http://www.oracle-base.com/articles/10g/oracle-data-pump-10g.php#MiscellaneousInformation
- http://www.oracle-base.com/articles/11g/data-pump-enhancements-11gr1.php
Até o próximo artigo!