AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 278785
Accepted
Patrick
Patrick
Asked: 2020-10-28 20:08:55 +0800 CST2020-10-28 20:08:55 +0800 CST 2020-10-28 20:08:55 +0800 CST

Importar tabelas sem restrições da exportação de esquema

  • 772

Estou tentando fazer uma importação usando bomba de dados, mas estou lutando para encontrar as opções corretas. A exportação foi considerada como uma exportação de esquema. Estou tentando importar apenas as tabelas, sem outros objetos de banco de dados.

estou usando atualmente

INCLUDE=TABLE
TABLE_EXISTS_ACTION=REPLACE
REMAP_SCHEMA=
REMAP_TABLESPACE=

Isso está importando corretamente as tabelas, mas estou um pouco surpreso ao ver que a importação também está criando as restrições e gatilhos nas tabelas, ou tentando pelo menos. Os gatilhos estão falhando porque incluem um nome de esquema que não existe no banco de dados.

Achei que usando INCLUDE=TABLEapenas as tabelas seriam incluídas. Aparentemente não é o caso. Não estou conseguindo usar EXCLUDE=CONSTRAINTou EXCLUDE=TRIGGERpois já estou usando INCLUDE para limitar a importação a apenas tabelas.

Alguma idéia de como eu poderia estruturar a importação para importar apenas tabelas?

oracle oracle-11g-r2
  • 2 2 respostas
  • 4562 Views

2 respostas

  • Voted
  1. Best Answer
    John K. N.
    2020-10-29T06:52:44+08:002020-10-29T06:52:44+08:00

    Você está certo ao afirmar que pensei que usando INCLUDE=TABLEapenas as tabelas seriam incluídas , mas inclui todos os objetos relacionados também. Isso significa que as restrições e acionadores serão criados para você quando você usar INCLUDE=TABLEna importação.


    Solução possível

    Se você tiver a possibilidade de recriar o dump usando o expdpcomando, talvez queira apenas exportar as tabelas do esquema necessário e usar o INCLUDEparâmetro.

    INCLUIR

    Objetivo: Permite filtrar os metadados exportados especificando objetos e tipos de objetos para o modo de exportação atual. Os objetos especificados e todos os seus objetos dependentes são exportados. As concessões desses objetos também são exportadas.

    exp_include.par

    Este é basicamente o arquivo de parâmetro expdp.

    FULL=N
    ...
    SCHEMAS=<your_schema(s)>
    INCLUDE=TABLE
    ...
    

    Isso criará um dump do esquema necessário e conterá apenas tabelas e objetos dependentes.


    Depois de gerar o *.dmparquivo necessário, importe usando a EXCLUDE=...opção.

    EXCLUIR

    Objetivo: Permite filtrar os metadados importados especificando objetos e tipos de objetos a serem excluídos do trabalho de importação.

    imp_exclude.par

    Este é o arquivo de parâmetro para o impdp.

    FULL=Y
    ...
    EXCLUDE=STATISTIC
    EXCLUDE=CONSTRAINT
    EXCLUDE=TRIGGER
    ...
    

    Isso deve resultar na importação correta das tabelas.

    Material de referência

    • 2 Exportação do Data Pump (Oracle Docs)
    • 3 Importação do Data Pump (Oracle Docs)
    • 2
  2. miracle173
    2020-10-30T01:18:28+08:002020-10-30T01:18:28+08:00

    Os parâmetros EXCLUDE e INCLUDE não podem ser especificados no mesmo trabalho de importação. Você pode usar um dos métodos a seguir para obter essas tabelas e índices, mas nenhum gatilho, restrição ou restrição referencial é importado. Se você também não quiser índices, poderá excluí-los da importação de maneira semelhante.

    Método 1: você inclui tabelas em sua importação e usa outras diretivas INCLUDE para excluir gatilhos, restrições e restrições referenciais da importação. Um especifica o seguinte:

    INCLUDE=TABLE
    INCLUDE=TRIGGER:"=''"
    INCLUDE=CONSTRAINT:"=''"
    INCLUDE=REF_CONSTRAINT:"=''"
    

    Não há gatilho que satisfaça a cláusula fornecida, o que significa que o nome do gatilho é uma string vazia. O mesmo vale para as restrições de restrição e referencial

    Método 2: Você não usa a diretiva INCLUDE para especificar que somente tabelas devem ser importadas, mas usa um método diferente. Então você pode usar EXCLUDE para evitar a importação de gatilhos, restrições e restrições referenciais.

    Você pode especificar a lista de tabelas que deseja importar em uma importação de tabela

    TABLES=owner1.table1, owner2.table2, ...
    EXCLUDE=TRIGGER, CONSTRAINT, REF_CONSTRAINT
    

    Se a lista de tabelas for grande, esse método não é muito útil.

    Outra maneira de especificar apenas tabelas é usar uma importação de tablespace. O número de espaços de tabela usados ​​pelas tabelas no arquivo de despejo geralmente é muito menor que o número de tabelas

    TABLESPACES=tablespace1,  tablespace2, ...
    EXCLUDE=TRIGGER, CONSTRAINT, REF_CONSTRAINT
    

    Exemplos

    Eu uso o Oracle Database 11.2.0.4 Enterprise Edition para esses exemplos.

    Criei um esquema SCOTT com algumas tabelas, gatilhos, procedimentos, restrições e restrições referenciais. Então fiz uma exportação de esquema com os seguintes parâmetros

    diretório=SCOTT
    esquemas=SCOTT
    dumpfile=schema.dmp
    logfile=exp_schema.log
    

    Aqui estão as partes relevantes do arquivo de log desta exportação

    Iniciando "SYSTEM".."SYS_EXPORT_SCHEMA_01": system/******** parfile=exp_schema.par
    Estimativa em andamento usando o método BLOCKS...
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TABLE_DATA
    Estimativa total usando o método BLOCKS: 192 KB
    Processando o tipo de objeto SCHEMA_EXPORT/USER
    Processando o tipo de objeto SCHEMA_EXPORT/SYSTEM_GRANT
    Processando o tipo de objeto SCHEMA_EXPORT/ROLE_GRANT
    Processando o tipo de objeto SCHEMA_EXPORT/DEFAULT_ROLE
    Processando o tipo de objeto SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TABLE
    Processando o tipo de objeto SCHEMA_EXPORT/PROCEDURE/PROCEDURE
    Processando o tipo de objeto SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/INDEX
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TRIGGER
    . . exportado "SCOTT", "DEPT" 5.929 KB 4 linhas
    . . exportado "SCOTT", "EMP" 8.562 KB 14 linhas
    . . exportado "SCOTT".."SALGRADE" 5.859 KB 5 linhas
    . . exportou "SCOTT".."BONUS" 0 KB 0 linhas
    . . exportado "SCOTT".."JOB_HISTORY" 0 KB 0 linhas
    Tabela mestre "SYSTEM".."SYS_EXPORT_SCHEMA_01" carregada/descarregada com sucesso
    

    Então usuário, concessões, procedimentos, restrições, restrições referenciais, gatilho e as cinco tabelas DEPT,EMP,SALGRADE; BONUS, JOB_HISTORY do usuário SCOTT são exportados.

    Agora não vou importar este dump em um banco de dados, mas apenas criarei um arquivo SQL com as instruções que serão executadas pela importação. Isso pode ser obtido pelo parâmetro SQLFILE no arquivo de parâmetros de importação.

    Primeiro eu faço uma importação completa do dumpfile. Isto irá importar tudo do arquivo dump

    diretório=SCOTT
    cheio=s
    dumpfile=schema.dmp
    logfile=imp_full.log
    sqlfile=full.sql
    

    Isso resulta no seguinte

    Tabela mestre "SYSTEM".."SYS_SQL_FILE_FULL_01" carregada/descarregada com sucesso
    Iniciando "SYSTEM".."SYS_SQL_FILE_FULL_01": system/******** parfile=imp_full.par
    Processando o tipo de objeto SCHEMA_EXPORT/USER
    Processando o tipo de objeto SCHEMA_EXPORT/SYSTEM_GRANT
    Processando o tipo de objeto SCHEMA_EXPORT/ROLE_GRANT
    Processando o tipo de objeto SCHEMA_EXPORT/DEFAULT_ROLE
    Processando o tipo de objeto SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TABLE
    Processando o tipo de objeto SCHEMA_EXPORT/PROCEDURE/PROCEDURE
    Processando o tipo de objeto SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/INDEX
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TRIGGER
    Job "SYSTEM".."SYS_SQL_FILE_FULL_01" concluído com sucesso
    

    Se alguém fizer uma saída de esquema usando

    diretório=SCOTT
    esquemas=SCOTT
    dumpfile=schema.dmp
    logfile=imp_schema.log
    sqlfile=esquema.sql
    

    um arquivo de log semelhante é criado.

    Agora incluímos apenas as tabelas

    diretório=SCOTT
    cheio=s
    dumpfile=schema.dmp
    logfile=imp_schema_inc.log
    sqlfile=schema_inc.sql
    incluir=tabela
    

    Isso resulta no seguinte arquivo de log:

    Iniciando "SYSTEM".."SYS_SQL_FILE_FULL_01": system/******** parfile=imp_schema_inc.par
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TABLE
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/INDEX
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TRIGGER
    Job "SYSTEM".."SYS_SQL_FILE_FULL_01" concluído com sucesso
    

    As tabelas e os objetos dependentes são criados. Agora usamos mais diretivas INCLUDE para evitar a importação de objetos indesejados:

    diretório=SCOTT
    cheio=s
    dumpfile=schema.dmp
    logfile=imp_schema_inc_inc.log
    sqlfile=schema_inc_inc.sql
    incluir= tabela
    include=trigger:"=''"
    incluir=restrição:"=''"
    include=ref_constraint:"=''"
    

    Isso resulta exatamente no que queremos:

    Iniciando "SYSTEM".."SYS_SQL_FILE_FULL_01": system/******** parfile=imp_schema_inc_inc.par
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/TABLE
    Processando o tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/INDEX
    Job "SYSTEM".."SYS_SQL_FILE_FULL_01" concluído com sucesso
    

    Se usarmos uma importação de tabela e especificarmos essas 5 tabelas e excluirmos os objetos indesejados, obteremos um arquivo de log semelhante

    diretório=SCOTT
    tables=SCOTT.DEPT,SCOTT.EMP,SCOTT.SALGRADE,SCOTT.BONUS,SCOTT.JOB_HISTORY
    dumpfile=schema.dmp
    logfile=imp_tables.log
    sqlfile=tables.sql
    exclude=trigger, constraint,ref_constraint
    

    Também obtemos esse arquivo de log se usarmos uma importação de tablespace. Todos os objetos do usuário SCOTT estão no tablespace USERS.

    diretório=SCOTT
    dumpfile=schema.dmp
    logfile=imp_tablespaces.log
    sqlfile=tablespaces.sql
    tablespaces=usuários
    exclude=trigger, constraint, ref_constraint
    
    • 0

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve