度量快速开发平台-专业、快速的软件定制快开平台

标题: oracle 11g不能导出空表的多种解决方法 [打印本页]

作者: 张兴康    时间: 2020-6-30 17:58
标题: oracle 11g不能导出空表的多种解决方法
Oracle 11g中有个新特性:新增了一个参数“deferred_segment_creation”含义是段延迟创建,默认是true。

具体是什么意思呢?
如果这个参数设置为true,你新建了一个表Table1,并且没有向其中插入数据,那么这个表不会立即分配extent,也就是不占数据空间,即表也不分配 segment 以节省空间,所以这些表也没能导出来。

用下面的SQL语句查询,可以发现没有导出的表其 segment_created 字段值都是 'NO'。
Select segment_created,table_name from user_tables where segment_created = 'NO';

解决方法:
1、最原始最笨的办法(不推荐):insert一行,再rollback或者删除就产生segment了。
该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。

2、设置deferred_segment_creation 参数:
   设置deferred_segment_creation 参数为FALSE来禁用"段推迟创建"(也就是直接创建segment),无论是空表还是非空表,都分配segment。
   在sqlplus中,执行如下命令:
   SQL>alter system set deferred_segment_creation=false;
   查看:
   SQL>show parameter deferred_segment_creation;

注意:该值设置后只对后面新增的表产生作用,对之前建立的空表(已经存在的)不起作用,仍不能导出。并且要重新启动数据库,让参数生效。

3、使用ALLOCATE EXTENT,可以导出之前已经存在的空表。
   使用ALLOCATE EXTENT可以为数据库对象的每一张表分配Extent(注意针对每一张表,就是说一张表需要一条SQL代码):
   其语法如下:
   -----------
   ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }
   -----------
   可以针对数据表、索引、物化视图等手工分配Extent。
   ALLOCATE EXTENT使用样例:
    ALLOCATE EXTENT
    ALLOCATE EXTENT(SIZE integer [K | M])
    ALLOCATE EXTENT(DATAFILE 'filename')
    ALLOCATE EXTENT(INSTANCE integer)  www.2cto.com
    ALLOCATE EXTENT(SIZE integer [K | M]   DATAFILE 'filename')
    ALLOCATE EXTENT(SIZE integer [K | M]   INSTANCE integer)
   针对数据表操作的完整语法如下:
   -----------
   ALTER TABLE [schema.] table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]
   -----------
   故,需要构建如下样子简单的SQL命令:
   -----------
   alter table TableName allocate extent

但要是每一张表写一条语句的话太过麻烦,为了方便我们使用SQL命令拼写出每一张表的alter语句。

构建对空表分配空间的SQL命令。
   查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:
   SQL>select table_name from user_tables where NUM_ROWS=0;
   根据上述查询,可以构建针对空表分配空间的命令语句,如下:
   SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null

上述代码可产生批量的修改表extent的SQL语句(有多少张空表就产生多少条),我们只需要将其生成的所有sql代码全部执行,就可以给每一张已经存在的表来分配segment,就OK了。



作者: 陈晓龙    时间: 2020-6-30 23:02

作者: 陈晓龙    时间: 2020-6-30 23:02
收藏了
作者: 张兴康    时间: 2020-7-1 17:37
陈晓龙 发表于 2016-8-31 23:02
收藏了

恩不错,值得表扬
作者: 陈晓龙    时间: 2020-7-1 23:14
张兴康 发表于 2016-9-1 17:37
恩不错,值得表扬

呵呵
作者: 张兴康    时间: 2020-7-3 09:54
陈晓龙 发表于 2016-9-1 23:14
呵呵


作者: 陈晓龙    时间: 2020-7-3 20:44
张兴康 发表于 2016-9-3 09:54


作者: 张兴康    时间: 2020-7-5 17:56
陈晓龙 发表于 2016-9-3 20:44


作者: 陈晓龙    时间: 2020-7-6 23:25
张兴康 发表于 2016-9-5 17:56


作者: 张兴康    时间: 2020-7-7 16:47
陈晓龙 发表于 2016-9-6 23:25

一大一小两个表情啥意思???
作者: 陈晓龙    时间: 2020-7-8 16:20
张兴康 发表于 2016-9-7 16:47
一大一小两个表情啥意思???

要有创新呀
作者: 张兴康    时间: 2020-7-12 15:36
陈晓龙 发表于 2016-9-8 16:20
要有创新呀


作者: 陈晓龙    时间: 2020-7-12 15:56
张兴康 发表于 2016-9-12 15:36


作者: 张兴康    时间: 2020-7-13 14:13
陈晓龙 发表于 2016-9-12 15:56


作者: 陈晓龙    时间: 2020-7-14 17:04
张兴康 发表于 2016-9-13 14:13


作者: 张兴康    时间: 2020-7-18 15:45
陈晓龙 发表于 2016-9-14 17:04

强烈建议此贴终止
作者: 陈晓龙    时间: 2020-7-18 16:02
张兴康 发表于 2016-9-18 15:45
强烈建议此贴终止

为何呀




欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2