【问题标题】:How to import a specific rownum range of a table from Oracle data pump?如何从 Oracle 数据泵中导入表的特定 rownum 范围?
【发布时间】:2021-07-08 04:39:19
【问题描述】:

我正在使用 Oracle XE 11g 的 impdp,尝试从数据泵文件 (*.dmp) 导入表的特定范围(以 rownum 为单位)。

在基本的 Oracle 查询中,我们可以使用以下查询读取 rownum 范围 (my_start

SELECT * from (
  SELECT t.*, ROWNUM r
  from my_table t
) WHERE r >= my_start AND r < my_end

通过其中的嵌套查询。

但是,在 impdp 的 parfile 中编写查询时,我发现查询只能包含 where 子句。所以,我们不能导入具体的rownum范围的数据。

我想问以下问题。

  1. 有没有办法在 impdp 查询中使用嵌套的 select 子句?
  2. 如果没有,有没有其他方法可以导入特定 rownum 范围的数据?

感谢您阅读我的问题。

【问题讨论】:

  • 使用这样的子查询只有在order by 上才有意义。您正在尝试获得一个具有下限和上限的范围,但即使只有链接问题 (WHERE rownum &lt;= 100) 中的上限,您也会得到不确定的行。只要您不在乎获得哪 100 行,该版本就很有意义。但是通过排序,您实际上是在要求数据泵实现整个表的内存排序,这似乎不合理。 为什么你想这样做?您是否尝试导入整个表但分块 - 如果是这样,为什么?还是别的什么?
  • @AlexPoole 最后,我试图将超过 100GB 的表从数据泵文件导入到限制为 11GB 的 Oracle XE 中。因此,我决定安装多个 Oracle XE(docker 容器),将表拆分为 10GB 的部分并分别导入。 ROWNUM 是最简单的拆分标准,所以我使用它。有没有更好的拆分表格的方法?

标签: oracle


【解决方案1】:

据我所知,您必须导入整个表格并删除不需要的内容。

或者,更改一个表并添加一个新列来表示您感兴趣的 范围。然后,当您要导入该特定范围时,请使用导入数据泵中新添加的列QUERY 子句。

【讨论】:

  • 我可以在导入整个表之前更改一个表吗?如果是这样,我该如何编写impdp的查询?
  • 导入前修改是没用的。我想过在导出之前进行修改
  • 很遗憾,我无法访问原始数据库以再次导出数据库。我只有一个数据泵文件 (*.dmp)。
  • 我明白了......好吧,那么我知道的唯一选择就是全部导入并删除你不想要的。
  • 数据太大,无法一次将文件导入Oracle XE。无论如何,感谢您考虑并回答我的问题!
猜你喜欢
  • 2023-03-05
  • 2017-08-24
  • 2012-12-12
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 2010-09-10
相关资源
最近更新 更多