我有一个大问题当我转储数据库时,空表被截断
我如何导出 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(数据泵)。有一个参数CONTENT=METADATA_ONLY
可以让你得到你想要的。
我在这里找到了另一个解决方案。
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导出空表。