Oracle数据库定时备份到远程服务器

一、需求

定时将服务器A的oracle数据库中某个database定时生成dmp,备份到服务器B中(保存10天)

Alt

二、配置数据库定时备份

  1. 在服务器A上创建备份目录,并赋予权限
[root@localhost /]# mkdir -p /home/oraclebak  
#新建oracle备份目录
[root@localhost /]# chown -R oracle:oinstall /home/oraclebak -R   
#设置目录权限为oinstall用户组的oracle用户
  1. 在服务器B上创建备份目录,并赋予权限
[root@localhost /]# mkdir -p /home/oraclebak  
#新建oracle备份目录
[root@localhost /]# chmod 777 /home/oraclebak
  1. 检查psopuser_bak.sh(见文末)中数据库服务器IP、端口、SID等是否正确,将psopuser_bak.sh文件放到服务器A中 /home/oraclebak 目录下
  2. psopuser_bak.sh赋权限
[root@localhost /]# chmod 777 /home/oraclebak/psopuser_bak.sh
  1. 更改psopuser_bak.sh编码
[root@localhost /]# vi /home/oraclebak/psopuser_bak.sh
:set ff=unix #设置编码
:wq #保存退出
  1. 服务器A添加定时任务
[root@localhost /]# crontab -e
#插入下面语句(每天凌晨一点备份一次)
00 1 * * * /home/oraclebak/psopuser_bak.sh
  1. 查看任务
[root@localhost ~]# crontab -l

三、配置无密传输

  1. 使用xSell或shh连接工具连接数据库服务器(服务器A),运行 ssh-keygen -t rsa ,一路回车,进入 /root/.ssh ,可以看到 id_rsaid_rsa_pub 两个文件
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #这里一直回车
[root@localhost .ssh]# cd /root/.ssh
[root@localhost .ssh]# ll
total 8
-rw------- 1 root root 1675 Mar 29 16:31 id_rsa
-rw-r--r-- 1 root root  408 Mar 29 16:31 id_rsa.pub
[root@localhost .ssh]# cp id_rsa.pub id_rsa.pub.dbbak
  1. 在远程服务器(服务器B)上运行命令
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #这里一直回车
  1. 在服务器A上运行命令
[root@localhost .ssh]# scp ./id_rsa.pub.dbbak 服务器B_IP:/root/.ssh
The authenticity of host '10.3.100.16 (10.3.100.16)' can't be established.
RSA key fingerprint is 17:a3:ae:64:08:b0:42:fd:35:2d:e0:99:a5:8a:59:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.3.100.16' (RSA) to the list of known hosts.
root@10.3.100.16's password: 
id_rsa.pub.dbbak                              100%  408     0.4KB/s   00:00 
  1. 在远程服务器(服务器B)上运行命令
[root@localhost ~]# cd /root/.ssh/
[root@localhost .ssh]# cat id_rsa.pub.dbbak    >>  authorized_keys
  1. 在服务器A上运行脚本,测试是否无需输入密码执行成功
[root@localhost .ssh]# scp ./id_rsa.pub.dbbak 服务器B_IP:/root/.ssh
id_rsa.pub.dbbak                              100%  408     0.4KB/s   00:00 

四、配置远程服务器(服务器B)定时删除N天前dmp

  1. 连接服务器B,将psopuser_remote_bak.sh(见文末)脚本放到 /home/oraclebak目录下,并赋权限
[root@localhost ~]# chmod 777 /home/oraclebak/psopuser_remote_bak.sh
  1. 更改psopuser_remote_bak.sh编码
[root@localhost /]# vi /home/oraclebak/psopuser_remote_bak.sh
:set ff=unix #设置编码
:wq  #保存退出
  1. 添加定时任务
[root@localhost /]# crontab -e
#插入下面语句(每天凌晨一点删除一次)
00 1 * * * /home/oraclebak/psopuser_remote_bak.sh
  1. 查看任务
[root@localhost ~]# crontab -l

附脚本文件:

psopuser_bak.sh

#这里采用 数据库名称_bak.sh 来命名,为了区分备份的具体数据库
if [ -f ~/.bash_profile ];
then
  . ~/.bash_profile
fi
echo "begin export psopuser dmp file..."
#设置环境变量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
export ORACLE_SID=MEDB #SID
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LANG=en_US.UTF-8
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
date=$(date +%Y%m%d)  #当前时间
days=10  #设置删除10天前的数据
orsid='10.3.100.15:1521/MEDB' #要备份的Oracle数据库IP、端口、SID
orowner=PSOPUSER  #要备份的数据库的用户名
bakuser=PSOPUSER  #使用此用户来导出dmp
bakpass=123456789    #用户密码
bakdir=/home/oraclebak #备份文件路径
bakdata=$orowner"_"$date.dmp  #备份的dmp名称
baklog=$orowner"_"$date.log   #备份时产生的log名称
ordatabak=$orowner"_"$date.tar.gz #将备份的dmp和log压缩后的文件名称
cd $bakdir
mkdir -p $orowner
cd $orowner
#导出dmp和log文件
exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog 
tar -zcvf $ordatabak $bakdata $baklog  #压缩dmp和log文件
find $bakdir/$orowner -type f -name "*.log" -exec rm {} \;  #删除log文件
find $bakdir/$orowner -type f -name "*.dmp" -exec rm {} \;  #删除dmp文件
find $bakdir/$orowner -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #删除10天前备份文件

psopuser_remote_bak.sh

bakdir=/home/oraclebak #备份文件路径
days=10  #设置删除10天前的数据
cd $bakdir
find $bakdir -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #删除10天前备份文件
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值