為了解決表空間不足告警,到如今,我已經使用過下面三種形式:
一、添加數據文件
這個方法最為簡單有效,但是需要足夠的存儲介質。
如果數據文件放在系統文件上則需要數據庫主機上空間充裕;如果是裸設備的話,則需要有足夠的lv。
腳本為: alter tablespacets_nameadd datafile 'file_name' size 4095M autoextend off;(裸設備:一般選擇autoextend off,因為lv已經提前劃好容量,而已最好設size比lv稍小一點)
二、壓縮table和index
這種方法一般不推薦,除非是實在沒有擴展的空間了,而且表或索引不能經常進行DDL操作的,這才允許。就算compress了,能節約出來的空間也是十分可憐的。
如果對已經壓縮了的表或索引做update、insert等DDL操作,那將會犧牲無數的IO來做代價的……
腳本為:
alter tableowner.table_namemove compress parallel 8 nologging;不知道為什麼索引不能采用parallel(並行)操作
三、Move an object to a different tablespace
顧名思義,就是挪動對象到其它表空間去。將原來表空間容量緊張裡的某些對象,挪到其它不緊張的表空間裡,以解燃眉之急。
也不推薦,僅僅解燃眉之急而已。
具體步驟在下篇文檔中說明
其實無論是那種方法,如果存儲介質實在緊張了,讓應用開發商清理舊的沒用的數據,才是解決表空間告警的最佳方法。