【问题标题】:Oracle export tool does not create some tables and sequencesOracle 导出工具不创建某些表和序列
【发布时间】:2014-04-04 08:14:10
【问题描述】:

我使用oracle 11,使用exp/imp工具在数据库之间迁移数据。

效果很好如果所有空表和序列都已在目标数据库中创建。

但是如果目标数据库中不存在表,那么就会发生一些不好的事情;

  • 它仍然创建表,但只创建有数据的表,我找不到强制它在目标数据库中创建空表的方法。
  • 它不会创建序列。

这就是我输入值以导出工具的方式;

Users or Tables -> Tables
Export table data -> yes
Compress -> yes
Table or Partition to be exported -> I enter table names here one by one,

但它确实接受没有数据的表名。它说表不存在,所以毫不奇怪,它们稍后不会导入。

Import Data only > no

Import File > Full path to Dump file.

List contents of import file > no

Ignore create error > no

import grants > yes

import table data > yes

import entire export > yes

【问题讨论】:

  • exp/imp 已弃用。你应该使用expdbimpdp
  • @Alex Poole 我更新了这个问题,我使用 exp/imp 因为我知道它主要是如何工作的,它很容易而且(大部分)工作正常,我没有时间尝试另一个目前的工具
  • @Alex Poole so Users or Tables -> Tables 这个选择模式?我认为这是我想从中导出的内容
  • 我没有时间尝试其他工具” - 所以你宁愿花时间尝试一个显然不起作用的工具?
  • @a_horse_with_no_name “这显然行不通”目前还不确定\

标签: oracle data-migration


【解决方案1】:

序列不会以表格模式导出。 documentation lists the objects exported in each mode,这表明序列仅在用户和完整数据库模式下导出。

Export 在 11g 中已弃用,文档还指出:

从 Oracle 数据库 11g 开始,不再支持原始导出以供一般使用。 Oracle 数据库 11g 中唯一支持的原始导出使用是将 XMLType 数据向后迁移到 Oracle 数据库 10g 第 2 版 (10.2) 或更早版本。因此,Oracle 建议您使用新的数据泵导出和导入实用程序

如果您已延迟创建段,则不会导出空表。 This AskTom articles refers to it,也提到了in the documentation

原始导出实用程序不会导出任何已创建的表 已延迟创建分段,但尚未创建分段 它。

您可以使用dbms_metadata.get_ddl() 获取所有表的表创建语句,也可以只获取空表,然后手动构建它们;或强制分配范围(如文档中所述);或使用支持的和当前的数据泵导出和导入。根据之前的问题,如果您的客户拒绝处理数据泵文件,您应该只使用exp/imp,而我真的想不出一个好的理由。

【讨论】:

  • 我实际上尝试用不同的用户运行 expdp 几次,在我输入用户名密码后它只是在 10 秒内退出,没有任何警告
  • 假设oracle在删除行时不会删除段,我从空表中插入并删除了一行,它起作用了:)
  • @Spring - 如果你只使用用户名/密码运行expdp,你应该得到一个 ORA-39145,因为你没有指定目录名。对于简单的情况,它实际上并不比exp 复杂(即不需要使用使其更优越的高级功能);您只需要阅读手册并查看示例即可。
  • 谢谢!我知道你会说使用 expdp :) 但是.. stackoverflow.com/questions/22870845/…
猜你喜欢
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 2021-11-27
  • 2018-09-19
  • 1970-01-01
  • 2017-11-19
  • 2019-04-03
相关资源
最近更新 更多