美文网首页shell
【Shell】20天学会shell脚本命令(4)用shell脚本

【Shell】20天学会shell脚本命令(4)用shell脚本

作者: ahtzc2017 | 来源:发表于2019-12-25 00:52 被阅读0次

    一、问题

    1.1、环境
    电脑环境:Windows 10;
    数据库环境:Oracle 11g;
    JDK环境: Jdk1.8;
    Docker版本:Server Version: 19.03.3
    1.2、问题
    如何利用shell脚本编写Oracle数据库备份脚本呢?
    本文原文地址:51CTO博客

    二、解答

    2.1、第1版;
    初始版本的shell

    #!/bin/bash
    #auto backup oracle
    #define PATH 定义路径变量
    echo "----------数据库备份开始----------"
    echo "----------开始准备环境变量----------"
    export ORACLE_BASE=C:/softWareInstalled/oracle
    export ORACLE_HOME=$ORACLE_BASE/oracleInstalled/product/11.2.0TZC/dbhome_1
    export PATH=$PATH:$ORACLE_HOME/bin:.
    export ORACLE_SID=PETS
    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    CURDATE=$(date '+%Y%m%d%H%M%S')
    echo "----------当前系统系统日期为=[$CURDATE]----------"
    backup_directory=/opt/backup/
    echo "----------备份目录为=[$backup_directory]----------"
    data_file_prefix=pets
    BACKUP_FILE=$backup_directory/pets$CURDATE.dmp
    
    delete_prev_month_data_file(){
        echo "----------开始删除5天前的数据----------"
        premonth=$(date -d"5 days ago"  '+%Y%m%d')
        rm -rf $backup_directory/$data_file_prefix$premonth* || true
        echo "----------删除5天前的记录完毕----------"
    }
    
    echo "----------开始备份当日=[$CURDATE]数据----------"
    exp pets/pets@PETS FILE=$BACKUP_FILE owner='pets'
    echo "----------备份完毕!----------"
    delte_prev_month_data_file
    echo ‘"----------删除5天前的历史数据完毕----------"
    exit 0
    
    #Use oracle dump backup 使用备份数据库
    /usr/bin/my
    
    

    运行后的结果截图:

    在这里插入图片描述
    在搜索了【Message 206 not found;】报错之后,【仅次于狼的博客】表示:这是由于系统没有找到ORACLE_HOME导致;但是看上面的代码,我们命名已经设置了ORACLE_HOME啊,后来想明白了,我用的是Docker,Docker的C盘不是这么写的,于是在命令行输入:
    pwd
    

    查看当前路径为:
    /c/softWareInstalled/Docker Toolbox/test/shell ;所以,我们要把【C:/】改成【/c/】;运行截图如下:


    在这里插入图片描述

    还是老问题,还是没有找到ORACLE_HOME;接下来,我做两个方面的操作:
    1、将关键的路径都打印出来;
    2、查找oracle目录下的路径,发现:


    在这里插入图片描述
    我自己目录下的BIN是大写的。。。。。。
    修改完执行:
    在这里插入图片描述

    然后再命令行跳到日志中打印的ORACLE_HOME目录:

    cd /c/softWareInstalled/oracle/oracleInstalled/product/11.2.0TZC/dbhome_1 
    
    在这里插入图片描述
    原来问题出在这里;再对比了一下,果然是路径写错了;修改后运行:
    在这里插入图片描述
    这里说,无法打开C盘下的Program.DMP来写入:可能是写入权限不够;因为我电脑只有C盘,好多目录不然写;正当我准备修改文件时,发现上图中大于号后面是让我输入东西的,后来输入了一个y,可以导出了:
    在这里插入图片描述
    结果,在我当前目录下就出现了一个这个文件:
    在这里插入图片描述
    很明显,这就是我要备份的数据库DMP文件;所以接下来如果要完善它,就需要让他备份到可以写入的目录,而不是每次都要我手动授权才备份;于是,我修改了备份的路径;再次执行,bingo,成功!!!
    在这里插入图片描述
    桌面上就出现了我需要备份的目录:
    在这里插入图片描述
    2.2、定时任务
    crontab -e
    0 5 * * * /opt/app/oracle/bin/backup.sh
    0 1 * * * /opt/backup/bin/backup_rfile.sh
    

    这里的cron表达式只支持,分时日月周;跟完整的表达式相比,缺少了秒和年;

    第一个*表示分钟 每小时的第几分钟执行 0-59
    
    第二个*表示小时 每天的第几个小时执行 0-23
    
    第三个*表示日期 每月的第几天执行 1-31
    
    第四个*表示月历 每年的第几个月执行 1-12
    
    第五个*表示星期 每周的第几天执行 0-6
    

    本篇说明内容完毕;
    附录:最终版本的shell脚本:

    #!/bin/bash
    #auto backup oracle
    #define PATH 定义路径变量
    echo "----------数据库备份开始----------"
    echo "----------开始准备环境变量----------"
    export ORACLE_BASE=/c/softWareInstalled/oracle/oracle
    export ORACLE_HOME=$ORACLE_BASE/oracleInstalled/product/11.2.0TZC/dbhome_1
    echo "----------ORACLE_HOME=[$ORACLE_HOME]----------"
    
    export PATH=$PATH:$ORACLE_HOME/BIN:.
    #echo "----------PATH=[$PATH]----------"
    
    export ORACLE_SID=PETS
    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    CURDATE=$(date '+%Y%m%d%H%M%S')
    echo "----------当前系统系统日期为=[$CURDATE]----------"
    backup_directory=/c/Users/Auther/Desktop/bak
    echo "----------备份目录为=[$backup_directory]----------"
    data_file_prefix=pets
    BACKUP_FILE=$backup_directory/pets$CURDATE.dmp
    
    delete_prev_month_data_file(){
        echo "----------开始删除5天前的数据----------"
        premonth=$(date -d"5 days ago"  '+%Y%m%d')
        rm -rf $backup_directory/$data_file_prefix$premonth* || true
        echo "----------删除5天前的记录完毕----------"
    }
    
    echo "----------开始备份当日=[$CURDATE]数据----------"
    exp pets/pets@ORCL FILE=$BACKUP_FILE owner='pets'
    echo "----------备份完毕!----------"
    delte_prev_month_data_file
    echo ‘"----------删除5天前的历史数据完毕----------"
    exit 0
    
    #Use oracle dump backup 使用备份数据库
    /usr/bin/my
    
    

    三、总结

    欢迎关注我的
    CSDN博客https://blog.csdn.net/River_Continent
    微信公众号:幕桥社区

    在这里插入图片描述
    知乎:张牧野, https://www.zhihu.com/people/zhang-mu-ye-37-76/activities
    简书https://www.jianshu.com/u/02c0096cbfd3

    相关文章

      网友评论

        本文标题:【Shell】20天学会shell脚本命令(4)用shell脚本

        本文链接:https://www.haomeiwen.com/subject/byyqoctx.html