oracle11导出单个表,Oracle11g不能导出空表的三种解决方法

Oracle导出表只会导出占用数据空间的数据,Oracle11g新增特性deferred_segment_creation,默认值为true,表示如果你创建表但是没往其插入数据,这个表是不会立即分配extent,即不占数据空间,表也不会分配segment,所以导致Oracle11g无法导出空表,具体表现在系统表user_tables中segment_created字段为"NO",(空表集合)。

select segment_created,table_name from user_tables where segment_created = 'NO';

以下提供三种解决方法:

一、往空表中插入数据后再删除。(不推荐)

二、设置deferred_segment_creation参数为false,再查出空表集合,删除后重建。因为命令只作用于之后的数据表。(不推荐)

-- SQL窗口执行效果

alter system set deferred_segment_creation = false;

-- 命令窗口查看效果

show parameter deferred_segment_creation;

三、使用ALLOCATE EXTENT,可以针对每张数据表/索引/视图等手工分配Extent(推荐)

其基本语法如下:

ALLOCATE EXTENT {SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer };

针对数据表语法如下:

-- 针对数据表完整语法

ALTER TABLE [schema.] table_name ALLOCATE EXTENT

[({SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer })];

-- 针对数据表简单实例

alter table table_name allocate extent;

具体实现操作步骤:

1.查找当前用户所有空表,并构建命令语句,为了生成空表集合。

-- 查找所有空表SQL

select table_name from user_tables where NUM_ROWS=0;

-- 构造所有空表的命令语句

select 'alter table' || table_name || 'allocate extent' from user_tables where

NUM_ROWS=0 OR NUM_ROWS IS NULL;

效果图如下:

0818b9ca8b590ca3270a3433284dd417.png

2.I.(针对含有PL/SQL工具)可直接在PL/SQL中在标题上全选复制,往命令窗口粘贴即可。

II.(若无PL/SQL工具),可用文本写入如下SQL脚本,然后通过cmd窗口进行操作,

-- 隐藏标题行、提示、结果返回行数,显示命令执行结果,具体参照:sqlplus命令大全。

set heading off;

set echo off;

set feedback off;

set termout on;

spool E:\alter.sql;

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

spool off;

同样得到结果后,再cmd执行生成文件后的代码即可。

本文参考:http://www.pinhuba.com/oracle/101128.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值