如何在oracle中导出空表

时间:2013-09-20 19:47:22

标签: oracle oracle10g

我遇到了一个大问题当我转储数据库时,空表被截断

如何导出oracle 10g中的所有表

exp SYSTEM/password FILE=expdat.dmp

3 个答案:

答案 0 :(得分:24)

这可能是因为这些表可能没有分配范围。在进行备份之前,您需要识别所有没有数据的表。然后改变这些表以分配范围。

ALTER TABLE <table_name> ALLOCATE EXTENT;

使用以下脚本更改所有没有分配范围的表。

SELECT 'ALTER TABLE '||table_name||' ALLOCATE EXTENT;' FROM user_tables WHERE segment_created = 'NO';

复制输出并执行。

答案 1 :(得分:3)

您可以考虑使用expdp (data pump)。有一个参数CONTENT=METADATA_ONLY可以为您提供所需的参数。

答案 2 :(得分:3)

我找到了另一个解决方案here Oracle有一个名为DEFERRED_SEGMENT_CREATION的选项,默认为true。

来自文档:

  

如果设置为true,则在将第一行插入表中之前,不会创建表及其依赖对象(LOB,索引)的段。

我将从上面的链接总结解决方案:

SQL> alter system set DEFERRED_SEGMENT_CREATION=FALSE scope=both;

运行以下语句的输出:

SQL> select 'alter table ' || table_name || ' move;' from user_tables where num_rows=0;

这使我的 exp 也导出了空表。

相关问题