歸檔日志不在默認的閃回區?
如何正確地刪除Archivelog: Archivelog并不能直接得從OS層直接物理刪除,因為archivelog的相關信息是記錄在controlfile中的,當物理刪除后不會改變controlfile的設置。并且在查詢相關的動態視圖(例如v$archived_log)時,該部分日志仍然標注為存在。也就是說Oracle并不認為這些日志被刪除了,所以在刪除ARChivelog的時候,需要我們在其他地方做一些設置。 一、使用RMAN清楚物理刪除后的記錄 可以使用RMAN來刪除archivelog,具體可以按以下步驟操作: 1、物理刪除archivelog 2、進入RMAN 3、crosscheck archivelog all; 4、delete expried archivelog all; 這樣就在一些Oracle的記錄中查不到相應的archivelog記錄了。 二、直接使用RMAN刪除archivelog 其實在RMAN中是可以使用命令直接將ARCHIVELOG刪除的,命令如下: RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; 表示刪除7天以前的所有archivelog,但是這個命令的缺點是無法對archivelog進行細致的劃分。 三、使用RMAN備份achivelog后刪除 這是一種最為穩妥的方法了,使用RMAN備份archivelog,備份后全部刪除 backup format '/u01/arch_%T_%s_%U' archivelog all delete INPUT; 或者 backup database plus archivelog; 注:我在庫上設置了Streams后,使用RMAN刪除archivelog會導致報錯RMAN-08137: WARNING: archive log not deleted as it is still needed. 不知道該如何解決,據說是10.2的一個bug,如果真 是bug的話,那只能在OS層設置刪除,或用RMAN進行強制刪除了。 10g之后的版本,Oracle在RMAN中內置增加了一項歸檔文件的刪除策略,終于,DBA可以僅通過一項配置就 解決該問題了。該策略對應兩個值: APPLIED ON STANDBY:設置為該值時,當通過附加的DELETE INPUT子句刪除Standby數據庫仍需要的日志 時,會提示RMAN-08137錯誤。不過用戶仍然可以手動地通過DELETE ARCHIVELOG方式刪除。 NONE:設置為該值時,則不啟用歸檔文件的刪除策略。默認情況下就是NONE。 例如,啟用APPLIED ON STANDBY: RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY; new RMAN configuration parameters: CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY; new RMAN configuration parameters are successfully stored RMAN> run { backup archivelog all delete input format 'ZHSVR044_%d_set=%s_piece=%p_date=%T.ARC.rmn'; } 都知道在controlfile中記錄著每一個archivelog的相關信息,當然們在OS下把這些物理文件delete掉后,在我們的 controlfile中仍然記錄著這些archivelog的信息,在oracle的OEM管理器中有可視化的日志展現出,當我們手工清除archive目錄下的文件后,這些記錄并沒有被我們從controlfile中清除掉,也就是oracle并不知道這些文件已經不存在了!這時候我們要做手工的清除的話,下面我經過實驗,可以嘗試這種方法: 1. 進入rman 2. connect target / 3. crosscheck archivelog all; 4. delete expired archivelog all; 這時候我們再去OEM中看就一定看不到,如果你的從來沒有做過這個動作的話,我們可以比較從這個動作前的controlfile后動作后的controlfile的大小! ORACLE正確刪除歸檔并回收空間的方法 ORACLE正確刪除歸檔并回收空間的方法 一個ORACLE歸檔日志經常滿,表現為/oraarchive 這個文件空間占用100%大家一定抱怨ORACLE為何沒有歸檔維護工具,很多人直接刪除了事,錯了,ORACLE有,而且很智能,可以正確的刪除歸檔和FLASHBACK,不過切記,ORACLE歸檔日志對于ORACLE的數據恢復和備份非常重要,不到萬不得已不要刪除歸檔日志。 刪除歸檔日志的過程 以ORACLE用戶身份登錄到數據庫服務器主機或通過網絡連接 進入ORACLE數據備份工具 rman target/ 或rman target/@orcl 在命令窗口里面執行 DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; 說明 SYSDATA-7,表明當前的系統時間7天前,before關鍵字表示在7天前的歸檔日志,如果使用了閃回功能,也會刪除閃回的數據。 同樣道理,也可以刪除從7天前到現在的全部日志,不過這個命令要考慮清楚,做完這個刪除,最好馬上進行全備份數據庫 DELETE ARCHIVELOG FROM TIME 'SYSDATE-7'; UNIX/LINUX下也可以通過FIND找到7天前的歸檔數據,使用EXEC子操作刪除 find /oraarchive -xdev -mtime +7 -name "*.dbf" -exec rm -f {} ; 這樣做仍然會在RMAN里留下未管理的歸檔文件 仍需要在RMAN里執行下面2條命令 crosscheck archivelog all; delete expired archivelog all; 所以還不如上面的方法好用,不過用FIND的好處就是,可以在條件上,和EXEC子項上做很多操作,實現更復雜的功能 3.簡要介紹一下report obsolete命令 使用report obsolete命令報告過期備份