linux下expdp定时备份_Linux下Oracle定时自动备份方案

公司业务系统数据库是Oracle 11g,以前用的备份方案是用imp,但是这个方案的速度相对比较慢,最近经过研究,打算将备份方案改写为expdp形式,记录一下操作过程

服务器关系

两台服务器用作备份,包含正式环境服务器跟备份服务器,正式环境每天凌晨3点定时通过expdp导出全库,再用scp传输至备份服务器存档

实现scp免密码传输

直接运行scp传输命令,会提示输入密码,要实现无人值守定时运行,就需要让两台服务器的交互能够自动免密,在此通过建立ssh信任关系的方法来实现

在正式服务器上执行ssh证书生成命令

ssh-keygen -t rsa

遇到提示一路回车

运行完毕后,在/root/.ssh目录下会生成id_rsa,id_rsa.pub两个文件

登录备份服务器,在用户对应.ssh目录(如/root/.ssh)下新建authorized_keys文件,将正式服务器id_rsa.pub文件的内容追加进去

在正式服务器上随意新建一个文件,测试scp传输

scp ./aaa root@192.168.x.x:/root/

现在已经不需要输入密码了,scp免密码传输已经成功

Oracle数据库新建虚拟目录

新建临时备份文件存储目录

mkdir /home/oradp

修改临时备份文件目录权限,让oracle具有写入权限

chown oracle:oinstall /home/oradp

登录sqlplus

su - oracle

sqlplus /nolog

新建虚拟目录供expdp使用

conn / as sysdba

create directory dpdata as '/shell';

查看目录是否创建成功

select * from dba_directories;

用sys管理员给指定用户赋予在该目录的操作权限

grant read,write on directory dpdata to cmsxx;

Oracle数据库虚拟目录创建成功

编写自动备份脚本

编写自动备份的shell脚本供定时任务使用,在正式服务器下新建脚本存储目录

mkdir /shell

在shell目录下新建backup_oracle.sh自动备份脚本,内容如下

#!/bin/sh

#自动备份oracle数据库并压缩

#定时任务示例

#凌晨1点备份

#0 1 * * * nohup /bin/sh /shell/backup_oracle.sh >> /shell/backup_oracle.log &

#数据库用户

db_user="cmsxx";

#数据库密码

db_password="*";

#数据库服务器,需要在本地客户端tnsnames中定义好

db_server="cmsxx";

#本地客户端执行程序目录

oracle_bin_dir="/home/oracle/xx/bin";

#oracle虚拟目录名

oracle_directory="dpdata";

#备份服务器地址

backup_server="192.168.x.x";

#备份服务器用户

backup_user="root";

#本地备份目录,存放dump文件与临时压缩文件

local_backup_dir="/home/oradp";

#远程备份目录,对应备份服务器存放位置,需要提前挂载

remote_backup_dir="/xx/xx/oracle_backup";

#获取当前日期

date_now=$(date +%Y%m%d);

#备份当天的数据库

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 自动备份数据库并压缩开始 ----------------------------------------------";

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 数据库备份开始 --------------------------------------------------------";

echo "su oracle -lc \"${oracle_bin_dir}/expdp ${db_user}/${db_password}@${db_server} directory=${oracle_directory} full=y dumpfile=${db_server}_${date_now}.dmp logfile=${db_server}_${date_now}.log\"";

su oracle -lc "${oracle_bin_dir}/expdp ${db_user}/${db_password}@${db_server} directory=${oracle_directory} full=y dumpfile=${db_server}_${date_now}.dmp logfile=${db_server}_${date_now}.log";

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 数据库备份结束 --------------------------------------------------------";

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 数据库压缩开始 --------------------------------------------------------";

echo "cd ${local_backup_dir} && tar -zcf ${db_server}_${date_now}.tar.gz ${db_server}_${date_now}.dmp ${db_server}_${date_now}.log";

cd ${local_backup_dir} && tar -zcf ${db_server}_${date_now}.tar.gz ${db_server}_${date_now}.dmp ${db_server}_${date_now}.log;

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 数据库压缩结束 --------------------------------------------------------";

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 传输备份文件开始 --------------------------------------------------------";

echo "scp ${local_backup_dir}/${db_server}_${date_now}.tar.gz ${backup_user}@${backup_server}:/${remote_backup_dir}";

scp ${local_backup_dir}/${db_server}_${date_now}.tar.gz ${backup_user}@${backup_server}:/${remote_backup_dir};

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 传输备份文件结束 --------------------------------------------------------";

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 删除当前备份原始文件开始 ----------------------------------------------";

echo "rm -rf ${local_backup_dir}/${db_server}_${date_now}.dmp ${local_backup_dir}/${db_server}_${date_now}.log"

rm -rf ${local_backup_dir}/${db_server}_${date_now}.dmp ${local_backup_dir}/${db_server}_${date_now}.log;

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 删除当前备份原始文件结束 ----------------------------------------------";

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 删除当前备份压缩文件开始 ----------------------------------------------";

echo "rm -rf ${local_backup_dir}/${db_server}_${date_now}.tar.gz"

rm -rf ${local_backup_dir}/${db_server}_${date_now}.tar.gz;

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 删除当前备份压缩文件结束 ----------------------------------------------";

echo "-- $(date +'%Y-%m-%d %H:%M:%S') 自动备份数据库并压缩结束 ----------------------------------------------";

给自动备份脚本增加执行权限

chmod +x /shell/backup_oracle.sh

将自动备份脚本加入定时任务

crontab -e

#凌晨1点备份

0 1 * * * nohup /usr/bin/sh /shell/backup_oracle.sh >> /shell/backup_oracle.log &

整个Oracle数据备份编写到此结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值