zoukankan      html  css  js  c++  java
  • Linux定时自动备份oracle数据库

    1.在服务器创建备份目录,并赋予权限
    mkdir -p /backup/P_DATA 
    #新建shell脚本存放路径
    mkdir -p /backup/P_DB_BACK  #新建Oracle数据库备份目录
    chown -R oracle:oinstall /backup/P_DATA    #设置目录权限为oinstall用户组的oracle用户(用户oracle与用户组oinstall是在安装Oracle数据库时设置的)
    chown -R oracle:oinstall /backup/P_DB_BACK

    2.备份脚本
    vi /backup/P_DATA/P_DB_BAK.sh #新建文件

    #!/bin/sh ORACLE信息可以通过 .bash_profile 查看

    echo "备份脚本开始启动..."  #打印备份进度
    export ORACLE_SID=orcl
    export ORACLE_BASE=/home/oracle/app/oracle

    export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

    export PATH=$ORACLE_HOME/bin:$HOME/bin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

    export LANG=en_US.UTF-8
    export NLS_LANG=AMERICAN_AMERICA.UTF8


    #以上代码为Oracle数据库运行账号oracle的系统环境变量设置,请根据自己安装时的环境路径修改,必须添加,否则crontab任务计划不能执行。

    #oracle info

    dateTime=`date +%Y_%m_%d`  #当前系统时间
    days=5    #删除5天前的备份数据
    orsid='127.0.0.1:1521/orcl'
    #oralce连接信息
    orowner=dbUser
    # 备份此用户下面的数据
    bakuser=dbUser
    #用此用户来执行备份,必须要有备份操作的权限
    bakpass=dbPwd  #执行备注的用户密码
    bakdir=/backup/P_DB_BACK
    #备份文件路径,已创建完毕
    bakdata=$orowner"_"$dateTime.dmp
    #备份数据库名称
    baklog=$orowner"_"$dateTime.log
    #备份执行时候生成的日志文件名称
    ordatabak=$orowner"_"$dateTime.tar.gz
    #最后保存的Oracle数据库备份文件
    cd $bakdir

    echo "现在开始进行数据备份..."

    exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$bakdata log=$bakdir/$baklog #执行备份

    echo "数据备份结束..."

    echo "现在开始进行压缩备份数据..."

    tar -zcvf $ordatabak $bakdata $baklog
    #压缩备份文件和日志文件

    echo "压缩备份数据结束..."

    echo "删除备份数据开始..."

    find $bakdir/ -type f -name "*.log" -exec rm {} ;  #删除备份文件
    find $bakdir/ -type f -name "*.dmp" -exec rm {} ;
    #删除日志文件
    find $bakdir/ -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} ; #删除5天前的备份(注意:{} 中间有空格)

    echo "删除备份数据结束..."

    echo "备份执行完毕..."

    #将备份文件上传到远程服务器 如果不输人密码上传请参考  http://www.linuxidc.com/Linux/2017-11/148506.htm

    :wq! 保存 退出

    3.添加脚本执行权限

    chmod +x /backup/P_DATA/P_DB_BAK.sh #添加脚本执行权限

    4.编辑系统任务执行计划

    crontab -e
    输入一下信息:
    00 03 * * * /backup/P_DATA/P_DB_BAK.sh #每天凌晨3点,以oracle用户执行P_DB_BAK.sh备份文件
    :wq! #保存退出

    5.重启crontab

    service crond restart
    从此每天的凌晨3点 系统会自动完成数据库的备份,压缩,并上传到远程服务器的指定路径下!

    以下是无注释的脚本文件

    #oracle info

     echo "备份脚本开始启动..."

    export ORACLE_SID=orcl1
     export ORACLE_BASE=/oracle/app
     export ORACLE_HOME=/oracle/app/110204
     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
     export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/oracle/grid/bin

     export LANG=en_US.UTF-8
     export NLS_LANG="AMERICAN_AMERICA".AL32UTF8

     dateTime=`date +%Y_%m_%d`
     days=5
     orsid='ipaddress:port/orcl'
     orowner=dbuser
     bakuser=dbuser
     bakpass=dbpwd
     bakdir=/backup/WMS_DB_BACK
     bakdata=$orowner"_"$dateTime.dmp
     baklog=$orowner"_"$dateTime.log
     ordatabak=$orowner"_"$dateTime.tar.gz
     cd $bakdir

     echo "现在开始进行数据备份..."

    exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$bakdata log=$bakdir/$baklog

     echo "数据备份结束..."

    echo "现在开始进行压缩备份数据..."

    tar -zcvf $ordatabak $bakdata $baklog

    echo "压缩备份数据结束..."

    echo "删除备份数据开始..."

    find $bakdir/ -type f -name "*.log" -exec rm {} ;
     find $bakdir/ -type f -name "*.dmp" -exec rm {} ;
     find $bakdir/ -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} ;

    echo "删除备份数据结束..."

    echo "备份执行完毕..."

    /home/oracle/app/oracle

  • 相关阅读:
    string的erase函数和find、find_first_of函数
    strtok和strtok_r
    Linux添加硬盘 挂载硬盘(附 Linux磁盘挂载和mount共享 带图)
    linux下访问中文目录文件
    用yield写协程实现生产者消费者
    用进程池和线程池实现高并发服务器
    python自带线程池
    python自带进程池
    模拟线程池代码
    面向对象的多次调用线程(含参版)
  • 原文地址:https://www.cnblogs.com/mrcln/p/12023633.html
Copyright © 2011-2022 走看看