linux 定时自动备份oracle数据库
0,目前闲下来了,搞个数据库备份吧,开始...
1,写一份脚本执行导出数据库
#!/bin/sh
echo bakup start......................
export PATH
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin
export ORACLE_SID=myorcl
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
date=`date +%Y_%m_%d`
days=7
orsid=127.0.0.1:1521/myorcl #Oracle数据库服务器IP、端口、SID
bakuser=user #用户名称
bakpass=pass #用户密码
bakdir=/data/db_backup #备份文件路径,需要提前创建好
dmpdirectory=db_backup
dmpversion=19.3.0.0.0 #导出数据的oracle版本
for orowner in user1 user2
do
bakdata=$orowner"_"$date.dmp #备份数据库名称
cd $bakdir #进入备份目录
echo start exp $bakdata .............Time: $date........Orowner:$orowner.................
expdp userid=$bakuser/$bakpass@$orsid schemas=$orowner directory=$dmpdirectory dumpfile=$bakdata version=$dmpversion
find $bakdir -type f -name "*.log" -mtime +$days -exec rm {} \; #删除备份文件
find $bakdir -type f -name "*.dmp" -mtime +$days -exec rm {} \; #删除日志文件
echo "....................$orowner backup end............................"
done
exit
1.1其中的问题
首先脚本需要各种环境变量的获取
登录到oracle用户执行以下命令:
cat ~/.bash_profile 将用到的直接复制进去就好了
1.2创建导出的.dmp文件目录并授权
创建备份目录用于存放数据泵文件,方便自己使用
mkdir db_backup
chmod 777 db_backup
登录到数据库sysdba用户,将数据泵文件目录关联上
su - oracle
sqlplus /nolog
conn / as sysdba
create or replace directory db_backup as '/data/db_backup';
grant read,write on directory db_backup to userdba;
1.3将脚本放入/etc/cron.d 并赋予脚本可执行权限
输入 crontab -e 进入cron表达式执行脚本代码编辑界面
三个分别为每分钟执行,每分钟执行,每日凌晨1点执行
linux的cron表达式须要以下的规则:
当你编写完毕出现上图所示提示信息说明你编写的表达式有误,输入y重新编写
修改成功后会提示如下信息
此时可以执行 service crond restart 重启crond服务检验自己的脚本
我的日志目录是在 cd /var/log/cron 这个下面
直接执行 tail -f cron 查看日志
1.4 日志报错
1.4.1日志中可能会报错
图摘自互联网,我确实也遇见了~,不是运维只能边走边百度,摸着黑一步一步淌,成功了记录下来
错误原因:这个文件在Windows 下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有 多出来的\r。
解决方案:使用指令sed -i 's/\r$//' xxxxxxx.sh,上面的指令会把 xxxxxxx.sh 中的\r 替换成空白!
1.4.2日志中可能会报错
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
错误原因:1、对存放dmp文件或log文件的路径不存在,或者没有权限, 2、对dmp文件没有权限
解决方案:未解决,我直接删除了expdp 命令时需要日志的参数,不要日志导出,绕开了该问题
1.5成功!
有问题可以评论留言!
心之何如,有似万丈迷津,遥亘千里,其中并无舟子可以渡人,除了自渡,他人爱莫能助。