#此脚本只备份数据表,而且为了方便恢复数据是做的单表逐个备份
#在写脚本过程中遇到的报错均加入了解决方案的链接(虽然错误代码没有贴出来)
#最终将在脚本所在目录生成年月日-时分的目录,目录下为表名.dmp文件+表名.log文件
#例:/home/oracle/bak为脚本所在目录,将生成20170523-1723目录,下面有 remit_bank_hds.dmp和remit_bank_hds.log文件
#以下为expdp_cms_prod.sh脚本内容
#此脚本需要用oracle用户运行
#--------------------------------------------------------------------------------
#!/bin/bash
#多行注释http://www.jb51.net/article/58236.htm
#后台执行,并重定向日志
#nohup /home/oracle/bak/expdp_cms_prod.sh command > /home/oracle/bak/expdp_cms_prod.out >& &
#加载系统环境变量,避免用crontab定时器执行时失败,如果这样也无效,则需要使用绝对路径
#查看crontab的执行日志:vi /var/log/cron
source /home/oracle/.bash_profile
#给脚本目录授权
chmod /home/oracle/bak
#目录跳转,避免在根目录跑脚本
cd /home/oracle/bak
#获取当前日期做为数据文件备份的目录
rq=`date '+%Y%m%d-%H%M'`
#获取当前所在路径http://www.cnblogs.com/FlyFive/p/3640267.html#commentform
basepath=$(cd `dirname $`; pwd)
#数据库连接变量配置
db_name=cms
db_pass=cms123
db_osid=orcl
#执行sql文件,暂时不用
#@$basepath/create_directory.sql
#在当前目录下创建目录
mkdir $rq
#连接数据库
#EOF含义http://blog.csdn.net/sprita1/article/details/42676307
sqlplus $db_name/$db_pass@localhost:/$db_osid << EOF
#sqlplus /nolog <<EOF
#conn /as sysdba
#执行sql语句
#变量拼接http://blog.itpub.net/9240380/viewspace-764728/
create or replace directory expdir as '${basepath}/${rq}';
#查看directory是否存在,路径是否正确
select * from dba_directories where DIRECTORY_NAME='EXPDIR';
#如果derictory不属于当前oracle用户,则需要授权,不能授权给自己
#grant read,write on directory expdir to cms_prod;
exit;
EOF
#单表导出语句
expdp $db_name/$db_pass@$db_osid tables= REMIT_BANK_HDS dumpfile=REMIT_BANK_HDS directory=expdir logfile=remit_bank_hds.log;
#su - oracle -c "expdp jmt/jmt@ORCL owner=jmt dumpfile=backupdb$rq.dmp DIRECTORY=dpdata1"
#-----------------------------------------------------------------
#配置定时器
crontab -e
#每天凌晨2点执行
00 02 * * * nohup /home/oracle/bak/expdp_cms_prod.sh command > /home/oracle/bak/expdp_cms_prod.out 2>&1 &
crontab -l