????????前些天給一家客戶開發(fā)個接口叛溢,還原了正式數(shù)據(jù)庫塑悼,由于數(shù)據(jù)庫存儲量太大,還原后基本沒什么空間了楷掉,有個業(yè)務(wù)表使用頻繁厢蒜,決定刪除前期數(shù)據(jù),只留近兩個月數(shù)據(jù)以便測試靖诗。
???? ?? 數(shù)據(jù)量太大郭怪,等待時間長,就分段刪除的刊橘,刪了一半左右吧,發(fā)現(xiàn)delete掉數(shù)據(jù)后空間不但沒收縮颂鸿,而且占用的存儲空間還越來越大促绵,于是乎決定看下怎么回事。
????????首先查了下表空間占用率:
select total.tablespace_name,Round(total.MB,2) as Total_MB, Round(total.MB-free.MB,2) as Used_MB, Round((1-free.MB/total.MB)*100,2) || '%' as Used_Rct
from (select tablespace_name,Sum(bytes)/1024/1024 as MB from dba_free_space group by tablespace_name) free, (select tablespace_name,Sum(bytes)/1024/1024 as MB from dba_data_files? group by tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name嘴纺;
????????發(fā)現(xiàn)UNDOTBS1這個表空間占了32G的存儲空間败晴,百度了下才知道這個是回滾段表空間,事物恢復(fù)栽渴、記錄些日志什么的尖坤。知道用途后就放心刪除了。
????????1闲擦、創(chuàng)建新的表空間:
create undo tablespace undotbs2 datafile '/oradata/ddptest/UNDOTBS1_01.dbf' size 100m reuse autoextend on next 100m maxsize unlimited;
2慢味、更改splife配置:
alter system set undo_tablespace=undotbs2 scope=both;
3、刪除原表空間:
drop tablespace undotbs2 including contents;
4墅冷、創(chuàng)建pfile:
????????create pfile from spfile;
? ? ? ?這時發(fā)現(xiàn)存儲空間并沒有減少纯路,重新查了下表空間占用率,已經(jīng)沒有UNDOTBS1的記錄了寞忿,能查到UNDOTBS2的占用率驰唬。索性停掉oracle服務(wù),直接去路徑delete掉表空間腔彰,瞬間多了30多G空間叫编。于是繼續(xù)刪除數(shù)據(jù),刪除了大半天終于刪完了霹抛,回滾段表空間又重新建了一次搓逾,但是數(shù)據(jù)表空間占用率并沒有下降。
????????手動釋放表空間:
????????alter table tableName enable row movement;
alter tabletableName shrink space上炎;
表空間占用率一下子就降下來了恃逻。
????????(清除回滾段表空間一定要慎重雏搂,盡量不要在正式數(shù)據(jù)庫操作!)