AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 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

从模式导出导入没有约束的表

  • 772

我正在尝试使用数据泵进行导入,但我正在努力提出正确的选择。导出被视为模式导出。我试图只导入表,没有其他数据库对象。

我目前正在使用

INCLUDE=TABLE
TABLE_EXISTS_ACTION=REPLACE
REMAP_SCHEMA=
REMAP_TABLESPACE=

这是正确导入表,但我有点惊讶地看到导入也在表上创建约束和触发器,或者至少尝试这样做。触发器失败,因为它们包含数据库中不存在的模式名称。

我认为INCLUDE=TABLE只使用表格会被包括在内。显然情况并非如此。我无法使用EXCLUDE=CONSTRAINT,或者EXCLUDE=TRIGGER因为我已经在使用 INCLUDE 将导入限制为表。

关于如何将导入构建为仅导入表的任何想法?

oracle oracle-11g-r2
  • 2 2 个回答
  • 4562 Views

2 个回答

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

    你说得对,我认为INCLUDE=TABLE只使用表格会被包括在内,但它也包括所有相关对象。INCLUDE=TABLE这意味着当您在导入时使用时,将为您创建约束和触发器。


    可能的解决方案

    如果您有可能使用该命令重新创建转储,expdp那么您可能只想导出所需模式的表并使用该INCLUDE参数。

    包括

    用途: 使您能够通过为当前导出模式指定对象和对象类型来过滤导出的元数据。导出指定的对象及其所有依赖对象。这些对象的授权也会被导出。

    exp_include.par

    这基本上就是 expdp 参数文件。

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

    这将创建所需架构的转储,并且仅包含表和依赖对象。


    生成所需文件后,使用选项*.dmp导入。EXCLUDE=...

    排除

    用途: 使您能够通过指定要从导入作业中排除的对象和对象类型来过滤导入的元数据。

    imp_exclude.par

    这是 impdp 的参数文件。

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

    这应该会导致正确导入表。

    参考资料

    • 2 数据泵导出(Oracle 文档)
    • 3 数据泵导入(Oracle 文档)
    • 2
  2. miracle173
    2020-10-30T01:18:28+08:002020-10-30T01:18:28+08:00

    不能在同一个导入作业中指定参数 EXCLUDE 和 INCLUDE。您可以使用以下方法之一来实现表和索引,但不会导入触发器、约束或引用约束。如果您也不需要索引,则可以以类似的方式将它们从导入中排除。

    方法 1:您在导入中包含表,并使用进一步的 INCLUDE 指令从导入中排除触发器、约束和引用约束。一个指定以下内容:

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

    没有满足给定子句的触发器,这意味着触发器名称是一个空字符串。这同样适用于约束和参照约束

    方法2:您不使用 INCLUDE 指令来指定只应导入表,而是使用不同的方法。比您可以使用 EXCLUDE 来避免触发器、约束和引用约束的导入。

    您可以在表导入中指定要导入的表列表

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

    如果表的列表比这个方法大,这个方法不是很有用。

    仅指定表的另一种方法是使用表空间导入。转储文件中的表使用的表空间数通常远小于表数

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

    例子

    对于这些示例,我使用 Oracle 数据库 11.2.0.4 企业版。

    我创建了一个带有一些表、触发器、过程、约束和引用约束的模式 SCOTT。然后我使用以下参数进行了模式导出

    目录=斯科特
    架构=斯科特
    转储文件=schema.dmp
    日志文件=exp_schema.log
    

    以下是此导出日志文件的相关部分

    启动“SYSTEM”。“SYS_EXPORT_SCHEMA_01”:system/******** parfile=exp_schema.par
    正在使用 BLOCKS 方法进行估算...
    处理对象类型SCHEMA_EXPORT/TABLE/TABLE_DATA
    使用 BLOCKS 方法的总估计:192 KB
    处理对象类型 SCHEMA_EXPORT/USER
    处理对象类型SCHEMA_EXPORT/SYSTEM_GRANT
    处理对象类型SCHEMA_EXPORT/ROLE_GRANT
    处理对象类型SCHEMA_EXPORT/DEFAULT_ROLE
    处理对象类型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
    处理对象类型SCHEMA_EXPORT/TABLE/TABLE
    处理对象类型SCHEMA_EXPORT/PROCEDURE/PROCEDURE
    处理对象类型SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
    处理对象类型SCHEMA_EXPORT/TABLE/INDEX/INDEX
    处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    处理对象类型SCHEMA_EXPORT/TABLE/TRIGGER
    . . 导出的 "SCOTT"."DEPT" 5.929 KB 4 行
    . . 导出的 "SCOTT"."EMP" 8.562 KB 14 行
    . . 导出的 "SCOTT"."SALGRADE" 5.859 KB 5 行
    . . 导出的 "SCOTT"."BONUS" 0 KB 0 行
    . . 导出的 "SCOTT"."JOB_HISTORY" 0 KB 0 行
    主表“SYSTEM”.“SYS_EXPORT_SCHEMA_01”成功加载/卸载
    

    所以user、grants、procedures、constaints、reference constraint、trigger和DEPT、EMP、SALGRADE这五个表;导出用户 SCOTT 的 BONUS、JOB_HISTORY。

    现在我不会在数据库中导入这个转储,但我只会创建一个 SQL 文件,其中包含将由导入执行的语句。这可以通过导入参数文件中的参数 SQLFILE 来实现。

    首先,我完全导入转储文件。这将从转储文件中导入所有内容

    目录=斯科特
    满=y
    转储文件=schema.dmp
    日志文件=imp_full.log
    sqlfile=full.sql
    

    这导致以下结果

    主表“SYSTEM”.“SYS_SQL_FILE_FULL_01”成功加载/卸载
    启动“SYSTEM”。“SYS_SQL_FILE_FULL_01”:system/******** parfile=imp_full.par
    处理对象类型 SCHEMA_EXPORT/USER
    处理对象类型SCHEMA_EXPORT/SYSTEM_GRANT
    处理对象类型SCHEMA_EXPORT/ROLE_GRANT
    处理对象类型SCHEMA_EXPORT/DEFAULT_ROLE
    处理对象类型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
    处理对象类型SCHEMA_EXPORT/TABLE/TABLE
    处理对象类型SCHEMA_EXPORT/PROCEDURE/PROCEDURE
    处理对象类型SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
    处理对象类型SCHEMA_EXPORT/TABLE/INDEX/INDEX
    处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    处理对象类型SCHEMA_EXPORT/TABLE/TRIGGER
    作业“SYSTEM”。“SYS_SQL_FILE_FULL_01”成功完成
    

    如果一个人使用模式输出

    目录=斯科特
    架构=斯科特
    转储文件=schema.dmp
    日志文件=imp_schema.log
    sqlfile=schema.sql
    

    创建一个类似的日志文件。

    现在我们只包括表格

    目录=斯科特
    满=y
    转储文件=schema.dmp
    日志文件=imp_schema_inc.log
    sqlfile=schema_inc.sql
    包括=表
    

    这会产生以下日志文​​件:

    启动“SYSTEM”。“SYS_SQL_FILE_FULL_01”:system/******** parfile=imp_schema_inc.par
    处理对象类型SCHEMA_EXPORT/TABLE/TABLE
    处理对象类型SCHEMA_EXPORT/TABLE/INDEX/INDEX
    处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    处理对象类型SCHEMA_EXPORT/TABLE/TRIGGER
    作业“SYSTEM”。“SYS_SQL_FILE_FULL_01”成功完成
    

    表和从属对象被创建。现在我们使用更多的 INCLUDE 指令来避免导入不需要的对象:

    目录=斯科特
    满=y
    转储文件=schema.dmp
    日志文件=imp_schema_inc_inc.log
    sqlfile=schema_inc_inc.sql
    包括=表
    包括=触发器:“=''”
    包括=约束:“=''”
    包括=ref_constraint:"=''"
    

    这正是我们想要的结果:

    启动“SYSTEM”。“SYS_SQL_FILE_FULL_01”:system/******** parfile=imp_schema_inc_inc.par
    处理对象类型SCHEMA_EXPORT/TABLE/TABLE
    处理对象类型SCHEMA_EXPORT/TABLE/INDEX/INDEX
    作业“SYSTEM”。“SYS_SQL_FILE_FULL_01”成功完成
    

    如果我们使用表导入并指定这 5 个表并排除不需要的对象,我们会得到一个类似的日志文件

    目录=斯科特
    表=SCOTT.DEPT、SCOTT.EMP、SCOTT.SALGRADE、SCOTT.BONUS、SCOTT.JOB_HISTORY
    转储文件=schema.dmp
    日志文件=imp_tables.log
    sqlfile=tables.sql
    排除=触发器,约束,ref_constraint
    

    如果我们使用表空间导入,我们也会得到这样的日志文件。用户 SCOTT 的所有对象都在表空间 USERS 中。

    目录=斯科特
    转储文件=schema.dmp
    日志文件=imp_tablespaces.log
    sqlfile=tablespaces.sql
    表空间=用户
    exclude=触发器、约束、ref_constraint
    
    • 0

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve