Como determinar a esquemas dentro de um arquivo do Oracle Data Pump Export

StackOverflow https://stackoverflow.com/questions/95578

  •  01-07-2019
  •  | 
  •  

Pergunta

  • Eu tenho um arquivo de backup do banco de dados Oracle (DMP) que foi criado com expdp.
  • O ficheiro.dmp era uma exportação de um banco de dados inteiro.
  • Eu preciso restaurar um dos esquemas de dentro desse arquivo de despejo.
  • Eu não sei os nomes dos esquemas dentro deste arquivo de despejo.
  • Para usar impdp para importar os dados que eu preciso o nome do esquema para carga.

Então, eu preciso inspecionar o arquivo .dmp e lista de todos os esquemas em que, como eu faço isso?


Update (2008-09-18 13:02) - Informações mais detalhadas:

O comando impdp eu sou atual usando é:

impdp user/password@database directory=DPUMP_DIR 
      dumpfile=EXPORT.DMP logfile=IMPORT.LOG  

E o DPUMP_DIR está configurado corretamente.

SQL> SELECT directory_path
2  FROM dba_directories
3  WHERE directory_name = 'DPUMP_DIR';

DIRECTORY_PATH
-------------------------
D:\directory_path\dpump_dir\

E sim, o arquivo export.dmp é de facto nessa pasta.

A mensagem de erro que eu recebo quando eu executar o comando impdp é:

Connected to: Oracle Database 10g Enterprise Edition ...
ORA-31655: no data or metadata objects selected for job
ORA-39154: Objects from foreign schemas have been removed from import

Esta mensagem de erro é principalmente o esperado. Eu preciso o comando impdp ser:

impdp user/password@database directory=DPUMP_DIR dumpfile=EXPORT.DMP 
      SCHEMAS=SOURCE_SCHEMA REMAP_SCHEMA=SOURCE_SCHEMA:MY_SCHEMA

Mas para fazer isso, eu preciso do esquema de origem.

Foi útil?

Solução

Se você abrir o arquivo DMP com um editor que pode lidar com grandes arquivos, você pode ser capaz de localizar as áreas onde os nomes de esquema são mencionados. Apenas certifique-se de não mudar nada. Seria melhor se você abriu uma cópia do depósito inicial.

Outras dicas

exportações impdp o DDL de um backup dmp para um arquivo se você usar o SQLFILE parâmetro . Por exemplo, colocar isso em um arquivo de texto

impdp '/ as sysdba' dumpfile=<your .dmp file> logfile=import_log.txt sqlfile=ddl_dump.txt

Em seguida, verifique ddl_dump.txt para os espaços de tabelas, usuários e esquemas no backup.

De acordo com a documentação, isso não realmente modificar o banco de dados:

O SQL não é realmente executado, e o sistema de destino permanece inalterado.

Update (2008-09-19 10:05) - Solução:

Minha Solução: A engenharia social, eu cavei alguém duro e encontrou real, que sabia o nome do esquema
. Solução Técnica: Pesquisando na ficheiro.dmp fez deu o nome do esquema
. Uma vez que eu sabia o nome do esquema, eu procurei o arquivo de despejo e aprendeu onde encontrá-lo.

Coloca o nome esquemas foram vistos, na ficheiro.dmp:

  • <OWNER_NAME>SOURCE_SCHEMA</OWNER_NAME> Isto foi visto antes de cada nome de tabela / definição.

  • SCHEMA_LIST 'SOURCE_SCHEMA' Isto foi visto perto do final do .dmp.

Curiosamente, em torno da seção SCHEMA_LIST 'SOURCE_SCHEMA', ele também teve a linha de comando usado para criar o despejo, diretórios utilizados, arquivos par usados, versão do Windows que foi executado, e configurações de sessão de exportação (linguagem, formatos de data).

Assim, problema resolvido:)

Assumindo que você não tem o arquivo de log do trabalho expdp que gerou o arquivo em primeiro lugar, a opção mais fácil seria provavelmente a usar o SQLFILE parâmetro ter impdp gerar um arquivo de DDL (com base em uma importação completa). Então você pode pegar os nomes de esquema de arquivo. Não é o ideal, é claro, já que impdp tem que ler o arquivo de despejo inteira para extrair o DDL e, em seguida, novamente para obter o esquema que você está em interessado, e você tem que fazer um pouco de pesquisa arquivo de texto para as várias instruções CREATE USUÁRIO , mas deve ser factível.

A execução do comando impdp para produzir um SQLFile, você precisará executá-lo como um usuário que tem o papel DATAPUMP_IMP_FULL_DATABASE.

Ou ... executá-lo como um usuário privilegiado baixo e usar o MASTER_ONLY = YES opção, então inspecionar a tabela mestre. por exemplo.

select value_t 
from SYS_IMPORT_TABLE_01 
where name = 'CLIENT_COMMAND' 
and process_order = -59;

col object_name for a30
col processing_status head STATUS for a6
col processing_state head STATE for a5
select distinct
  object_schema,
  object_name,
  object_type,
  object_tablespace,
  process_order,
  duplicate,
  processing_status,
  processing_state
from sys_import_table_01
where process_order > 0
and object_name is not null
order by object_schema, object_name
/

http://download.oracle.com/ otndocs / products / database / enterprise_edition / utilitários / pdf / oow2011_dp_mastering.pdf

Passo 1: Aqui está um exemplo simples. Você tem que criar um arquivo de SQL a partir do arquivo de despejo usando a opção SQLFILE.

Passo 2: Grep para CREATE USER no arquivo SQL gerado (aqui tables.sql)

Exemplo aqui:

$ impdp directory=exp_dir dumpfile=exp_user1_all_tab.dmp  logfile=imp_exp_user1_tab sqlfile=tables.sql

Import: Lançamento 11.2.0.3.0 - Produção em Sex 26 abril 08:29:06 2013

Copyright (c) 1982, 2011, Oracle e / ou suas afiliadas. Todos os direitos reservados.

Usuário: / as sysdba

Processamento de tipo de objeto SCHEMA_EXPORT / PRE_SCHEMA / PROCACT_SCHEMA Job "SYS". "SYS_SQL_FILE_FULL_01" concluída com êxito em 8:29:12

$ grep "CREATE USER" tables.sql

CRIAR USUÁRIO "USER1" identificados por valores 'S: 270D559F9B97C05EA50F78507CD6EAC6AD63969E5E; BBE7786A5F9103'

Lot of DataPump opções explicado aqui http://www.acehints.com/p/ Site-map.html

A minha solução (semelhante a resposta de KyleLanser) (em uma caixa de Unix):

strings dumpfile.dmp | grep SCHEMA_LIST

Você precisa procurar OWNER_NAME.

cat -v dumpfile.dmp | grep -o '<OWNER_NAME>.*</OWNER_NAME>' | uniq -u

cat -v transformar o dumpfile em texto visível.

grep -o mostra apenas o jogo de modo que não vemos realmente long linhas

uniq -u remove duplicado linhas de modo que você vê menos saída.

Isso funciona muito bem, mesmo em grandes arquivos de despejo, e pode ser ajustado para uso em um script.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top