【问题标题】:How to export empty tables in oracleoracle如何导出空表
【发布时间】:2013-09-20 19:47:22
【问题描述】:

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

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

exp SYSTEM/password FILE=expdat.dmp

【问题讨论】:

  • 空表被截断?

标签: oracle oracle10g


【解决方案1】:

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

ALTER TABLE <table_name> ALLOCATE EXTENT;

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

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

复制输出并执行。

【讨论】:

  • 感谢@Dba。这个解决方案对我来说效果很好。顺便说一句,为什么“exp”没有提供任何允许我们导出空表的参数?
  • 谢谢你,问题是表没有分配范围,它的segment_created是NO。
【解决方案2】:

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

【讨论】:

    【解决方案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 导出空表。

    【讨论】:

      猜你喜欢
      • 2015-04-14
      • 2022-01-05
      • 2015-10-03
      • 2012-12-21
      • 2021-07-24
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      相关资源
      最近更新 更多