網(wǎng)站首頁 編程語言 正文
oracle刪除數(shù)據(jù)但表空間占用率沒有減小
使用delete刪除數(shù)據(jù)表空間使用率并沒有減少;
如果只保留少數(shù)數(shù)據(jù)可以使用這個方法:
先將要保留的數(shù)據(jù)insert到另外一張表中,然后執(zhí)行sql:
truncate table tablename DROP STORAGE;
解釋: 直接刪除表,并且釋放存儲空間。truncate的意思是清空表數(shù)據(jù), “DROP STORAGE”是釋放存儲空間。
然后在將備份數(shù)據(jù)還原;
oracle 大表刪除數(shù)據(jù)后,回收空間的問題
在oracle中由于表結構設計不合理或者需要清楚老數(shù)據(jù)的時候,經(jīng)常需要對大表數(shù)據(jù)進行清理。
一般有一下幾種方法
1.刪除大部分數(shù)據(jù),留下小部分數(shù)據(jù)。我們可以把需要保留的數(shù)據(jù)轉移到別的表,然后再把大表drop掉,然后改名就行了;
a) create table tablename_min as select * from tablename_max a where 需要保留的數(shù)據(jù).
b) drop table tablename_max ;
c) rename tablename_min as tablename_max ;
這樣就能清除這個大表的hwm,而且釋放掉其他空間。
2.當刪除的數(shù)據(jù)只是一小部分數(shù)據(jù)的話,第一種方法就不適用了。比如 3億條數(shù)據(jù),你刪除一億條數(shù)據(jù)的話,用1就不合適。
這時我們就應該考慮使用shrink table的方式。
a) 我們可以先用delete from tablename_max;
b) 由于我們進行了數(shù)據(jù)的delete 所以造成了 tablename_max 這張表的數(shù)據(jù)稀疏,數(shù)據(jù)塊并沒有減少,hwm也沒有減少,這樣就會影響全表掃描需要訪問更多的數(shù)據(jù)塊。這時我們可以通過shrink來重組數(shù)據(jù)使數(shù)據(jù)分布更緊密,同時降低HWM釋放空閑數(shù)據(jù)塊。
c)由于需要移動行數(shù)據(jù),數(shù)據(jù)的rowid會發(fā)生變化,所以需要設置表的row movement屬性:
alter table tablename_max enable row movement; --開啟行遷移功能。
alter table tablename_max shrink space compact;--(可以在壓縮期間進行DML操作和查詢) ,收縮表,不會降低hwm
alter table tablename_max shrink space; --( 調(diào)整HWM時將阻塞DML操作),收縮表,并且降低hwm
alter table tablename_max shrink space cascade;--收縮表并降低hwm,并且回收相應的索引。
由于我們刪除了大量的數(shù)據(jù) ,相應的索引也進行了刪除,這時需要對索引進行收縮。
alter index idxname shrink space;
注意:shrink table只會針對assm(自動段空間管理)的表有用,否則會報: ORA-10635: Invalid segment or tablespace type。
alter table tablename_max enable row movement語句會造成引用表tablename_max的對象(如存儲過程、包、視圖等)變?yōu)闊o效。執(zhí)行完成后,最好執(zhí)行一下utlrp.sql來編譯無效的對象。
由于是通過DML操作進行的,會產(chǎn)生大量redo,注意archivelog目錄的空間大小問題;同時undo表空間也會暴增。
總結
原文鏈接:https://blog.csdn.net/qq_38256982/article/details/119871838
相關推薦
- 2022-08-26 Pandas?DataFrame.drop()刪除數(shù)據(jù)的方法實例_python
- 2022-08-11 C++通過boost.date_time進行時間運算_C 語言
- 2022-04-11 C#基于SerialPort類實現(xiàn)串口通訊詳解_C#教程
- 2022-04-19 Django項目中動態(tài)設置靜態(tài)文件路徑的全過程_python
- 2022-06-10 ASP.NET?Core為Ocelot網(wǎng)關配置Swagger_實用技巧
- 2022-09-18 python實現(xiàn)修改xml文件內(nèi)容_python
- 2023-05-20 命令行傳遞參數(shù)argparse.ArgumentParser的使用解析_python
- 2022-03-11 fatal error LNK1120: 1 個無法解析的外部命令 的解決辦法
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支