Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91771620
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-03-31 12:52:49

来源:赛迪网    作者:Alizze

在日常的工作和学习中,很多人在对数据库中的数据做了archive后,数据量会出现减少的情况,在这种前提下,原来定义的数据文件假如不进行收缩就会浪费很多的空间。在下文中,我们将详细介绍一种解决此问题的方法:

首先:停止listener,避免在rebuild时有dml操作。

◆1.利用Toad的tools-->rebuild multiple objects对欲收缩的表空间所涉及的表及索引进行rebuild。(就是alter table table_name move tablespace 命令)。

例子:

Alter table SICS_HISTORY.COD_AMOUNT move
TABLESPACE TBSP03
Parallel (Degree 4) ;
Alter Table SICS_HISTORY.COD_AMOUNT noparallel;

Alter index SICS_HISTORY.IX0_COD_AMOUNT rebuild
TABLESPACE TBSP03
Parallel (Degree 4) Nologging
online;
Alter index SICS_HISTORY.IX0_COD_AMOUNT noparallel;

选择项中,我们可以选择rebuild associated indexes with tables.这样,在产生脚本时可以同时对index做rebuild。(注意:table如果move了表空间必须对index做rebuild)。

◆2.Rebuild结束后,对数据文件的实际大小做评估:

(1)找出表空间所涉及的所有数据文件:

sql>select * from dba_data_files; --》可以获得file_id

(2)找到最大的block_id

SQL>select max(block_id)*db_block_size/1024/1024 from dba_extents where file_id=..;

◆3.收缩数据文件的空间:

SQL> alter database datafile 'path/data_file' resize xxxM; --此值来自于(2)
阅读(287) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~