6

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

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

exp SYSTEM/password FILE=expdat.dmp
4

3 回答 3

26

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

ALTER TABLE <table_name> ALLOCATE EXTENT;

使用下面的脚本来改变他们没有分配范围的所有表。

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

复制输出并执行它。

于 2013-09-20T20:34:29.970 回答
3

您可能会考虑使用expdp(数据泵)。有一个参数CONTENT=METADATA_ONLY可以让你得到你想要的。

于 2013-09-21T00:53:31.583 回答
3

我在这里找到了另一个解决方案。
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导出空表。

于 2014-04-04T09:36:12.840 回答