环境:rhel6.8+oracle 11g
实时库 数据量10T左右 但是大部分数据都是定期删除的 所以整体的数据量基本维持在这个水平线上,没有做rman备份,所以以防万一,做了个数据库的metadata备份。
每天定期备份 并删除7天前的备份数据
1. sh脚本:
#!/bin/sh
##################################################################
#metadata backup
##################################################################
ORACLE_BASE=/u01/oracle/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=ycfkdb1; export ORACLE_SID
PATH=$ORACLE_HOME/bin:/usr/local/bin:/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
EXP_NAME=`date -d now +%F`; export EXP_NAME
DMP_DIR=/backup/script; export DMP_DIR
DUMPFILE=METADATA_$EXP_NAME.dmp; export DUMPFILE
LOGFILE=METADATA_$EXP_NAME.log; export LOGFILE
rm -f $DMP_DIR/METADATA_$EXP_NAME.dmp;
rm -f $DMP_DIR/METADATA_$EXP_NAME.log;
expdp system/****** directory=DMP_METADATA schemas=scott dumpfile=$DUMPFILE logfile=$LOGFILE content=METADATA_ONLY;
RM_NAME=`date -d "-7 days" +%F`; export RM_NAME
rm -f $DMP_DIR/METADATA_$RM_NAME.dmp;
rm -f $DMP_DIR/METADATA_$RM_NAME.log;
2. crontab脚本:
10 0 * * * /bin/sh /backup/script/metadata_backup.sh
3. 遇到的问题和解决办法:
1. expdp密码中有特殊字符 用\ 转义
2. 想输出sh的log,就把这个metadata_backup.sh嵌套在另一个.sh里面,
并加上:LOG_NAME=`date -d now +%F`; export EXP_NAME
/backup/script/metadata_backup.sh > BACKUP_$LOG_NAME 2>&1(感觉这种方法比较笨,不知道有没有更好的方法)
3. sh里面的日期格式 EXP_NAME=`date -d now +%F`; ` 这个是1左面的按钮 不是单引号。。
4. 2>&1 指将标准信息输出路径指定为错误信息输出路径----------------这个之前没用过。