Oracle 11g不能导出空表的多种解决方法

简介:

空表不能导出的问题:

查资料发现Oracle 11g中有个新特性:新增了一个参数“deferred_segment_creation”含义是段延迟创建,默认是true

具体是什么意思呢?

deferred_segment_creation,即建立表的时候,这个表不会立即分配extent,也就是不占数据空间,即表也不分配segment以节省空间。直接在字典中记录了数据结构。而只有当真正有数据的时候才分配空间。这种方法对于象SAP这样大的系统需要部署成千上万张表是非常有效的。默认是开启的为ture,需要关闭alter system set deferred_segment_creation=false;

在系统表user_tables中也可以看到segment_treated的字段里是“NO”或者“YES”说明了某张表是否分配了segment

用下面的SQL语句查询,可以发现没有导出的表其 segment_created 字段值都是 'NO'

1
Select segment_created,table_name from user_tableswhere segment_created =  'NO' ;

解决方案:

1、最原始最笨的办法(不推荐):insert一行,再rollback或者删除就产生segment了。

该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。

 

2、设置deferred_segment_creation 参数:

   设置deferred_segment_creation 参数为FALSE来禁用"段推迟创建"(也就是直接创建segment),无论是空表还是非空表,都分配segment

   sqlplus中,执行如下命令:

1
SQL>alter system  set  deferred_segment_creation= false ;

查看:

1
SQL>show parameter deferred_segment_creation;

   注意:该值设置后只对后面新增的表产生作用,对之前建立的空表(已经存在的)不起作用,仍不能导出。

   并且要重新启动数据库,让参数生效。

 

3、使用ALLOCATE EXTENT,可以导出之前已经存在的空表。

使用ALLOCATE EXTENT可以为数据库对象的每一张表分配Extent(注意针对每一张表,就是说一张表需要一条SQL代码),但要是每一张表写一条语句的话太过麻烦,为了方便我们使用SQL命令拼写出每一张表的alter语句。

 

构建对空表分配空间的SQL命令。

查询当前用户下的所有空表(一个用户最好对应一个默认表空间)。命令如下:

   SQL>select table_name from user_tableswhere NUM_ROWS=0; 

wKioL1VUo1rS93qYAACQR5Xqnt0116.jpg


根据上述查询,可以构建针对空表分配空间的命令语句,如下:

   SQL>Select 'alter table '||table_name||'allocate extent;' from user_tables where num_rows=0 or num_rows is null(注意:很多教程没有这里,这里是有可能为空的)

wKioL1VUo3TjfiITAAHjt35pcRw120.jpg

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

4、执行对空表分配空间的SQL命令。

1
2
alter table WJDCPERSON allocate extent;
alter table VERSION_NUMBER allocate extent;

5、执行完以上命令,然后再用exp的方式去导出数据库,就可以完整的导出包括空表的数据库。





      本文转自ling118 51CTO博客,原文链接:http://blog.51cto.com/meiling/1651395,如需转载请自行联系原作者



相关文章
|
7月前
|
Oracle 关系型数据库 数据库
使用docker安装配置oracle 11g
使用docker安装配置oracle 11g
|
6月前
|
Oracle 关系型数据库 数据库
Oracle 11G数据库安装步骤及截图操作2
Oracle 11G数据库安装步骤及截图操作
69 0
|
6月前
|
Oracle 安全 关系型数据库
Oracle 11G数据库安装步骤及截图操作1
Oracle 11G数据库安装步骤及截图操作
114 0
|
7月前
|
Oracle 关系型数据库 数据库
Oracle数据库协议适配器错误解决方法
Oracle数据库协议适配器错误解决方法
641 2
|
6月前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
190 0
|
7月前
|
SQL Oracle 关系型数据库
ORACLE错误码及解决方法
ORACLE错误码及解决方法
343 0
|
7月前
|
SQL Oracle 关系型数据库
Oracle 数据泵导出导入(映射表空间、Schema)
Oracle 数据泵导出导入(映射表空间、Schema)
|
7月前
|
存储 Oracle 关系型数据库
手把手教你安装Oracle——以oracle 11g为例
手把手教你安装Oracle——以oracle 11g为例
|
2月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
200 64
|
16天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
62 11