文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>oracle truncate表空间释放问题的解决办法

oracle truncate表空间释放问题的解决办法

时间:2010-10-12  来源:zhongtang

经常遇到需要清理一些大表的数据的情况,但是发现清完之后表空间并不释放,如何解决。   一、truncate用法

1.删除表中所有的行,释放数据所占用的自由空间;
同时删除索引数据,释放该表上的index所占用的自由空间。
TRUNCATE TABLE employees_demo;

但是,但是,truncate不会释放由 MINEXTENTS storage parameter指定的存储参数。

例如下表,即便没有任何记录,也会占用3G空间,索引占用1.7G空间:
-- Create table
create table SYS_SCT_USERLOG
(
  id          NUMBER not null,
  splog2      VARCHAR2(200)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 3072M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints
alter table SYS_SCT_USERLOG
  add constraint PK_SYS_SCT_USERLOG primary key (ID)
  using index
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 1092M
    minextents 1
    maxextents unlimited
  );

2.删除表中所有的行,保留表所占用的空间,留待该表下次使用。
TRUNCATE CLUSTER personnel REUSE STORAGE;

3.删除表中所有的行,不删除物理视图中数据。
TRUNCATE TABLE sales_demo PRESERVE MATERIALIZED VIEW LOG;

二、解决办法
1.执行以下语句
alter TABLE SYS_SCT_USERLOG deallocate unused keep 1k ;
alter index PK_SYS_SCT_USERLOG deallocate unused keep 1k ;

2.如果大批量truncate表,如何解决?

Select owner, decode(partition_name,
              null,
              segment_name,
              segment_name || ':' || partition_name) objectname ,
       'alter ' || segment_type || ' ' ||
       decode(partition_name,
              null,
              segment_name,
              segment_name || ':' || partition_name) ||
       ' deallocate unused keep 1k  ' scripts,
       segment_type objecttype,
       nvl(bytes, 0) "SIZE",
       nvl(initial_extent, 0) INITIALEXT,
       nvl(next_extent, 0) NEXTEXT,
       nvl(extents, 0) NUMEXTENTS,
       nvl(max_extents, 0) "MAXEXTENTS"
  from dba_segments
 where tablespace_name =  'USERS'
 and owner = 'SINOSYNEW'
 and objecttype in ('TABLE','INDEX')
 order by  nvl(bytes, 0) desc  ;

拷贝执行结果中第三列数据得到批量语句如下;
alter TABLE FIN_AR_REMAIN_BILL deallocate unused keep 1k ;
alter TABLE FIN_WARE_LIST deallocate unused keep 1k ;
alter INDEX PK_WMS_INOUT_LOT_HISTORY deallocate unused keep 1k ;

……

<--- end --->

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载