在Linux系统中使用Shell脚本文件自动备份Oracle数据库
- 创建逻辑目录
create directory data_dir as ‘/home/oracle/’; data_dir 可自定义
select * from dba_directories; 可查询用户创建目录。
- 给用户授予访问逻辑目录的权限
grant read,write on directory data_dir to sa; sa为用户名
- 给用户授予导入和导出的权限
grant exp_full_database,imp_full_database to sa; sa 为用户名
- 退出Oracle
exit
- 进入Oracle用户
su oracle
- 创建shell脚本
在/home/oracle/目录下创建shell脚本
cd /home/oracle/ 进入目录
touch beifen.sh 创建脚本文件,名字为test
vi beifen.sh 开始编辑sh文件
- 编写shell脚本
SH文件类型必须为UNIX
#!/bin/sh
#:本脚本自动每天凌晨3点备份数据库,备份完成后,删除30天以前的数据
#获取环境变量(.bash_profile这个文件在/home/oracle/目录下,是个隐藏文件)
source ~/.bash_profile
#获取当前时间
BACKUPTIME=$(date +%Y%m%d)
#文件类型
dmpwj=.dmp
logwj=.log
#备份的文件名
DMPNAME=bk-$BACKUPTIME$dmpwj
#备份的日志名
LOGNAME=bk-$BACKUPTIME$logwj
echo $BACKUPTIME
echo $DMPNAME
echo $LOGNAME
#导出命令
expdp 用户名/密码@实例名 directory=数据库逻辑目录名称 schemas=用户名 dumpfile=$DMPNAME logfile=$LOGNAME
echo ‘备份完成’
echo ‘移动中’
#移动log 文件
cd /home/oracle/
mv $LOGNAME /home/oracle/rizhi/
#(这里使用sudo提权是因为oracle用户对/mnt/nas/dbbak/目录没有写入权限)
echo “oracle用户密码” | sudo -S mv $DMPNAME /mnt/nas/dbbak/
echo “移动完成”
echo “删除中”
#删除30天以前的数据库文件 (这里使用sudo提权是因为oracle用户对/mnt/nas/dbbak/目录没有写入权限)
echo “oracle用户密码” | sudo -S find /mnt/nas/dbbak/ -mtime +30 -name “*.dmp” -exec rm -rf {} \;
#删除30天以前的日志文件
find /home/oracle/rizhi/ -mtime +30 -name “*.log” -exec rm -rf {} \;
- 给脚本赋权
chmod 777 test.sh
- 给.bash_profile文件赋权
sudo chmod 777 .bash_profile
10.创建定时任务
crontab -e //建立定时任务
0 3 * * * /home/oracle/test.sh //编写任务内容
注意事项:
/var/spool/mail/ 目录下的oracle文件可查看计划执行详情
命令: service crond status 确认定时任务是否开启?
命令: service crond start 开启服务
命令: service crond stop 关闭服务
命令: service crond restart 重启服务
命令: service crond reload 重新载入配置
crontab -e 编辑某个用户的cron服务
crontab -l 列出某个用户cron服务的详细内容
crontab -r 删除某个用户的cron服务(慎用)