今天因為工作上的關係,需要設計一個對ORACLE的備份方案,由於資料庫較大,不適合每天存量備份,所以設計了這種按周7個檔案的覆蓋備份,具體步驟如下:
1.建立SHELL執行指令碼oracle_backup.sh
[root@czjie ~]# vi /data/oracle/orabak/oracle_backup.sh
語句如下:
#!/bin/bash
export ORACLE_BASE=/opt/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#產生備份檔案名,最後一位元字(0-6)對應(星期天-星期六)
a=czjie_bak_week$(date +%w)
echo $a
exp czjie/czjie_2012 file=/data/oracle/orabak/$a.dmp log=/data/oracle/orabak/$a.log
注意:export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK,這一行如果沒有,那麼當exp工具所在的環境變數跟NLS LANG中的NLS_CHARCATERSET不一致時,就會導致EXP-00091 Exporting questionable statistics,如果不知道怎麼擷取NLS_CHARCATERSET,可參考我的文章:EXP-00091 Exporting questionable statistics
a=czjie_bak_week$(date +%w) 中 $(date +%w) 擷取的是周幾,按星期天為0的順序一直到星期六的6,測試時候可以用$(date +%w -d "1 days ago")方法進行天數上的調整;
2.授予SHELL指令碼可執行許可權及其使用者歸屬
[root@czjie ~]# cd /data/oracle/orabak
[root@czjie orabak]# chmod 700 backup.sh
[root@czjie orabak]# chown oracle backup.sh
3.確保備份的檔案目錄歸屬於oracle使用者
[root@czjie ~]# chown –R oracle.oinstall /data/oracle/orabak/
4.為oracle使用者建立一個crontab
[root@czjie ~]# crontab -u oracle –e
#添加以下內容:
0 6 * * * /data/oracle/orabak/oracle_backup.sh
注意:0 6 * * * 表示每天淩晨6點調度一次,後面是執行的語句;測試的時候可以定義成*/1 * * * *表示每分鐘調度一次;
5.確保crond服務正常運行
[root@czjie ~]# /sbin/service crond status
crond (pid 3081) 正在運行...
如果服務沒正常執行可用下面的方法進行啟動和關閉:
/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
/sbin/service crond reload //查看服務狀態
或
/etc/init.d/crond start //啟動服務
/etc/init.d/crond stop //關閉服務
/etc/init.d/crond restart //重啟服務
/etc/init.d/crond reload //重新載入配置
可以將這個服務在系統啟動的時候自動啟動:
在/etc/rc.d/rc.local這個指令碼的末尾加上:
/sbin/service crond start
至此,整個備份的配置過程完畢!由於自動調度的相關提示資訊不是列印到終端視窗,所以只能通過郵件日誌查看,語句如下:
[root@czjie ~]# cat /var/mail/oracle