採用job定時執行recover datafile

myownstars發表於2012-05-21
某臺windows伺服器,由於防毒軟體設定問題,導致每天凌晨都會鎖定controlfile/datafile,導致資料庫crash或者某些檔案處於recover狀態;由於公司流程繁瑣,通知系統管理員禁掉防毒軟體需要時間比較長,所以就考慮寫一個job,在凌晨時候定時檢查資料庫狀態,若已經crash則重啟;若有資料檔案離線則對其recover;
注:oracle的動態語句不支援execute immediate 'recover datafile '||file#,所以需要改寫一下語句(在此需感謝maclean的幫助);整體job如下
--啟動資料庫
Dbstart.bat
set ORACLE_SID=DBSTART
set ORACLE_HOME=C:\oracle\product\10.2.0\db_1
sqlplus "/nolog" @db_start.sql > dbstart.log
--因為oracle啟動後再嘗試startup只會報錯,並不會影響現有程式,故不需判斷資料庫當前狀態,直接startup即可
dbstart.sql
conn sys/oracle as sysdba
@startup
Exit
--
Startup.sql
startup
 
--恢復資料檔案
set ORACLE_SID=DBSTART
set ORACLE_HOME=C:\oracle\product\10.2.0\db_1
sqlplus "/nolog" @db_recover.sql
--
db_recover.sql
connect sys/oracle as sysdba
set echo off
set veri off
set feedback off
set termout on
set heading off
set linesize 1500
set termout off
spool recovery_generate.sql
select 'recover datafile '||FILE#||' ;' from v$recover_file;
spool off
set termout on;
set echo on
@recovery_generate
@db_online
--
Db_online.sql
begin
  for i in (select file# from v$datafile where status='OFFLINE') loop
    execute immediate 'alter database datafile '||i.file#||' online';
  end loop;
end;
/
 

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

相關文章