資料清理的遺留問題處理(二)
之前嘗試了歷史資料的清理,在邏輯層面清除了資料,可以參見 http://blog.itpub.net/23718752/viewspace-1814000/
但是從物理層面來看,資料檔案還是那麼大,空間還是沒有釋放掉。
從計劃的500多G資料空間清理到了90G
SEGMENT_TYPE SIZE_MB
------------------ ----------
INDEX PARTITION 260279
TABLE PARTITION 294120
然後在經過一番清理之後,對應的段空間一下子就將下來了。
EGMENT_TYPE SIZE_MB
------------------ ----------
INDEX PARTITION 31823
TABLE PARTITION 47218
最後全部清理完
check segement size summary from year xxx
no rows selected
現在問題來了。清理資料檔案該怎麼做。思路應該是在dba_segments裡面去找是否存在相應的段。如果沒有即代表著可以刪除這些資料檔案。
有的朋友可能會說為什麼一定要清掉這些資料檔案,這個也有歷史原因,就是表空間和時間也有關係,比如某年的某月可能就會根據邏輯生成一個表空間,按照這種思路,儘管我清除了端資料,但是放著那些資料檔案,它們是不會被使用到的,還是佔著地方,所以需要直接清掉,給後續的資料留空間。
目前想達到的效果就是,根據表空間能夠查出來,如果某個表空間沒有對應的段物件,顯示為0,標誌著可以清理。
select tablespace_name,count(*) from dba_segments where tablespace_name in ('xxxxx','xxx') group by tablespace_name;
xxxxx 0
xxx 0
但是實際上去寫的時候發現還是沒那麼好弄,經過一番折騰寫出了一個基本實現要求的語句,但是算是一個初始版本,因為結果顯示還是有些牽強。
select tablespace_name,count(*)cnt from dba_segments where tablespace_name like '%DATA%2012%' group by tablespace_name
union
select tablespace_name,null cnt from dba_segments where tablespace_name like '%DATA%2012%' group by tablespace_name
TABLESPACE_NAME CNT
------------------------------ ----------
SERLOG_DATA_20120705 0
SERLOG_DATA_20120705 11
SERLOG_DATA_20120706 0
SERLOG_DATA_20120706 19
SERLOG_DATA_20121007 0
SERLOG_DATA_20121007 31
SERLOG_DATA_20121008 0
SERLOG_DATA_20121010 0
按照這個情況,只有表空間SERLOG_DATA_20121010是可以刪除的。其他的都會和一個dummy列並存。
當然sql寫成這樣也是醉了,能實現基本需求也行,但是成百上千的表空間,我覺得還是不好。繼續改進。使用了minus的方式。
select tablespace_name from dba_tablespaces s1 where tablespace_name like '%DATA%2012%'
minus
select tablespace_name from dba_segments s1 where tablespace_name like '%DATA%2012%' group by s1.tablespace_name
這種方式就會做一個減法,先把相關的表空間羅列出來,然後在dba_segements裡面過濾組合只會顯示有段物件的表空間。
這樣那些隱藏著的表空間都會一一羅列出來。
直接使用drop tablespace來清理。
檢視asm磁碟空間,清理前剩餘80多G
GROUP_NUMBER NAME FREE_MB TOTAL_MB
------------ ------------------------------ ---------- ----------
1 ARCH 204740 204800
2 DATA 84336 6383104
清除多餘的資料檔案,可以看到立馬剩出了快400G.
GROUP_NUMBER NAME FREE_MB TOTAL_MB
------------ -------------------- ---------- ----------
1 ARCH 204740 204800
2 DATA 390360 6383104
這個時候別被這些成績所迷惑,刪除分割槽的同時會清楚分割槽索引,這些分割槽索引的空間又是不少。至於有多少呢,我們還是使用minus的方式來清理。
清除多餘的索引資料檔案,清理之後剩餘了近1T的空間。
GROUP_NUMBER NAME FREE_MB TOTAL_MB
------------ -------------------- ---------- ----------
1 ARCH 203906 204800
2 DATA 981640 6383104
這個例子不是說明minus清理有多好,是想說清理的時候,邏輯清理100%完成,物理清理很可能會漏掉,清理了不到50%,這樣我們的工作就不徹底,半途而廢。
但是從物理層面來看,資料檔案還是那麼大,空間還是沒有釋放掉。
從計劃的500多G資料空間清理到了90G
SEGMENT_TYPE SIZE_MB
------------------ ----------
INDEX PARTITION 260279
TABLE PARTITION 294120
然後在經過一番清理之後,對應的段空間一下子就將下來了。
EGMENT_TYPE SIZE_MB
------------------ ----------
INDEX PARTITION 31823
TABLE PARTITION 47218
最後全部清理完
check segement size summary from year xxx
no rows selected
現在問題來了。清理資料檔案該怎麼做。思路應該是在dba_segments裡面去找是否存在相應的段。如果沒有即代表著可以刪除這些資料檔案。
有的朋友可能會說為什麼一定要清掉這些資料檔案,這個也有歷史原因,就是表空間和時間也有關係,比如某年的某月可能就會根據邏輯生成一個表空間,按照這種思路,儘管我清除了端資料,但是放著那些資料檔案,它們是不會被使用到的,還是佔著地方,所以需要直接清掉,給後續的資料留空間。
目前想達到的效果就是,根據表空間能夠查出來,如果某個表空間沒有對應的段物件,顯示為0,標誌著可以清理。
select tablespace_name,count(*) from dba_segments where tablespace_name in ('xxxxx','xxx') group by tablespace_name;
xxxxx 0
xxx 0
但是實際上去寫的時候發現還是沒那麼好弄,經過一番折騰寫出了一個基本實現要求的語句,但是算是一個初始版本,因為結果顯示還是有些牽強。
select tablespace_name,count(*)cnt from dba_segments where tablespace_name like '%DATA%2012%' group by tablespace_name
union
select tablespace_name,null cnt from dba_segments where tablespace_name like '%DATA%2012%' group by tablespace_name
TABLESPACE_NAME CNT
------------------------------ ----------
SERLOG_DATA_20120705 0
SERLOG_DATA_20120705 11
SERLOG_DATA_20120706 0
SERLOG_DATA_20120706 19
SERLOG_DATA_20121007 0
SERLOG_DATA_20121007 31
SERLOG_DATA_20121008 0
SERLOG_DATA_20121010 0
按照這個情況,只有表空間SERLOG_DATA_20121010是可以刪除的。其他的都會和一個dummy列並存。
當然sql寫成這樣也是醉了,能實現基本需求也行,但是成百上千的表空間,我覺得還是不好。繼續改進。使用了minus的方式。
select tablespace_name from dba_tablespaces s1 where tablespace_name like '%DATA%2012%'
minus
select tablespace_name from dba_segments s1 where tablespace_name like '%DATA%2012%' group by s1.tablespace_name
這種方式就會做一個減法,先把相關的表空間羅列出來,然後在dba_segements裡面過濾組合只會顯示有段物件的表空間。
這樣那些隱藏著的表空間都會一一羅列出來。
直接使用drop tablespace來清理。
檢視asm磁碟空間,清理前剩餘80多G
GROUP_NUMBER NAME FREE_MB TOTAL_MB
------------ ------------------------------ ---------- ----------
1 ARCH 204740 204800
2 DATA 84336 6383104
清除多餘的資料檔案,可以看到立馬剩出了快400G.
GROUP_NUMBER NAME FREE_MB TOTAL_MB
------------ -------------------- ---------- ----------
1 ARCH 204740 204800
2 DATA 390360 6383104
這個時候別被這些成績所迷惑,刪除分割槽的同時會清楚分割槽索引,這些分割槽索引的空間又是不少。至於有多少呢,我們還是使用minus的方式來清理。
清除多餘的索引資料檔案,清理之後剩餘了近1T的空間。
GROUP_NUMBER NAME FREE_MB TOTAL_MB
------------ -------------------- ---------- ----------
1 ARCH 203906 204800
2 DATA 981640 6383104
這個例子不是說明minus清理有多好,是想說清理的時候,邏輯清理100%完成,物理清理很可能會漏掉,清理了不到50%,這樣我們的工作就不徹底,半途而廢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1814723/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 遺留程式碼處理技巧與案例演示
- 資料預處理-資料清理
- 資料處理--pandas問題
- Python資料處理(二):處理 Excel 資料PythonExcel
- 大資料處理需留意哪些問題大資料
- Oracle資料庫中的逐行處理問題NEOracle資料庫
- 二、Git 問題彙總及處理Git
- .net網站自動化部署-致兩年前的遺留的問題網站
- 乾貨丨RPA工程中的資料處理問題
- 資料預處理- 資料清理 資料整合 資料變換 資料規約
- 如何處理Oracle資料庫中的壞塊問題(轉)Oracle資料庫
- 使用資料庫處理併發可能導致的問題資料庫
- python中多程式處理資料庫連線的問題Python資料庫
- openGauss資料庫xlog目錄滿問題處理資料庫
- iview Tree資料格式問題,無限遞迴樹處理資料View遞迴
- 在 React 中處理資料流問題的一些思考React
- 怎麼處理ERP體系軟體資料的安全問題
- Oracle日常問題處理-資料庫無法啟動Oracle資料庫
- 資料庫主機重啟卡住問題處理分享資料庫
- WannaCry兩年後捲土重來,NSA遺留問題尚未解決
- Python 柵格資料處理教程(二)Python
- 爬蟲架構|利用Kafka處理資料推送問題(2)爬蟲架構Kafka
- Oracle資料庫處理壞塊問題常用命令Oracle資料庫
- 海量資料處理問題知識點複習手冊
- golang json處理問題GolangJSON
- [git] git問題處理Git
- sklearn 第二篇:資料預處理
- Sql Server資料庫類似正規表示式的字元處理問題SQLServer資料庫字元
- X7一體機資料庫遷移問題處理資料庫
- 達夢資料庫日常管理之問題處理筆記1資料庫筆記
- 銀河麒麟系統安裝ORACLE資料庫問題處理Oracle資料庫
- 玩轉大資料系列之二:資料分析與處理大資料
- .net異常處理的效能問題
- SpringBoot 2.6.7 處理跨域的問題Spring Boot跨域
- SpringBoot 2.7.0 處理跨域的問題Spring Boot跨域
- CS APP第二章 資料的表示和處理APP
- 【問題處理】MySQL忘記root密碼的處理辦法MySql密碼
- 資料處理
- 併發問題處理方式