在日常的工作和學習中很多人在對數據庫中的數據做了archive後數據量會出現減少的情況在這種前提下原來定義的數據文件假如不進行收縮就會浪費很多的空間在下文中我們將詳細介紹一種解決此問題的方法
首先停止listener避免在rebuild時有dml操作
◆利用Toad的tools>rebuild multiple objects對欲收縮的表空間所涉及的表及索引進行rebuild(就是alter table table_name move tablespace 命令)
例子
Alter table SICS_HISTORYCOD_AMOUNT move
TABLESPACE TBSP
Parallel (Degree ) ;
Alter Table SICS_HISTORYCOD_AMOUNT noparallel;
Alter index SICS_HISTORYIX_COD_AMOUNT rebuild
TABLESPACE TBSP
Parallel (Degree ) Nologging
online;
Alter index SICS_HISTORYIX_COD_AMOUNT noparallel;
選擇項中我們可以選擇rebuild associated indexes with tables這樣在產生腳本時可以同時對index做rebuild(注意table如果move了表空間必須對index做rebuild)
◆Rebuild結束後對數據文件的實際大小做評估
()找出表空間所涉及的所有數據文件
sql>select * from dba_data_files; 》可以獲得file_id
()找到最大的block_id
SQL>select max(block_id)*db_block_size// from dba_extents where file_id=;
◆收縮數據文件的空間
SQL> alter database datafile path/data_file resize xxxM; 此值來自於()
From:http://tw.wingwit.com/Article/program/Oracle/201311/18261.html