前言
日常运维工作中有很多要做数据库备份的工作,除rman备份外最常用的就数数据泵的导出了,下面就把我自己脚本做一个分析
提示:以下是本篇文章正文内容,下面案例可供参考
一、expdp备份脚本详解
vi /home/oracle/dmp_bak.sh
#!/bin/sh
# Oracle 设置环境变量
ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.1.0/db_1; export ORACLE_HOME
ORACLE_SID=cxldb1; export ORACLE_SID
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$ORACLE_BASE/scripts:$PATH
#在库中创建逻辑目录
#SQL>CREATE DIRECTORY dump_backup_dir as '/data2/oracle/backup';
#SQL>grant read,write on directory dump_backup_dir to public;
#设置相应文件位置变量与名称
##dmp文件的导出目录
DATA_DIR=/data2/oracle/backup
##dmp文件的导出名称
DMP_FILE=bak_expdp_$(date +%Y%m%d).dmp
##log文件的导出名称
LOG_FILE=bak_expdp_$(date +%Y%m%d).log
##压缩文件名称(如数据库已有compression参数可不进行压缩,据实际情况)
FILE_NAME=bak_expdp_$(date +%Y%m%d)
#expdp导出数据库dmp文件(以下参数供参考)
expdp system/*****@192.168.10.111:1521/orcl schemas=username directory=dump_backup_dir DUMPFILE=$DMP_FILE logfile=$LOG_FILE compression=all parallel=3;
#切到dmp备份文件目录,将dmp与log文件进行打包,并生成$FILE_NAME.tar.gz文件
cd $DATA_DIR
tar czvf $FILE_NAME.tar.gz $DMP_FILE $LOG_FILE
#备份文件实现异地传输:注意修改密码,本测试机密码为p@ssw0rd
expect -c "
spawn scp /data2/oracle/backup/$FILE_NAME.tar.gz root@192.168.10.222:/data2/oracle/backup
expect {
\"*assword\" {set timeout 300; send \"p@ssw0rd\r\";}
\"yes/no\" {send \"yes\r\"; exp_continue;}
}
expect eof"
#删除超过7天的备份文件
find $DATA_DIR -mtime +7 -name "bak_expdp_*" -exec rm -f {} \;
# That's all
二、设置计划任务
[oracle@tdcxl ~]# chmod u+x dmp_bak.sh
[oracle@tdcxl ~]# crontab -l
00 12 * * * /home/oracle/dmp_bak.sh > /home/oracle/dmp_bak.log 2>&1