oracle故障處理之刪除大表空間hang住
背景
資料庫分割槽表資料越來越大,需要對過期話的資料進行遷移,以及大的分割槽表需要進行資料的清理和刪除,達到釋放磁碟空間的目的。
問題說明
環境:linux 6.X
資料庫:oracle 11.2.0.4 (PSU為2016年6月份的)
問題說明:
S_T_RTNRP_STATUS_2017是分割槽表,每天一個分割槽,且一共使用了2.5TB的空間,現在需要進行空間清理,操作步驟是先對錶進行truncate,然後刪除表,後對相應的表空間的每個資料檔案進行resize成1g,在進行刪除表空間語句
drop tablespace SMART_NRRPSTA_2017 including contents and datafiles。
但是,從2018.11.14 20:00一直到15日10:00,表空間沒有刪除,且資料字典中都能夠查詢得到資料檔案,hang住。
如下:
處理過程
1) 初步懷疑(以為是上次遺留問題)
初步懷疑是ASM程序問題,因為之前我刪除過一個大的表空間,是在業務期,業務使用者在查詢大的報表,IO開銷很嚴重,中途暫停,表空間沒有清理乾淨,後面再進行刪除,表空間刪除了,但是ASM磁碟組中資料檔案有的沒有進行刪除,初步懷疑是上次遺留問題,認為是上次沒有釋放的ASM程序阻塞表空間的刪除。
檢視阻塞的等待事件:
檢視等待事件中,執行時間很長的是class slave wait這類等待事件,檢視有關這類事件的程序號,以及資訊:
ps -ef |grep 41751
ps -ef |grep 68563
ps -ef |grep 25232
ps -ef |grep 34478
ps -ef |grep 12445
ps -ef |grep 34699
ps -ef |grep 25217
ps -ef |grep 68559
ps -ef |grep 62666
ps -ef |grep 20972
ps -ef |grep 11554
ps -ef |grep 68590
看到的全是ora_o開頭的程序,查詢相關資料,百度到的蓋國強老師的論壇:http://www.eygle.com/archives/2012/06/oracle_o001_o00n_cpu.html以及MOS
後面我還是把相關程序殺掉(由於生產環境,不敢全部殺死,也不敢直接執行kil -9 作業系統命令,先在資料庫層殺一個看看,發現殺掉後,系統自動啟動一個新的程序,後面才全部執行)
alter system kill session '504,53407';
alter system kill session '599,61619';
alter system kill session '498,38267';
alter system kill session '366,62377';
alter system kill session '401,27591';
alter system kill session '446,5345 ';
alter system kill session '230,11603';
alter system kill session '81,26169 ';
alter system kill session '468,16725';
alter system kill session '686,48001';
alter system kill session '384,40041';
等了一會兒,發現drop tablespace語句仍然是無進展,一樣的hang住,在support上查詢,懷疑是BUG也發現情況不符合。
2) 柳暗花明
開始懷疑不是上一次遺留的問題,懷疑是其他程序導致表空間刪除hang住。
進行AWR,生成的時間是刪除hang住那段時間:
DB time如下
發現DB time/(DB time+Elapsed)時間比例並不是特別高,
檢視TOP 10等待事件
佔用第一個的是TT等待事件,檢視整個會話的等待事件:
select event,count(1) from gv$session group by event order by 2;
檢視具體的TT - contention等待事件:
突然想起來了,自己搭建的一套OEM監控資料庫,其中sysman使用者登入,sys使用者監控磁碟組,這兩個會話阻塞導致drop tablespace hang住。
3) 處理措施
停止RAC兩個節點的OEM agent
如下圖:
停止後,檢視alert日誌:
成功刪除了表空間並釋放了磁碟組的空間。
4) 總結
1、 遇到問題要根據實際情況解決。
2、 感謝阿里的周衛豐周大牛幫我一起解決故障(雖然是小問題)。