Oracle11g无法导出空表解决方案

本文介绍了解决Oracle数据库中空表无法通过exp命令导出的问题。主要原因是deferred_segment_creation参数默认为true,导致未分配extent。文章提供了三种方案:手动分配extent、生成SQL语句批量分配以及修改系统参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Oracle11g之后加入了新的特性,如果你创建了table,表中并没有插入数据,那么Oracle是不会分配extent给table以节省空间,所以在exp导数据的时候,空表将会无法被导出。原因在于deferred_segment_creation的参数默认为true。

解决方案如下

1、若空表已经建立,需要使用ALLOCATE EXTENT为每一张空表分配extent,这样就可以通过exp命令成功导出。

a、查看当前用户的所有空表,执行下面的SQL语句

SQL>select table_name from user_tables where NUM_ROWS=0;


*TIPS:

ALLOCATE EXTENT可以为数据库对象的每一张表分配Extent

针对数据表操作的完整语法如下:

ALTER TABLE [schema.] table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})]

构建最简单的extent命令如下:

alter table TableName allocate extent

也就是说有N张空表,我们就需要执行N次SQL语句,实在过于蛋疼。


b、拼接每张表的sql语句,执行下面的SQL命令,即可得到extent table的SQL语句。

SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null

输出结果如下:


然后复制执行就可以为空表分配extent。

c、需改 deferred_segment_creation参数为false,这样即使以后再新增空表,Oracle也会默认的对其分配extent了。


2、若空表还未建立,需要通过设置deferred_segment_creation参数来解决问题,该参数默认值为true,也就是说对空表不分配extent。

执行下面的SQL命令即可:

SQL>alter system set deferred_segment_creation=false;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值