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 导出:表不存在的主要内容,如果未能解决你的问题,请参考以下文章