oracle数据库expdp异机全量备份

2018-10-26  本文已影响0人  晓码君
oracle数据库创建directory: BAKEUP_DATA
SQL> create or replace directory BAKEUP_DATA as '/oracle/';
SQL> grant read,write on directory BAKEUP_DATA to fszhxzc;
配置scp免密传输
# scp -p ./root/ssh/id_rsa.pub root@192.168.2.100:/root/.ssh/authorized_keys
编写备份shell脚本/oracle/backup.sh代码如下
#!/bin/sh

if [ $# -ne 1 ];then
    echo "请传入需要备份的oralce用户,多个使用,分隔!";
    echo "异常终止备份任务!"
    exit 1;
fi
ORACLE_OWNER=$1
echo "开始备份${ORACLE_OWNER}用户的全量数据..."

echo "1.引入oracle运行的系统环境变量"
export ORACLE_BASE="/oracle/product"
export ORACLE_HOME="/oracle/product/oracle/db"

echo "2.引入一般变量"
FILE_NAME="${ORACLE_OWNER//,/_}"
CURRENT_TIME=`date +%Y_%m_%d`
ORACLE_USERNAME="执行备份的oracle用户,需要有相应的权限"
ORACLE_PASSWORD="密码"
ORACLE_SID="SID"
BACK_DIR="/oracle/"
BACK_DATA="${FILE_NAME}_${CURRENT_TIME}.dmp"
BACK_LOG="${FILE_NAME}_${CURRENT_TIME}.log"
EXPRESSED_DATA="${FILE_NAME}_${CURRENT_TIME}.tar.gz"
REMOTE_USERNAME="远程服务器用户"
REMOTE_IP="1远程服务器IP"
REMOTE_PATH="/oracle/"
DAYS="7"

echo "3.进入备份目录: $BACK_DIR"
cd "${BACK_DIR}"
if [ $? -ne 0 ];then
    echo "进入备份目录错误!";
    echo "异常终止备份任务!"
    exit 1;
fi

echo "4.执行备份"
"${ORACLE_HOME}"/bin/expdp "${ORACLE_USERNAME}/${ORACLE_PASSWORD}@${ORACLE_SID}" directory=BAKEUP_DATA dumpfile="${BACK_DATA}" log="${BACK_LOG}" schemas="${ORACLE_OWNER}"
if [ $? -ne 0 ];then
    echo "备份失败!";
    echo "异常终止备份任务!"
    exit 1;
fi

echo "5.压缩备份文件和日志文件"
tar -zcvf "${EXPRESSED_DATA}" "${BACK_DATA}" "${BACK_LOG}"
if [ $? -ne 0 ];then
    echo "压缩备份文件和日志文件失败!";
    echo "异常终止备份任务!"
    exit 1;
fi

echo "6.将备份文件上传到远程服务器: ${REMOTE_IP}:${REMOTE_PATH}"
scp "${EXPRESSED_DATA}" "${REMOTE_USERNAME}@${REMOTE_IP}:${REMOTE_PATH}"
if [ $? -ne 0 ];then
    echo "将备份文件上传到远程服务器失败!";
    echo "异常终止备份任务!"
    exit 1;
fi

echo "7.删除dmp文件和日志文件"
find "${BACK_DIR}" -type f -name "${FILE_NAME}_*.log" -exec rm {} \;
if [ $? -ne 0 ];then
    echo "删除${FILE_NAME}_*.log失败!";
fi
find "${BACK_DIR}" -type f -name "${FILE_NAME}_*.dmp" -exec rm {} \;
if [ $? -ne 0 ];then
    echo "删除${FILE_NAME}_*.dmp失败!";
fi

# echo "8.删除备份压缩包"
# find "${BACK_DIR}" -type f -name "${FILE_NAME}_*.tar.gz" -exec rm {} \;
# if [ $? -ne 0 ];then
#     echo "删除${FILE_NAME}_*.dmp失败!";
# fi

echo "8.删除${DAYS}天前的备份压缩包"
find "${BACK_DIR}" -type f -name "${FILE_NAME}_*.tar.gz" -mtime +"${DAYS}" -exec rm -rf {} \;
if [ $? -ne 0 ];then
    echo "删除${DAYS}天前的备份压缩包失败!";
fi

echo "备份完成!"
上一篇 下一篇

猜你喜欢

热点阅读