数据库表、索引、表空间的回收方法是什么

网友投稿 334 2023-11-28

数据库表、索引、表空间的回收方法是什么

本篇内容介绍了“数据库表、索引、表空间的回收方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

数据库表、索引、表空间的回收方法是什么

说明:数据库运行一段时间后,需要对数据库进行归档的操作;

数据库归档完成后,需要对表和索引进行收缩才能真正的提高整个系统的运行效率。

如果需要对数据库的表空间进行回收,还需要对数据文件进行rsize的操作;

详细操作步骤:

一、表和索引的收缩

1、查看需要进行收缩的对象(查看某个表空间下面,可回收空间超过100M的表)

脚本:

SELECT  NUM_ROWS,AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9 pinggu, BLOCKS*8/1024shiji,(BLOCKS*8/1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9) MB,TABLE_NAME

FROM  dba_tables

WHERE  tablespace_name=<tablespace_name>  AND

BLOCKS*8/1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9>100 AND rownum<11  order by mb desc;

2、进行表的收缩

1)打开表的行迁移

脚本: alter table <table_name> enable row movement ;

2)进行表的收缩

脚本:alter table <table_name> shrink space compcat;

3)进行高水位线的回收

alter table  <table_name> shrink space;

3、进行索引的回收(REBUILD和SHRINK都可以实现这个目的)

1)重建索引的脚本:

ALTER INDEX <INDEX_name>

REBUILD

NOCOMPRESS

NOPARALLEL

TABLESPACE <tablespace_name>

STORAGE (

         INITIAL     1M

NEXT        1M

         PCTINCREASE 0

        )

ONLINE;

2)进行索引的收缩:

alter index   <INDEX_name> shrink space;

4、运行重新编译脚本utlrp.sql,(因为开启行迁移后,可能有些对象会失效)

cd $ORACLE_HOME

@/rdbms/admin/utlrp.sql

二、表空间的回收

表空间的回收归根到底是数据文件大小的回收;

1、表空间回收大小的脚本和查看

select a.file#,a.name,a.bytes/1024/1024 CurrentMB,

       ceil(HWM * a.block_size)/1024/1024 ResizeTo,

(a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB,

       alter database datafile ||a.name|| resize ||

ceil(HWM * a.block_size/1024/1024) || M; ResizeCMD

from v$datafile a,

     (select file_id,max(block_id+blocks-1) HWM

from dba_extents where file_id in

              (select b.file#  From v$tablespace a ,v$datafile b

where a.ts#=b.ts# and a.name=<tablespace_name>)

       group by file_id) b

where a.file# = b.file_id(+)

and (a.bytes - HWM *block_size)>0

order by 5

2、某些数据文件的使用率很小,但是进行数据文件的Resize时候却回收不了多少空间,可以通过以下语句查看相应

文件的段分配情况

select  * from dba_extents where  tablespace_name=<tablespace_name> AND FILE_ID=<FILE_ID> ORDER BY BLOCK_ID DESC;

说明:数据文件的可以resize的大小是由最大的BLOCK_ID所决定的,因此可以通过上面的shrink或者move命令进行操作;

3、进行数据文件的RESIZE操作

ALTER DATABASE DATAFILE /oracle/ID1/112_64/dbs/oradataccdata.dbf(数据文件的位置)

RESIZE 10000M。

“数据库表、索引、表空间的回收方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:oracle中的v$process是什么
下一篇:PLSQL操作符有哪些
相关文章

 发表评论

暂时没有评论,来抢沙发吧~