ORACLE解决表空间不释放空间
由于數據庫中有一個日志表記錄7000萬條日志,造成數據庫占用磁盤283G之多,所以現在要求給磁盤瘦身,但是直接用DELETE語句刪除,不能釋放空間,經過查資料學習,得知這是"HWM"(高水位)造成.經過查找資料總結解決方案有兩種.
一 徹底刪除表(沒測試,因為不符合我的情況)
flashback table tablename1 to before drop rename to tablename2;--【to test3】將表重命名
drop table tablename2 purge; --徹底刪除表
二、清除表中的數據
? ? ? ? ① 使用truncate(沒測試)
????????truncate刪除不用加條件,直接刪除數據,不可找回數據,也不能有外鍵關聯,如果有外鍵關聯,先取消關聯,然后在刪除,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數據(本人使用)
? ? ? ? 因為是日志,所以我想留最近一個月的數據,所以不能直接刪表,當然也可以把表中要保留的數據備份,然后操作①中的操作,但是我還是選擇了古老的方法.但是DELETE刪除后是可以找回數據,為什么可以找回數據,那就是因為數據又存到了另外一個地方,就類似電腦中的回收站,要把回收站清空才能釋放空間.
a:??move?(引自:oracle刪除數據釋放表空間流程_誠的博客-CSDN博客_oracle釋放表空間)
優點:可以移動表到其他表空間,在執行命令時不需要執行alter table table_name enable row movement
缺點:表move 會導致表中的索引失效,要rebuild;同時表會產生行級鎖......;在此如果表中有LOB字段 時要用一下命令來實現表空間移動: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刪除數據釋放表空間流程_誠的博客-CSDN博客_oracle釋放表空間)
優點:降低高水位時索引不會失效
缺點:不能將表移動到其他表空間;高水位降低效果沒有move明顯;同時在執行命令前要先執行(alter table table_name enable row movement允許行移動)也會表會產生行級鎖.......,shrink比move更耗費cpu,產生很多current block這樣生成巨大的redo與undo 如果表中索引很少可以建議使用move降低高水位
?
shrink space常用操作命令(引自:Oracle 刪除數據后釋放數據文件所占磁盤空間_ulvge0的博客-CSDN博客)
下面的語句也是本人使用的語句,親測有效
alter table tablename enable row movement;--打開行移動
alter table tablename shrink space cascade;--壓縮表及相關數據段,并下調HWM
alter table tablename shrink sapce compact;--只壓縮,不下調HWM
alter table tablename shrink sapce ;--下調HWM
alter table tablename disable row movement;--關閉行移動
如有不對,請多多指教
?
總結
以上是生活随笔為你收集整理的ORACLE解决表空间不释放空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信呼协同办公系统-存储型XSS漏洞
- 下一篇: nginx的带宽限制和并发控制