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@:/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="";
#备份服务器⽤户
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=${or
acle_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}. ${db_server}_${date_now}.dmp ${db_server}_${date_now}.log";
cd ${local_backup_dir} && tar -zcf ${db_server}_${date_now}. ${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}. ${backup_user}@${backup_server}:/${remote_backup_dir}";
scp ${local_backup_dir}/${db_server}_${date_now}. ${backup_user}@${backup_server}:/${remote_backup_dir};
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 传输备份⽂件结束 --------------------------------------------------------";oracle数据库自动备份方法
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}."
rm -rf ${local_backup_dir}/${db_server}_${date_now}.;
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数据备份编写到此结束
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论