oracle資料清理日誌

2021-05-27 08:40:43 字數 1647 閱讀 3198

背景:

公司生產資料庫伺服器表空間free不足,整個空間32個g,92%的空間被5%的表給佔了;

這幾張大表中大部分都是歷史資料,實際可用資料只需6個月內即可,每張表有2000萬左右的資料,檢索效率較低;

為了節省空間,提供表的檢索效率,所以考慮對這幾張大表進行歷史資料清理;

方案:

1)利用凌晨0:00到5:00生產系統停服的機會,停應用服務,讓資料庫處於空閒狀態;

2)歷史資料清理,採用procedures使用delete進行500條每次批量清理,每10000條要commint一次,且sleep5秒;

3)對於可清空的表,推薦使用truncate table drop storage,這樣效率高,清理徹底;

3)表空間釋放,採用move table、deallocate table、rebuild index

實施:

2)第二步,truncate了2張表,非常快;如果發現truncate掉的表的空間仍然很大,建議使用alter table deallocate unused keep 0進行整理;

3)move了2張表,雖然速度較慢,但是還算順利,move前檢查了表空間freespace大小,第二步truncate釋放出了一些空間,所以夠move用的;

4)第三步,move完了對索引進行重建,出了個岔子,嚇得滿頭大漢,事情是這樣的:重建其中乙個索引時,突然資料庫連線中斷並報錯ora-00257 archiver error:connect internal only,util freed.,怎麼連也連不上,暈了,趕緊查google,還算找到原因,原來是快速恢復區的歸檔日誌滿了,解決辦法就是清理歸檔日誌即可;接下來的事情讓我痛不欲生哈;我直接去歸檔日誌目錄下,用rm命令清理了20個g的日誌文件,以外這樣就可以恢復了,可是還是沒恢復,嘗試重啟資料庫也失敗,崩潰啊,後悔準備工作沒到位;當時是凌晨,叫天天不應叫地地不靈啊,只能硬著頭皮繼續google,終於想起來清理歸檔日誌手工方式是不可取的,應該用ram進行,失望了,rm掉的東西基本很難恢復,系統5點前要恢復哪有可能?真想找個時空隧道永遠消失。。。。。。繼續google吧,真幸運,有人遇到過類似的問題,並給出的解決辦法:

rman target /

crosscheck archivelog all;

delete expired archivelog all;

嘗試了一下果然奏效,資料庫重啟後恢復了,竊喜!

這把快速恢復區空了,繼續我的index rebuild工作吧,很快把2張表的index重建完畢;

5)再去檢視了表空間,厲害,差不多釋放了50%的空間,16個g啊;

6)檢查資料庫服務正常後,啟動各個應用服務,一切正常;

7)好了,清理結束,大功告成,手工,很有成就感

總結:

1)進行大資料量清理時,最好保持資料庫空閒,如果有可能最好進行備份;

2)move前,確保tablespace中有一倍於被move的表大小的free space,否則會報錯;

3)move和rebuild前,檢查一下快速恢復區的歸檔日誌大小,如果比較大建議使用ram進行清理,否則會導致資料庫服務異常;

4)move後,被move表的索引必須rebuild;

oracle歸檔日誌清理

rman清除方式會自動清除磁碟上的歸檔日誌檔案,同時會釋放控制檔案中對應的歸檔日誌的歸檔資訊。list expired archivelog all 列出所有失效的歸檔日誌 delete archivelog until sequence 16 刪除log sequence為16及16之前的所有歸檔...

Oracle自動清理日誌指令碼

一 背景 二 工具介紹 rman recovery manager 是一種用於備份 backup 還原 restore 和恢復 recover 資料庫的 oracle 工具。rman只能用於oracle8或更高的版本中。它能夠備份整個資料庫或資料庫部件,如表空間 資料檔案 控制檔案 歸檔檔案以及sp...

Oracle自動清理日誌指令碼

一 背景 二 工具介紹 rman recovery manager 是一種用於備份 backup 還原 restore 和恢復 recover 資料庫的 oracle 工具。rman只能用於oracle8或更高的版本中。它能夠備份整個資料庫或資料庫部件,如表空間 資料檔案 控制檔案 歸檔檔案以及sp...