美文网首页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

相关文章

  • Linux Shell 脚本编写学习

    shell脚本 Shell Script,Shell脚本与Windows/Dos下的批处理]相似,也就是用各类命令...

  • 嵌入式day12

    shell脚本的本质 shell脚本语言是解释型语言 shell脚本的本质:shell命令的有序集合 shell编...

  • shell脚本

    什么是Shell脚本 Shell脚本(英语:Shell script),又称Shell命令稿、程序化脚本,是一种电...

  • shell基础

    shell脚本 1.shell脚本执行方式 1.1 添加执行权 1.2 指定shell命令 2.shell变量 2...

  • Shell 概述

    学习 Shell 主要包括的内容: Shell 脚本入门 Shell 变量 Shell 内置命令 Shell 运算...

  • Unix/Linux shell入门

    一. 介绍 shell脚本,顾名思义就是跟执行shell命令、shell交互的脚本。由于历史原因,shell语法比...

  • shell脚本基础

    shell介绍 shell命令: 在linux终端能被解析的命令,就是shell命令。 shell脚本: 多个sh...

  • 005.shell基础

    shell脚本基础 shell脚本可以输入多个命令并处理每个命令的结果。 创建shell脚本时,需要在文件的第一行...

  • [Linux]Shell

    shell:命令解释器,驱动linux内核;应用程序调用shell命令 1.Shell脚本的执行方式 脚本格式要求...

  • Shell脚本语言学习二

    Shell脚本语言学习一Shell脚本语言学习三 Shell脚本语言 echo命令? 显示普通字符串脚本代码: ...

网友评论

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

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