新建oracle_databak.sh文件,并赋予可执行权限、oracle用户权限

2.新建user.txt(用于存放oracle数据库用户名密码)文件,并赋予读写权限


3.编写oracle_databak.sh脚本
功能说明:
1.删除bakdir目录中的原文件,
脚本内容如下:
#!/bin/sh
export ORACLE_BASE=/data/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=nccd
export PATH=$ORACLE_HOME/bin:$HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=C
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
wj=/data/backup
bakdir=/data/backup/dmpback
cd $wj
#rm -rf $bakdir/*
#echo "删除原备份文件$bakdir"
#delday,可设定定时删除N天前的备份文件
delday=31
lso=$(cat user.txt | wc -l)
echo $lso
for((line=0;"$lso" > "$line";line++));
do
userdata=$(cat user.txt |head -n $line|tail -n 1|awk -F/ '{print $1}')
passdata=$(cat user.txt |head -n $line|tail -n 1|awk -F/ '{print $2}')
date>>ora_bak_$(date +%Y%m%d).log
echo "这是第"$line"行" >>ora_bak_$(date +%Y%m%d).log
echo $userdata "密码" $passdata >>ora_bak_$(date +%Y%m%d).log
if [ "$userdata" = "" ];then
echo "$userdata为空">>ora_bak_$(date +%Y%m%d).log
else
echo "exp $userdata/$passdata@nccd grants=y file=$bakdir/$userdata"_"$(date +%Y%m%d).dmp log=$bakdir/$userdata"_"$(date +%Y%m%d).log" >>ora_bak_$(date +%Y%m%d).log
#备份数据
exp $userdata/$passdata@nccd grants=y file=$bakdir/$userdata"_"$(date +%Y%m%d).dmp log=$bakdir/$userdata"_"$(date +%Y%m%d).log
#压缩
tar -zcPf $bakdir/$userdata"_"$(date +%Y%m%d).tar.gz $bakdir/$userdata"_"$(date +%Y%m%d).dmp $bakdir/$userdata"_"$(date +%Y%m%d).log
if [ $? -eq 0 ] ; then
echo "$userdata压缩成功">>ora_bak_$(date +%Y%m%d).log
sleep 1
#rm -rf /data/backup/dmpback/*.log
#rm -rf /data/backup/dmpback/*.dmp
#找到指定日期之前的文件,并删除
find /data/backup/dmpback -mtime +$delday -name "*.dmp" -exec rm -rf {} \;
find /data/backup/dmpback -mtime +$delday -name "*.log" -exec rm -rf {} \;
find /data/backup -mtime +$delday -name "*.log" -exec rm -rf {} \;
echo "删除dmp、log文件成功!">>ora_bak_$(date +%Y%m%d).log
#scp将指定目录的文件传送到其他linux服务器
#scp $bakdir/$userdata"_"$(date +%Y%m%d).tar.gz root@192.168.200.37:/data/center/backup
if [ $? -eq 0 ] ; then
#rm -rf $bakdir/$userdata"_"$(date +%Y%m%d).tar.gz
echo "$(date +%Y%m%d).tar.gz传送成功">>ora_bak_$(date +%Y%m%d).log
echo -e "\n">>ora_bak_$(date +%Y%m%d).log
else
echo "传送失败">>ora_bak_$(date +%Y%m%d).log
fi
sleep 1
else
echo "压缩失败">>ora_bak_$(date +%Y%m%d).log
fi
fi
done
echo "结束">>ora_bak_$(date +%Y%m%d).log
echo -e "*********************************************************************************************************\n*********************************************************************************************************">>ora_bak_$(date +%Y%m%d).log
exit
4.scp命令使用前需要进行如下配置
下面是实现scp无密码登录
1)在 A 上运行 ssh-keygen -t rsa 在/root/.ssh 下生成id_rsa 和 id_rsa.pub 两个文件
在/root/.ssh下复制备份一份id_rsa.pub 命名为 id_rsa.pub.A
2)在 B 上也同样运行 ssh-keygen -t rsa
3)在 B 的 /root/.ssh 下创建authorized_keys文件 把A 中 id_rsa.pub.A 文件 传到 B /root/.ssh 下
通过 cat 命令 把id_rsa.pub.A 写到 authorized_keys 文件中
scp ./id_rsa.pub.A B的IP:/root/.ssh
cat id_rsa.pub.A >> authorized_keys
测试:最终从B服务器拷贝文件到A上,就无需输入密码了
在生成密钥的过程中,一直Enter即可,否则还是需要输入设置的密码
5.设置定时执行
1)查看是否安装和运行cron
ps -ef | grep cron
rpm -qa | grep crontab
2)服务命令
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态
3)添加定时任务
crontab -e4)查看已添加的定时任务
crontab -l
5)crontab格式
* * * * * command
minute hour day month week command
分 时 天 月 星期 命令
15 8 * * * /home/backup.sh 每天8点15执行一次脚本
答疑:
1、第一次执行scp的时候会出现warning,这时候要输入“yes”。所以脚本编写完一定要手动执行一遍,防止定时执行失败
2、在win下编写shell时,换行符为:\n\r,而在linux下为:\n ,因此在win下编写的脚本在linux下运行会报错,尽量避免这个问题。
3.https://tool.lu/crontab可计算crontab执行时间




