ORACLE解决表空间不释放空间
由于數(shù)據(jù)庫中有一個日志表記錄7000萬條日志,造成數(shù)據(jù)庫占用磁盤283G之多,所以現(xiàn)在要求給磁盤瘦身,但是直接用DELETE語句刪除,不能釋放空間,經(jīng)過查資料學習,得知這是"HWM"(高水位)造成.經(jīng)過查找資料總結(jié)解決方案有兩種.
一 徹底刪除表(沒測試,因為不符合我的情況)
flashback table tablename1 to before drop rename to tablename2;--【to test3】將表重命名
drop table tablename2 purge; --徹底刪除表
二、清除表中的數(shù)據(jù)
? ? ? ? ① 使用truncate(沒測試)
????????truncate刪除不用加條件,直接刪除數(shù)據(jù),不可找回數(shù)據(jù),也不能有外鍵關(guān)聯(lián),如果有外鍵關(guān)聯(lián),先取消關(guān)聯(lián),然后在刪除,truncate table? tablename1
Truncate不支持回滾,并且不能truncate一個帶有外鍵的表,如果要刪除首先要取消外鍵,然后再刪除。
truncate table 后,有可能表空間仍沒有釋放,可以使用如下語句:
alter table 表名稱 deallocate?? UNUSED KEEP 0;
注意如果不加KEEP 0的話,表空間是不會釋放的。
例如:
alter table F_MINUTE_TD_NET_FHO_B7 deallocate?? UNUSED KEEP 0;
或者:
TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE才能釋放表空間。
例如: truncate table? test1 DROP STORAGE;
引自:
https://www.cnblogs.com/sl-shilong/p/3625153.htmlhttps://www.cnblogs.com/sl-shilong/p/3625153.htmlhttps://www.cnblogs.com/sl-shilong/p/3625153.html
?②DELETE數(shù)據(jù)(本人使用)
? ? ? ? 因為是日志,所以我想留最近一個月的數(shù)據(jù),所以不能直接刪表,當然也可以把表中要保留的數(shù)據(jù)備份,然后操作①中的操作,但是我還是選擇了古老的方法.但是DELETE刪除后是可以找回數(shù)據(jù),為什么可以找回數(shù)據(jù),那就是因為數(shù)據(jù)又存到了另外一個地方,就類似電腦中的回收站,要把回收站清空才能釋放空間.
a:??move?(引自:oracle刪除數(shù)據(jù)釋放表空間流程_誠的博客-CSDN博客_oracle釋放表空間)
優(yōu)點:可以移動表到其他表空間,在執(zhí)行命令時不需要執(zhí)行alter table table_name enable row movement
缺點:表move 會導(dǎo)致表中的索引失效,要rebuild;同時表會產(chǎn)生行級鎖......;在此如果表中有LOB字段 時要用一下命令來實現(xiàn)表空間移動:alter table owner.table_name move tablespace tablespace_name lob (lob_column) store as lob segment ?tablespace tablespace_name;也可以單獨move lob,index要rebuild
b:shrink space?(引自:oracle刪除數(shù)據(jù)釋放表空間流程_誠的博客-CSDN博客_oracle釋放表空間)
優(yōu)點:降低高水位時索引不會失效
缺點:不能將表移動到其他表空間;高水位降低效果沒有move明顯;同時在執(zhí)行命令前要先執(zhí)行(alter table table_name enable row movement允許行移動)也會表會產(chǎn)生行級鎖.......,shrink比move更耗費cpu,產(chǎn)生很多current block這樣生成巨大的redo與undo 如果表中索引很少可以建議使用move降低高水位
?
shrink space常用操作命令(引自:Oracle 刪除數(shù)據(jù)后釋放數(shù)據(jù)文件所占磁盤空間_ulvge0的博客-CSDN博客)
下面的語句也是本人使用的語句,親測有效
alter table tablename enable row movement;--打開行移動
alter table tablename shrink space cascade;--壓縮表及相關(guān)數(shù)據(jù)段,并下調(diào)HWM
alter table tablename shrink sapce compact;--只壓縮,不下調(diào)HWM
alter table tablename shrink sapce ;--下調(diào)HWM
alter table tablename disable row movement;--關(guān)閉行移動
如有不對,請多多指教
?
總結(jié)
以上是生活随笔為你收集整理的ORACLE解决表空间不释放空间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信呼协同办公系统-存储型XSS漏洞
- 下一篇: nginx的带宽限制和并发控制