【问题标题】:How can I import just data *and indexes* into Oracle 11?如何将数据*和索引*导入 Oracle 11?
【发布时间】:2013-06-25 13:41:55
【问题描述】:

我正在使用 the original imp tool 导入 Oracle 11g 数据库。通常我使用参数DATA_ONLY=y 执行此操作,因为我只关心与数据相关的错误。

但是,我现在正在调查一些与索引相关的问题,因此我想导入索引以及数据,但不导入其他元数据。我查看了imp help=y 和上面链接的文档,但我不知道哪种选项组合或imp 调用的顺序可以实现这一点。

有什么想法吗? (特定于 11g 答案的参数很好,只要它们也适用于 10g dmp 文件。)

【问题讨论】:

  • 您的意思是索引不存在而您需要创建它们,还是它们存在但未被使用——这可能是因为自导入以来尚未收集统计信息?
  • @AlexPoole 我正在从头开始创建原始数据库的近似克隆,因此索引不存在 - 您的回答完全符合我的需求,谢谢!

标签: import indexing oracle11g


【解决方案1】:

从转储文件构建索引的最简单方法(来自exp;如果您使用的是 11g,不知道为什么不使用数据泵和expdp/impdp,但希望您是从 9i 或其他东西移动数据)与 INDEXFILE parameter.

使用它来创建一个包含所有索引 DDL 的 .sql 文件。 (它也有所有的表 DDL,但被注释掉了)。然后,您可以根据需要进行更改。然后从 SQL*Plus 将其作为普通脚本运行,它将执行 DDL 并构建所有索引。没有imp 调用只构建索引,您需要在这两个步骤中完成。

它不会更新或重新创建您已经拥有的任何索引,因此如果索引定义已更改,那么它将生效 - 它只会抱怨索引已经存在。如果是这种情况,您可以在运行脚本之前删除现有索引。

通常您会在DATA_ONLY 调用之后将INDEXFILE 调用作为单独的步骤运行,因为在所有数据都存在时构建索引通常比在索引到位的情况下导入数据更快- 因为更新每行数据的索引的开销。所以,imp DATA_ONLY=y,然后是imp INDEXFILE=ind.sql,然后是sqlplus user/pass < ind.sql

【讨论】:

    猜你喜欢
    • 2015-08-23
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2016-05-05
    相关资源
    最近更新 更多