【发布时间】:2013-09-20 19:47:22
【问题描述】:
我有一个大问题当我转储数据库时,空表被截断
如何导出 oracle 10g 中的所有表
exp SYSTEM/password FILE=expdat.dmp
【问题讨论】:
-
空表被截断?
我有一个大问题当我转储数据库时,空表被截断
如何导出 oracle 10g 中的所有表
exp SYSTEM/password FILE=expdat.dmp
【问题讨论】:
这可能是因为这些表可能未分配范围。在进行备份之前,您需要识别所有没有数据的表。然后更改这些表以分配范围。
ALTER TABLE <table_name> ALLOCATE EXTENT;
使用下面的脚本来改变他们没有分配范围的所有表。
SELECT 'ALTER TABLE '||table_name||' ALLOCATE EXTENT;' FROM user_tables WHERE segment_created = 'NO';
复制输出并执行。
【讨论】:
您可以考虑使用expdp (data pump)。有一个参数CONTENT=METADATA_ONLY 可能会得到你想要的。
【讨论】:
我找到了另一个解决方案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 导出空表。
【讨论】: