表空間竟然達到了20G。
這是怎麼回事,資料庫曾經清庫好幾次,最近剛剛清庫,怎麼會有這麼大的表空間。
我一開始認為是表裡面的垃圾資料太多,清庫不完整,是以導緻表空間這麼大,然後我對資料庫進行清理,
最後導出資料時已經從270M變成10M了,差距相當大。
但是當我再次導入另一個系統時,表空間依然是20G,之後我嘗試導入空表,還是20G,這時候我就想到可能是表本身的空間太大了。
看下圖:
這僅僅是一個表,就有這麼大的空間,肯定是由于原來這個表曾經有過幾十萬的資料增長到了700多M,删除資料後,表空間不變,是以就導緻了上面的原因。
當我把上面的表轉存到臨時表的時候,顯示如下:
僅僅64KB。之後我就按照下面的操作:
1.将原表全部轉存到臨時表
2.删除原表
3.将臨時表存入原表
4.删除臨時表
我重新整理完之後,我又導出了,這次從10M變成了7M多。
我在另一電腦上再次導入之後,表空間的大小連100M都沒有超過,通過簡單的操作,給電腦節省了20G的空間...
再操作上面4步的時候,可能有人會覺得那麼多表很麻煩,我說一種我常用的方法,大家看下圖:
通過excel可以批量寫出樣式一樣的SQL語句....如果誰有更友善的方法,歡迎交流~~~~~~~~~~~~~
注意事項:上面的操作會丢失表的注釋和相應的觸發器等等...
這裡提供一個從網上搜到的查詢表空間的語句
select ff.s tablespace_name,
ff.b total,
(ff.b - fr.b) usage,
fr.b free,
round((ff.b - fr.b) / ff.b * 100) || '% ' usagep
from (select tablespace_name s, sum(bytes) / 1024 / 1024 b
from dba_data_files
group by tablespace_name) ff,
(select tablespace_name s, sum(bytes) / 1024 / 1024 b
from dba_free_space
group by tablespace_name) fr
where ff.s = fr.s