说明:脚本共分两部分,一是主机脚本,二是备机脚本。主机上做备份,传到备机上,备份文件做压缩,备机上解压缩备份文件并自动导库。

如果有导库需求,导库时由于原库中前一天导入的数据存在,如果不全量删除就进行全量导入此时会有报错所以建议备机脚本中导库前先全量删除一次(会有不同情况,要参考实际情况来操作)。如果没有导库需求则可以忽略,将脚本中导库部分删除或注释掉都可以。

Oracle数据库导入dmp文件时,要注意先在备库中创建原库相同的用户(权限相同、名字相同)、表空间

Linux下直接执行导库命令即可,Windows下要进入DOS窗口(cmd)中执行命令

主机脚本:

#这里采用 数据库名称_bak.sh 来命名,为了区分备份的具体数据库
if [ -f ~/.bash_profile ];
then. ~/.bash_profile
fi
echo "begin export boss dmp file..."
#设置环境变量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=FSDB #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='7.0.8.148:1521/FSDB' #要备份的Oracle数据库IP、端口、SID
orowner=boss  #要备份的数据库的用户名
bakuser=boss  #使用此用户来导出dmp
bakpass=bs    #用户密码
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文件
scp /home/oraclebak/boss/$orowner"_"$date.tar.gz 7.0.8.149:/home/oraclebak #将备份文件传到备份服务器上
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天前备份文件

注意:

#在操作系统中执行 echo $ORACLE_HOME,即可查看ORACLE_HOME路径
#在操作系统中执行 echo $ORACLE_BASE,即可查看ORACLE_BASE路径
#这个目前存在问题,如果如以上删除一天前的备份文件,实际上会保留两天的备份文件,而有时候数据库服务器#空间有限,所以要添加一个定时删除备份文件的脚本,才能做到只保留一个备份文件。

备机上自动导库脚本:

#这里采用 数据库名称_bak.sh 来命名,为了区分备份的具体数据库
if [ -f ~/.bash_profile ];
then. ~/.bash_profile
fi
echo "begin import boss dmp file..."
#设置环境变量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=FSDB #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)  #当前时间
bakdir=/home/oraclebak #备份文件路径
days=10  #设置删除10天前的数据
cd $bakdir
tar -zxvf boss"_"$date.tar.gz
imp boss/bs file=$bakdir/boss_$date.dmp log=$bakdir/bossimp_$date.log grants=no ignore=y full=y
echo "imp success!"
find $bakdir -type f -name "*.log" -mtime +$days -exec rm {} \;  #删除10天前log文件
find $bakdir -type f -name "*.dmp" -mtime +$days -exec rm {} \;  #删除10天前dmp文件
find $bakdir -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #删除10天前备份文件

注:主机和备机最好配置无密传输,脚本写好后加入定时任务。最好验证一下两台机器之间传输是否正常。脚本内容按照实际情况做修改。

整个自动备份oracle数据库的过程(建议全程用root用户):
1、创建一个目录用于存放脚本。
2、给脚本授权,至少要有执行权限。
3、添加定时任务

[root@localhost /]# crontab -e
#插入下面语句(每天凌晨一点备份一次)
00 1 * * * /脚本绝对路径/脚本名称[root@localhost ~]# crontab -l

4、配置主备机之间的无密传输
(1)使用Xsell以root用户连接连接数据库服务器(主机)执行命令: ssh-keygen -t rsa,一路回车,进入 /root/.ssh ,可以看到 id_rsa 和 id_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 May 21 11:31 id_rsa
-rw-r--r-- 1 root root  408 May 21 11:31 id_rsa.pub
[root@localhost .ssh]# cp id_rsa.pub id_rsa.pub.dbbak  #备份出一份来使用

(2)在远程服务器(备机)上执行命令

[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #一直回车

(3)在数据库服务器(主机)上执行命令

[root@localhost .ssh]# scp ./id_rsa.pub.dbbak 服务器B_IP:/root/.ssh
The authenticity of host '16.22.33.158(16.22.33.158)' can't be established.
RSA key fingerprint is 62:a9:ar:77:04:b5:42:qd:13:6d:a8:44:b5:8b:23:5a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '16.22.33.158' (RSA) to the list of known hosts.
root@16.22.33.158's password:
id_rsa.pub.dbbak                              100%  408     0.4KB/s   00:00 

(4)在远程服务器(备机)上执行命令

[root@localhost ~]# cd /root/.ssh/
[root@localhost .ssh]# cat id_rsa.pub.dbbak    >>  authorized_keys

(5)在数据库服务器(主机)上执行id_rsa.pub.dbbak脚本,测试无密传输是否成功

[root@localhost .ssh]# scp ./id_rsa.pub.dbbak 服务器B_IP:/root/.ssh
id_rsa.pub.dbbak                              100%  408     0.4KB/s   00:00 

谨慎起见,最好仔细测试脚本是否每天自动跑并且有效(观察2-3天)。

Oracle数据库定时备份脚本(Linux)相关推荐

  1. Oracle数据库定时备份脚本

    Oracle数据库定时备份脚本 一.编写脚本 vim /home/backup/oraclebk.sh #! /usr/bin #路径名,指定备份的路径 FILEPATH=/home/backup/o ...

  2. oracle备份数据脚本,oracle数据库自动备份脚本

    ::通过exp命令导出远程机器(192.168.2.1)上指定服务(orcl)指定用户(pmis)及密码(pmis)的数据 ::运行该脚本的机器必须安装oracle @echo off @echo [ ...

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

    一.需求 定时将服务器A的oracle数据库中某个database定时生成dmp,备份到服务器B中(保存10天) 二.配置数据库定时备份 在服务器A上创建备份目录,并赋予权限 [root@localh ...

  4. Oracle 备份shell,oracle数据库shell备份脚本

    1.root用户下创建备份路径: mkdir /opt/backup chown oralce:oinstall /opt/backup 2.oracle用户创建备份脚本路径: mkdir /opt/ ...

  5. Oracle数据泵自动删除,Oracle数据库定时备份并删除旧文件

    1.创建一个expdp导出bat批处理任务,自动删除30天之前备份文件: @echo off rem set backupfile=f_database_%date:~0,4%-%date:~5,2% ...

  6. Linux系统下Oracle数据库自动备份脚本经验分享

    1.新建Oracle数据库备份目录 mkdir -p /backup/oracledata   2.新建Oracle数据库备份脚本 vi /backup/oracledata/ordatabak.sh ...

  7. windows下oracle数据库自动备份脚本

    1.根据日期自动生成 Oracle 备份文件 @echo off echo 正在备份Oracle数据库,请稍等...... exp userid='用户名/密码@SID' file=D:\bak\re ...

  8. linux+oracle+自动增量备份脚本,linux自动运行rman增量备份脚本

    一.增量备份脚本 0级备份脚本:红色部分为自定义的备份文件放置的目录 #script.:BackupFull.sh #creater:xyh #date:2014-03-08 #desc:backup ...

  9. 奥塔在线:MySql数据库定时备份脚本

    自动备份指定数据库脚本如下: #!/bin/bash #mysql数据库自动备份至指定存储,并清理三天前数据库备份文件 # 2018/7/17 #定义备份文件名称 filename=usr_backu ...

最新文章

  1. ad域推送软件_Python3.6.4 软件安装教程
  2. Windows XP Embedded 上手指南
  3. abb变频器acs880说明书_常见品牌变频器修改功率方法大全
  4. 「BZOJ2200」[Usaco2011 Jan] 道路和航线 - 最短路+拓扑排序
  5. 一步步编写操作系统 75 从显卡读取光标位置1
  6. 磁盘管理之逻辑卷管理(Logical Volume Manager)
  7. 1,3-丁二烯(BD)行业调研报告 - 市场现状分析与发展前景预测
  8. 注意啦,Struts 2.1.6跟sitemesh-2.4.1不兼容
  9. 台式机装mac系统_苹果电脑装双系统mac+win7图文教程
  10. 一键抓取网页的所有图片
  11. 【Latex学习】在IEEEtran模板中使用algorithm环境
  12. 面向对象的设计原则(SOLID)
  13. 如何将苹果手机中的M4A音乐转换为MP3格式 1
  14. 非严格次小生成树+严格次小生成树
  15. from scipy.misc import imread, imresize, imsave 报错的解决方法
  16. php滑动teb效果,PEB和TEB资料整合
  17. 【仓储管理系统需求分析(四)】
  18. ubuntu apt-get 安装amd显卡驱动
  19. 液体采样泵的吸程与扬程
  20. 我做软件测试的经验教训

热门文章

  1. 计算机毕业设计-springboot小区疫情防控小程序-java社区疫情管理小程序
  2. 【一篇搞懂】Sping 容器启动过程详解
  3. 设计模式的思考(四)
  4. React直聘项目(一):客户端基本配置
  5. JavaScript关于window.open()应用
  6. db、dbm、dbi、dbd定义与区别
  7. 读书札记: [转] 失去目标的时候进来看看!
  8. 怎样将图片转表格?这三个方法教会你
  9. 2019年php工资,总结2019年开发者对PHP发展有哪些看法?
  10. 智能手表全国产化电子元件推荐方案