Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Fazendo dump de tabelas no oracle 10g usando procedimento PL/SQL


Como você está no 10g, você pode fazer isso com a API Data Pump. Você precisa ter acesso de leitura e gravação em um objeto de diretório que mapeia para o diretório do SO de destino.

No exemplo a seguir estou exportando duas tabelas, EMP e DEPT, para um arquivo chamado EMP.DMP em um diretório identificado por DATA_PUMP_DIR.
SQL> declare
  2      dp_handle       number;
  3  begin
  4      dp_handle := dbms_datapump.open(
  5      operation   => 'EXPORT',
  6      job_mode    => 'TABLE');
  7
  8    dbms_datapump.add_file(
  9      handle    =>  dp_handle,
 10      filename  => 'emp.dmp',
 11      directory => 'DATA_PUMP_DIR');
 12
 13    dbms_datapump.add_file(
 14      handle    => dp_handle,
 15      filename  => 'emp.log',
 16      directory => 'DATA_PUMP_DIR',
 17      filetype  => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
 18
 19    dbms_datapump.metadata_filter(
 20      handle => dp_handle,
 21      name   => 'NAME_LIST',
 22      value  => '''EMP'',''DEPT''');
 23
 24    dbms_datapump.start_job(dp_handle);
 25
 26    dbms_datapump.detach(dp_handle);
 27  end;
 28  /    

PL/SQL procedure successfully completed.

SQL> 

@DerekMahar pergunta:

"Existe uma ferramenta de bomba de dados ou API semelhante disponível para execução do lado do cliente"

DataPump, tanto a API PL/SQL quanto o utilitário do SO, gravam em diretórios Oracle. Um diretório Oracle deve representar um diretório do SO que seja visível para o banco de dados. Normalmente, esse é um diretório no servidor, embora eu suponha que seja teoricamente possível mapear uma unidade de PC para a rede. Você teria que convencer seu administrador de rede que esta é uma boa ideia, é uma venda difícil, porque não é...

Os utilitários IMP e EXP mais antigos lêem e gravam em diretórios de clientes, portanto, teoricamente, é possível fazer IMP de um arquivo de despejo local em um banco de dados remoto. Mas não acho que essa seja uma abordagem prática. Por sua natureza, os arquivos de despejo tendem a ser grandes, portanto, importar através de uma rede é lento e propenso a falhas. É uma solução muito melhor compactar o arquivo de despejo, copiá-lo para o servidor e importá-lo de lá.