Oracle的奇葩設定之歸檔清理作業與rm -rf

清風艾艾發表於2015-02-25
    雖然,Linux、Unix主機的定時任務crontab對於應用或資料庫伺服器的日常維護起到了很大的作用,但是,一旦設定不合理,就會給應用或資料庫伺服器的正常執行帶來潛在的安全隱患。
    在聯通有這麼奇葩的設定,那個超級不合理的設定是關於oracle資料庫歸檔清理的。主機維護人員為了減輕日常維護負擔,將清理任務交給了crontab,放了一個清理指令碼在資料庫伺服器上。令誰都想不到的是指令碼清理歸檔的命令是:rm -rf ....。由於資料庫伺服器儲存空間壓力很大,需要該指令碼沒30分鐘執行一次,來釋放空間。由於資料庫歸檔程式會不定時執行,有與該指令碼耦合的可能,結果還真的發生了。導致資料庫正在歸檔的歸檔檔案被rm -rf強制刪除掉了,因而資料庫無法完成歸檔,告警日誌一直報錯如下:
Wed Jul  9 22:30:46 2014
Errors in file /oracle/admin/cdma/bdump/cdma_arc1_25303.trc:
ORA-19510: 無法設定 984377 區塊的大小給檔案 "/oradata2/cdma/archivelog/1_2302874_696954518.dbf" (塊大小 = 512)
ORA-27037: 無法獲得檔案狀態
    經過查詢,/oradata2/cdma/archivelog/1_2302874_696954518.dbf已經不存在了。更嚴重的後果是,由於正在歸檔的歸檔被刪除還導致雙擊異常而發生切換,而且這種由於歸檔誤刪除發生雙擊切換還不止一次。從作業系統的messages檔案有印證,如上述告警報錯,只要是歸檔程式正在歸檔還沒完成,而rm -rf定時任務刪除了正在歸檔的檔案,都是半點發生的。然後solaris雙擊軟體日誌檔案檢測資料庫核心程式異常,就切換oracle資料庫到另外一個節點執行,但是資料庫到對端執行還是不能完成歸檔,又發生切換。
    後來,透過與主機、應用協商採用rman自動刪除歸檔來避免正在歸檔的檔案被誤刪除,具體的命令如下:
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=/oracle/app/oracle/product/10.2.0.5/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=orcl105
rman target / nocatalog log /tmp/rman_delete_arch.log append<  allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

sql 'alter system archive log current';

crosscheck backup;

crosscheck archivelog all;

delete noprompt obsolete;

delete noprompt archivelog all;
EOF
透過歸檔檔案清理指令碼的調整,該雙擊資料庫因歸檔誤刪除的問題解決了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-1440904/,如需轉載,請註明出處,否則將追究法律責任。

相關文章