#!/bin/bash
#############################################################
# Date: 18/12/2012
# Usage: daily fully export the database, and delete the dumped file before 2 days.
# Example: export_db_daily.sh -h host1 -s dbservice1
#############################################################
# create directory expdump as '/home/oracle/backup/expdump';
export ORACLE_HOME=/home/oracle/product/
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib
export PATH=$PATH:$JAVAHOME/bin:/usr/lib64:$ORACLE_HOME/bin
export CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/ojdbc5.jar
echo $#
USAGE="Usage: command [-h hostname] [-s service_name ]";
if [ $# -ne 4 ]
then
echo " $USAGE
EXAMPLE: export_db_daily -h host1 -s dbservice1"
exit 0
else
echo "export job starts!!"
fi
while getopts "h:s:" OPTION ; do
case "$OPTION" in
h) host="$OPTARG" ;;
s) service_name="$OPTARG" ;;
?) echo "Unrecognized parameter $USAGE" ;
exit 1 ;;
esac
done
export ORACLE_SID=$dbservice1
#Set variable for this script.
dateStr=`/bin/date +%Y%m%d%H`
dmpFileName=$dateStr'full_expdp_'$dbservice1'.dmp'
dmpLogName=$dateStr'full_expdp_'$dbservice1'.log'
#host=`hostname`
echo "the host you specified is $HOST, the OS Server is $host and the oracle instance is $ORACLE_SID " ;
dmpdir=/home/oracle/backup/expdump
mkdir -p $dmpdir/tmp
if [ -e "$dmpdir/$dmpFileName" ]
then
mv $dmpdir/$dmpFileName $dmpdir/tmp/
mv $dmpdir/$dmpLogName $dmpdir/tmp/
fi
find $dmpdir/*$service_name'.dmp' -mtime +2 -exec rm {} \;
find $dmpdir/tmp/*$service_name'.dmp' -mtime +2 -exec rm {} \;
find $dmpdir/*.log -mtime +5 -exec rm {} \;
#Begin to dump.
echo $(date +"%y-%m-%d %H:%M:%S")
echo "----------Begin to dump $dbservice1 of $host.-----------"
echo "expdp \"/ as sysdba\" full=Y directory=expdump dumpfile=$dmpFileName logfile=$dmpLogName PARALLEL=20 COMPRESSION=ALL"
expdp \"/ as sysdba\" full=Y directory="EXPDUMP" dumpfile=$dmpFileName logfile=$dmpLogName PARALLEL=20 COMPRESSION=ALL
echo "----------End to dump $dbservice1 of $host.-----------"
echo $(date +"%y-%m-%d %H:%M:%S")
这个Shell脚本的思想是为了让“导出数据库”作为一个服务对外开放~
通常来说,如果一台机器上有很多的Instance,可以用一个脚本列出所有要导出的数据库,然后使用crontab定时执行
同时也可以通过Oracle的Program+Scheduler或者OEM来定时执行