Oracle数据库中有表却不能导出,导出时显示表不存在。

Oracle 11g 无法导出数据

原因:在Oracle 11g 默认空表不能导出,因为在11g版本中新添加了一个参数deferred_segment_creation,它的意思是段延迟创建;安装数据库后默认是true。可以查看一下,在命令窗口:

SQL> show parameter deferred_segment_creation;

True的意思是当你创建一个表table1,并且没有向表中插入数据,那么这个表不会立即被分配extent,即不会被分配存储空间。当你插入数据时才分配存储空间,好处是减少空间的浪费,所以当你导出一个空表时,就会提示表不存在。

 

解决方法

将上述参数设置为false,在命令窗口:

SQL> alter system set deferred_segment_creation=false;

然后关闭数据库重新链接,结果导出数据时还是提示原来问题。

Why? 因为该参数修改后,对之前创建的空表不起作用,对之后创建的表才起作用。

这咋整?那之前的空表就不能导出了吗?别急,看下列解决方式:

1、如果空表就几张,那就先在空表里插入一条数据,这样该表就被分配个存储空间,再把数据删掉,这样就可以导出表。手动麻烦些,不过就几张表。

2、如果空表几十张甚至上百张,那就统一处理,需要用到allocate extent 为表分配空间,需要构造下列语句:

Alter table 表名 allocate extent;

步骤1:首先找到所有空表:

SQL> select table_name from user_tables where num_rows=0;

步骤2:拼凑出上述语句并执行:

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

步骤3:将生成的结果进行整理并执行;

步骤4:导出数据;

Oracle 11g 无法导出数据

相关文章: