Oracle 导出:表不存在

Posted

技术标签:

【中文标题】Oracle 导出:表不存在【英文标题】:Oracle export: table doesn't exist 【发布时间】:2012-05-24 10:09:27 【问题描述】:

我正在尝试在 oracle 11g 中导出数据

exp user/password file=dump.dmp tables = (table1)

通过 sqlplus。

我收到以下错误:

关于通过常规路径导出指定表 ... EXP-00011: USER.TABLE1 不存在 导出终止 成功并出现警告。

但是当我检查谁是这张桌子的所有者时:

SELECT owner, table_name from dba_tables where table_name = 'TABLE1';

我知道TABLE1 的所有者是USER

我应该怎么做才能导出这个表?

更新

实际上,我找到了解决方案。我希望它会帮助别人。 从版本 11g 开始,Oracle 引入了称为延迟段创建的新特性。因此,如果现在有行,oracle 不会创建表段。所以我使用选项“立即创建分段”重新创建了我的表

【问题讨论】:

你试过了吗:tables=user.table1 执行:exp user/password@DBNAME file=dump.dmp tables=(table1) 以确保您连接到正确的数据库。 谢谢,但没有帮助。实际上,也许我应该提到我在架构中有很多表,当我尝试导出其他一些表时,一切都很好。 听起来像是权限问题。当使用与exp 命令中使用的相同用户和密码登录时,您能否从该表中读取数据,如SELECT * FROM USER.TABLE1 中的数据? 是的,我可以。实际上没有数据,但我可以访问。 【参考方案1】:

实际上,我找到了解决方案。我希望它会帮助别人。从版本 11g 开始,Oracle 引入了称为延迟段创建的新特性。因此,如果其中没有行,oracle 不会创建表段。而且我的表不包含任何数据。所以我使用选项“立即创建分段”重新创建了我的表

找到了解决方案here。有更多选项可以解决这个问题,并解释为什么这个东西恰好出现在 oracle 11g 中。 :)

【讨论】:

哦,干得好,感谢您对此的反馈。在 11g 中,虽然我肯定会考虑使用 datapump 作为 exp/imp 的替代品,尤其是在使用 10g+ 功能时。当然,那里有一个学习曲线,在某些方面它不太方便(例如需要一个目录对象),但如果你遵循“获取一个可以工作的脚本然后修改它以满足未来需要”的通常原则,那么你应该很好。 【参考方案2】:

除了 Olivia 发布的答案之外,我还想添加一些代码:

SELECT 'alter table ' ||  table_name || ' allocate extent;'
from dba_tables where SEGMENT_CREATED = 'NO';

再次执行输出和exp。您的架构将被导出,包括空表。

编辑: 类似的问题here,也许你会在那里找到你的解决方案。

【讨论】:

【参考方案3】:

改变这个:

exp user/password file=dump.dmp tables = (table1);

到这里:

exp user/password tables = (table1) file=dump.dmp;

【讨论】:

【参考方案4】:

您可以使用以下查询从特定用户获取表级导出。

exp user/password file=dump.dmp tables = user.table1

【讨论】:

以上是关于Oracle 导出:表不存在的主要内容,如果未能解决你的问题,请参考以下文章

Oracle11G 命令行导出表不全解决

Oracle-EXP-00011 表不存在

Navicat for Oracle 执行一次查询然后声明表不存在

java连接oracle数据库,显示表或视图不存在

oracle语句中when条件接不存在怎么写

oracle导入表结构时报表空间不存在,该怎么解决?