流程:
1.root用户登录linux服务器
2.mkdir -p /backup/oracledata #新建Oracle数据库备份目录
3.chown -R oracle:oinstall /backup/oracledata -R #设置目录权限为oinstall用户组的oracle用户(用户oracle与用户组oinstall是在安装Oracle数据库时设置的)
4.新建Oracle数据库备份脚本 ,以下部分copy出来放到一个文件中,这里命名为ordatabak.sh(或者用命令vi /backup/oracledata/ordatabak.sh),我用的FinalShell,直接建好文件拖进去
----------------------------------------------
#!/bin/sh
export ORACLE_BASH=/data/oracle
export ORACLE_HOME=/data/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=en_US.UTF-8
export NLS_LANG="AMERICAN_AMERICA".AL32UTF8
date=`date +%Y_%m_%d`
#保留最近三天的备份记录
days=3
#连接oracle的地址
orsid=`xx.xx.xx.xxx:1521/orcl`
#以下修改为自己数据库的配置
orowner=xxxx
bakuser=xxxx
bakpass=xxxx
#备份到此文件夹,需要先建好
bakdir=/backup/oracledata
bakdata=$orowner"_"$date.dmp
baklog=$orowner"_"$date.log
ordatabak=$orowner"_"$date.tar.gz
cd $bakdir
mkdir -p $orowner
cd $orowner
echo "现在开始进行数据备份..."
exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog
echo "数据备份结束..."
echo "现在开始进行压缩备份数据..."
tar -zcvf $ordatabak $bakdata $baklog
echo "压缩备份数据结束..."
echo "删除备份数据开始..."
find $bakdir/$orowner -type f -name "*.log" -exec rm {} \;
find $bakdir/$orowner -type f -name "*.dmp" -exec rm {} \;
find $bakdir/$orowner -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;
echo "删除备份数据结束..."
echo "备份执行完毕..."
----------------------------------------------
5.sudo chmod 777 /backup/oracledata/ordatabak.sh,文件权限,这里我给了所有权限,可以按需给
chmod +x /backup/oracledata/ordatabak.sh #给这个脚本赋予执行的权限,定时任务后面才可执行
6.vi /etc/crontab #编辑linux系统定时任务计划,添加以下代码到最后一行
30 3 * * * oracle /backup/oracledata/ordatabak.sh #也就是每天凌晨3点30分,以oracle用户执行ordatabak.sh备份文件
7.:wq! #保存退出
8.crontab /etc/crontab #加载任务,使之生效 。每天凌晨3:30会定时执行脚本备份数据,主要是考虑系统有很多定时任务在0点执行,待任务执行完再备份
9.执行systemctl status crond,查看任务的状态,Active: active(running),则系统任务状态正常,查看任务:crontab -l,是否有设置的任务
PS:几个相关命令
systemctl enable crond (设为开机启动)
systemctl start crond(启动crond服务)
systemctl status crond (查看状态)
$ crontab -u 用户名 -l (列出用户的定时任务列表)