1. 程式人生 > >Oracle每天自動備份腳本

Oracle每天自動備份腳本

oracle expdp

因為需要最近寫了一個適用於Oracle上的備份腳本,Oracle的數據備份不像MySQL一樣直接使用二進制工具就可以備份,在Oracle上進行數據備份需要 做好相應的配置,在配置好後才能進行正常的數據備份腳本,所以在Oracle備份數據前需要做一些配置。

首先,因為Oracle的11g開始的特性,空表不會分配表空間所以在備份腳本中我使用了expdp工具來進行數據備份,在備份開始之前需要先把Oracle的數據泵導出目錄用DBA賬戶先做好指定並且授權讀寫,再修改目錄的屬組,操作很簡單,就是一些expdp數據泵的操作,這個以前有說明過,在這裏就不做篇幅做說明了,可以參看:http://jim123.blog.51cto.com/4763600/1941618,在設置好dpdata1目錄後,還需要修改dpdata1目錄的屬組這點很重要,不然使用expdp導出的數據文件無法寫入,具體根據當時安裝Oracle時定義的屬組修改權限

[[email protected] ~]# chown oracle:oinstall /data/backup/oracle_backup

在修改完以上的步驟後,再把Oracle用戶下的bash_profile配置文件中在安裝時定義好的環境變量拷貝到腳本中,在定義好腳本的執行時間就可以了,腳本的實現比較簡單,如下:

#!/bin/bash
#oracle_backup.sh version1.0 chmod 700
#writer jim
#00 00 * * * /usr/local/scripts/oracle_backup.sh
#chmod 700 /usr/local/scripts/oracle_backup.sh
#You must first import the environment variables in the Oracle user‘s bash_profile file
#Must be used to define the DBA account first dpdata1 path and authorized directory to read and write, modify the dpdata1 group
#history
#2017.07.01
export ORACLE_BASE=/usr/local/u01/oracle
export ORACLE_HOME=/usr/local/u01/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=oracle11
export NLS_LANG="american_america.ZHS16GBK"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:Mi:SS"
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
datetime=$(date +"%Y%m%d")
dpdata1_dir="/data/backup/oracle_backup"
oracle_u01="u01"
oracle_u02="u02"
oracle_password1="u01_password"
oracle_password2="u02_password"

expdp ${oracle_u01}/${oracle_password1} directory=dpdata1 dumpfile=${oracle_u01}_${datetime} logfile=${oracle_u01}_${datetime}.log

if [ $? -ne 0 ];then
    echo "$(date +"%Y-%m-%d_%H:%M:%S")oracle_${oracle_u01}_backup_file!" > ${dpdata1_dir}/${datetime}_err.log
fi

expdp ${oracle_u02}/${oracle_password2} directory=dpdata1 dumpfile=${oracle_u02}_${datetime} logfile=${oracle_u02}_${datetime}.log

if [ $? -ne 0 ];then
    echo "$(date +"%Y-%m-%d_%H:%M:%S")oracle_${oracle_u02}_backup_file!" >> ${dpdata1_dir}/${datetime}_err.log
fi

/usr/bin/bzip2 -z ${dpdata1_dir}/*${datetime}*
find $dpdata1_dir -type f -ctime +30 -name "*.bz2" -exec rm -vf {} \;

當然,也可以把失敗的地方換成寫好的發郵件的function,在失敗的時候發一封郵件也可以

本文出自 “技術隨筆” 博客,謝絕轉載!

Oracle每天自動備份腳本