Oracle数据库:使用 bash脚本 + 定时任务 自动备份数据

Oracle数据库:使用 bash脚本 + 定时任务 自动备份数据

  • 1、前言
  • 2、为什么需要自动化备份?
  • 3、编写备份脚本
  • 4、备份脚本授权
  • 5、添加定时任务
  • 6、重启 crond / 检查 crond 服务状态
  • 7、备份文件检查


💖The Begin💖点点关注,收藏不迷路💖

在这里插入图片描述

1、前言

在日常的系统管理工作中,数据库的备份是至关重要的一环。针对 Oracle 数据库的备份,我们可以编写 Bash 脚本来实现自动化备份操作,从而简化数据库管理的流程,保障数据的安全性和可靠性。

2、为什么需要自动化备份?

数据库作为应用程序的核心数据存储,包含了大量的重要信息,例如用户数据、配置信息等。一旦数据库出现意外故障或数据丢失,可能会给业务带来严重影响甚至损失。因此,定期进行数据库备份并保证备份文件的安全存储是非常重要的。

手动备份存在诸多弊端,例如容易出现疏忽、不及时等问题,因此自动化备份成为了一个更好的选择。通过编写脚本实现自动备份,可以提高效率、减少人为错误,同时也能够更好地保障数据的安全。

3、编写备份脚本

创建备份数据保存目录和bash脚本保存目录。

在 /oracle/backup 目录下创建一个名为 data 的子目录,用于保存备份数据;

在同一目录下创建一个名为 bash 的子目录,用于保存 bash 脚本文件。


mkdir -p /oracle/backup/data mkdir -p /oracle/backup/bash ##先安装 bzip2 压缩工具,后面压缩备份文件用到,或者你使用tar -cvzf 打包为.tar.gz格式也可以
yum install  bzip2

在这里插入图片描述

注意:先对/oracle/backup/data 目录进行授权,要不会报错:

ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name /ORACLE/BACKUP/DATA is invalid

在这里插入图片描述

解决:

###切换oracle用户
su - oracle ###启动客户端进程
sqlplus /nolog ###以管理员登录
conn / as sysdba##在 Oracle 数据库中创建一个名为 dumpdir 的目录,并将其路径设置为 /oracle/backup/data/。这样,你就能够在数据库中通过目录别名 dumpdir 来引用该路径。create directory dumpdir as '/oracle/backup/data/';##针对备份执行备份用户赋予read,write权限,
grant read,write on directory dumpdir to zyl;

在这里插入图片描述

备份脚本模板:

#!/bin/shsource /home/oracle/.bash_profileexport ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0
export ORACLE_SID=orcl
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
#export LANG=C
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8# 以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。# oracle用户的系统环境变量路径:/home/oracle/.bash_profilecurrent_date=`date +%Y_%m_%d` # 获取系统当前日期时间
days_to_keep=90 # 设置删除90天之前的备份文件
db_server="192.168.10.19:1521/ORCL"  # Oracle数据库服务器IP、端口、SID
backup_owner="your_username" # 备份此用户下面的数据
backup_user="your_backup_user" # 用此用户来执行备份,必须要有备份操作的权限
backup_password="your_password" # 执行备份的用户密码
backup_dir=/oracle/backup/data  # 备份文件路径,需要提前创建好
backup_data=$backup_owner"_"$current_date.dpdmp # 备份数据库名称
backup_log=$backup_owner"_"$current_date.dplog # 备份执行时生成的日志文件名称
oracle_data_backup=$backup_owner"_"$current_date.tar.bz2 # 最后保存的Oracle数据库备份文件cd $backup_dir # 进入备份目录
expdp $backup_user/$backup_password DIRECTORY=dumpdir DUMPFILE=$backup_data logfile=$backup_log SCHEMAS=$backup_owner VERSION=11.2.0.1.0   ##注意这里的DIRECTORY值为数据库中创建的 dumpdir 目录
tar -cvjpf $oracle_data_backup $backup_data $backup_log # 压缩备份文件和日志文件
find $backup_dir -type f -name "*.dplog" -exec rm {} \; # 删除备份文件
find $backup_dir -type f -name "*.dpdmp" -exec rm {} \; # 删除日志文件
find $backup_dir -type f -name "*.tar.bz2" -mtime +$days_to_keep -exec rm -rf {} \; # 删除90天前的备份(注意:{} \中间有空格)

cd 到/oracle/backup/bash ,vi 编写备份脚本,如vi backup_oracle.sh

查看oracle有关的环境变量:

## Oracle 数据库软件的基础目录
echo $ORACLE_BASE##Oracle 数据库软件的安装目录
echo $ORACLE_HOME##可执行程序的路径
echo $PATH

在这里插入图片描述

修改模板文件:

#!/bin/shsource /home/oracle/.bash_profileexport ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=orcl
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
#export LANG=C
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8# 以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。# oracle用户的系统环境变量路径:/home/oracle/.bash_profilecurrent_date=`date +%Y_%m_%d` # 获取系统当前日期时间
days_to_keep=90 # 设置删除90天之前的备份文件
db_server="192.168.234.20:1521/ORCL"  # Oracle数据库服务器IP、端口、SID
backup_owner="zyl" # 备份此用户下面的数据(和模式名一样)
backup_user="system" # 用此用户来执行备份,必须要有备份操作的权限
backup_password="Zyl#123456" # 执行备份的用户密码
backup_dir=/oracle/backup/data  # 备份文件路径,需要提前创建好
backup_data=$backup_owner"_"$current_date.dpdmp # 备份数据库名称
backup_log=$backup_owner"_"$current_date.dplog # 备份执行时生成的日志文件名称
oracle_data_backup=$backup_owner"_"$current_date.tar.bz2 # 最后保存的Oracle数据库备份文件,tar.bz2/.gz格式,选一种即可cd $backup_dir # 进入备份目录
expdp $backup_user/$backup_password DIRECTORY=dumpdir DUMPFILE=$backup_data logfile=$backup_log SCHEMAS=$backup_owner VERSION=11.2.0.1.0 
tar -cvjpf $oracle_data_backup $backup_data $backup_log # 压缩备份文件和日志文件,.tar.bz2格式,选一种即可#tar -cvzf $oracle_data_backup $backup_data $backup_log # 压缩备份文件和日志文件,.tar.gz格式find $backup_dir -type f -name "*.dplog" -exec rm {} \; # 删除备份文件
find $backup_dir -type f -name "*.dpdmp" -exec rm {} \; # 删除日志文件
find $backup_dir -type f -name "*.tar.bz2" -mtime +$days_to_keep -exec rm -rf {} \; # 删除90天前的备份(注意:{} \中间有空格)

在这里插入图片描述

4、备份脚本授权

在添加定时任务之前,需要确保脚本已经有可执行权限。可以使用chmod +x 备份脚本 命令赋予脚本可执行权限。

chmod +x /oracle/backup/bash/backup_oracle.sh

在这里插入图片描述

5、添加定时任务

拓展:

当设置定时任务时,可以使用以下格式来详细定义时间:

* * * * *  执行脚本绝对路径
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 7) (星期天可以用0或7表示)
| | | +------- 月份 (1 - 12)
| | +--------- 日期 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)通过这五个字段的组合,可以精确地定义定时任务执行的时间。例如:30 2 * 1-5        表示在周一到周五的凌晨230分执行任务。
0 20 * * 1,3,5    表示在周一、周三、周五的晚上8点执行任务。
0 * * * *         表示每分钟执行一次任务。
0 3 * * *         表示每天凌晨3点执行任务。
0 4 1 * *         表示每月的第一天凌晨4点执行任务。

根据具体的需求,可以灵活地调整定时任务的时间设置。

为脚本添加定时任务可以实现自动备份,以下是添加定时任务的步骤:

打开终端窗口,输入crontab -e命令,编辑当前用户的定时任务配置文件。

crontab -e

在文件中添加如下一行,注意是脚本的绝对路径,表示每天凌晨3点执行备份:

0 3 * * * /oracle/backup/bash/backup_oracle.sh

在这里插入图片描述

如果出现下面报错:

UDE-00013: Message 13 not found; No message file for product=RDBMS, facility=UDE
UDE-00019: You may need to set ORACLE_HOME to your Oracle software directory

在这里插入图片描述

是因为指定的ORACLE_HOME没有生效。

如果是直接用expdp命令执行,执行前先做一次 source /home/oracle/.bash_profile 。

如果是使用shell脚本调度执行,需要在shell脚本中再次声明赋值 ORACLE_HOME、ORACLE_SID 变量,因为shell脚本调度的时候,使用的是 全局环境变量 /etc/profile。

如果频繁使用shell执行Oracle命令,可以把这些配置参数刷新到 /etc/profile 中。如果没有设定ORACLE_HOME、ORACLE_SID,在调度shell命令的时候,会报错 UDE-00013、UDE-00019

解决:

1、su root

vi /etc/profile ,末尾加上如下配置:

####添加内容
# use for oracleunset   TNS_ADMIN
export  ORACLE_BASE=/u01/app/oracle
export  ORACLE_HOME=$ORACLE_BASE/product/11.2.0export  ORACLE_SID=orclexport  PATH=$PATH:$HOME/bin:$ORACLE_HOME/binexport  LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
#防止Oracle安装界面乱码,先把语言环境改为英文
export LANG=en_USif [ $USER = "oracle" ];thenif [ $SHELL = "/bin/ksh" ];thenulimit -p 16384ulimit -n 65536elseulimit -u 16384 -n 65536fifi

在这里插入图片描述

2、使配置文件生效:

source /etc/profile

6、重启 crond / 检查 crond 服务状态

#重启 
systemctl restart crond#服务状态查看
systemctl status crond

在这里插入图片描述

7、备份文件检查

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI赋能写作:AI大模型高效写作一本通

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…

Java学习笔记(15)

JDK7前时间相关类 Date时间类 Simpledateformat Format 格式化 Parse 解析 默认格式 指定格式 EE:表示周几 Parse:把字符串时间转成date对象 注意:创建对象的格式要和字符串的格式一样 Calendar日历类 不能创建对象 Getinstance 获取当…

【C#】【SAP2000】读取SAP2000中所有Frame对象在指定工况的温度荷载值到Grasshopper中

if (build true) {// 连接到正在运行的 SAP2000// 使用 COM 接口获取 SAP2000 的 API 对象cOAPI mySapObject (cOAPI)System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");// 获取 SAP2000 模型对象cSapModel mySapModel mySap…

315曝光黑灰产业链:主板机

关注卢松松,会经常给你分享一些我的经验和观点。 315晚会曝光主板机黑灰产业链,主板机是什么呢?可能很多人还不知道。在这里松松给大家普及一下,也欢迎大家关注卢松松哟! 主板机是什么呢? 通过报废手机的主板,拆出来后组装成主…

专升本 C语言笔记-06 常用的3种输入输出函数

1.scanf() 与 printf() 的使用 scanf() 格式化输入数据 格式:scanf("格式控制字符串",参数地址列表) scanf("%d,%d,%d",&a,&b,&c); printf("a %d\n",a); printf("b %d\n",b); printf("c %d\n",c); 注意 注…

【数据结构】堆

目录 一、树的介绍以及堆 1.树 2.二叉树以及堆 二、堆的实现 1.heap.h 2.heap.c 1)堆的初始化和销毁 2) 堆的插入 3)堆的删除 4)取堆顶数据 5)堆的数据个数 6)堆的判空 3.test.c 一、树的介绍以及堆 …

跨境电商选品实战——Ownips公开数据信息安全采集+Python爬虫轻松搞定Lazada电商选品

文章目录 一、引言二、Lazada电商平台选品实战2.1、分析Lazada电商平台的商品列表接口2.2、定位商品列表计算逻辑2.3、封装高质量住宅IP2.4、运行爬虫 三、数据处理及选品分析四、Ownips——企业级全球静态住宅IP,高效采集公开数据 一、引言 互联网与外贸的结合&am…

Maya自定义工具架

有时候我们需要自己定义工具架上的内容,比如将一个工具放到工具架上,或者删除一个工具 添加一个工具 例如我们想在多边形建模栏位上添加一个分离按钮,默认 1 先切换到想要添加的工具架栏位 2 打开菜单,找到我们想添加的工具 …

70城市房价同比继续下降

据北京商报的最新报道,昨(3月15日)天国家统计局发布《2月70个大中城市商品住宅销售价格》显示,2024年2月,在70个大中城市中,各线城市商品住宅销售价格同比继续下降。 一线城市二手住宅销售价格同比下降6.3…

拿捏指针(二)

个人主页:秋邱博客 所属栏目:C语言 (感谢您的光临,您的光临蓬荜生辉) 目录 前言 数组与指针 数组名的理解 指针数组与数组指针 指针数组 数组指针 数组传参 一维数组传参的本质 二维数组传参的本质 二维数组…

RIPGeo参文31—36(关于对比学习):鼓励对同一数据点进行各种增强(视图),以学习更健壮的表示

RIPGeo中有: —干扰参数。在内部最大化中,我们提出了步骤,以增加损失的方向更新。我们的方法不是用简单的一步方案最大化内部部分,而是在每次迭代结束时将扰动投影到球面空间上(第2-7行),这允许模型产生更微妙但有价值的扰动[31]。 [31] A. Kurakin, I. J. Goodfellow…

【智能硬件、大模型、LLM 智能音箱】MBO:基于树莓派、ChatGPT 的桌面机器人

MAKER:David Packman/译:趣无尽(转载请注明出处) 这是国外 Maker David Packman 制作的基于树莓派机器人 MBO,该机器人的外观设计灵感来自动漫 Adventure Time 中的机器人 MBO。它具有强大的交互功能,可实现脱机唤醒词检测、调用 ChatGPT 3.5 进行聊天、机器视觉对图像进…

京东云主机+京美建站SaaS版

京美建站SaaS版 京美建站搭建企业网站、小程序、3000精美模板 链接:https://daili.jd.com/s?linkNo57UBX34BZMWGNFYTOCPVUE7SN36CCIPKLTFLPCUCPYBKSYYBIPS2BJ57GP7RACLDHU66X526ZOULMIXL2VN7DT7IHU 京东云主机,安全稳定,性能强劲,新客下单…

(网络安全)一款强大的逆向分析工具,开源!

工具介绍 Ghidra 是由美国国家安全局(NSA)研究部门开发的软件逆向工程(SRE)套件,用于支持网络安全任务。包括一套功能齐全的高端软件分析工具,使用户能够在各种平台(Windows、Mac OS和Linux)分析编译后的代…

如何成为一名CCAA审核员?报名复习考试注册实习指南

一、管理体系审核员的注册领域 管理体系审核员包括质量管理体系(QMS)、环境管理体系(EMS)、职业健康安全管理体系(OHSMS)、食品安全管理体系(FSMS)、危害分析与关键控制点&#xff0…

一文带你了解神经网络是如何学习预测的

文章目录 1、GPT与神经网络的关系 2、什么是神经网络 3、神经网络是如何计算的 数据是如何输入到神经网络中的 神经网络是如何进行预测的 神经网络是如何进行学习的 4、小结 1、GPT与神经网络的关系 GPT想必大家已经耳熟能详,当我们与它进行对话时,通常…

桌面待办,电脑桌面怎么设置待办事项

在忙碌的工作生活中,我们经常会有许多事情需要处理,为了提高工作效率和管理时间,很多人都有一套自己的桌面待办事项管理方法。那么,如何利用电脑桌面待办事项来提高工作效率,电脑桌面怎么设置待办事项呢? …

【Unity】persistentDataPath、streamingAssetsPath和dataPath

介绍 我们在用Unity进行开发时,资源路径是我们最常用到的,下面我就来简单介绍一下几种常用的路径。 1.dataPath dataPath是包含游戏数据文件夹的路径,是app程序包安装路径 Windows: xxx /Assets (如下图) Mac: xxx…

C语言初学12:强制类型转换

一、强制数据类型转换举例 1.1 double赋值给int #include<stdio.h> int main() {double sum 18, count 5;int mean;mean sum / count;printf("Value of mean : %d\n", mean);} 执行结果&#xff1a; double赋值给int&#xff0c;小数部分会删除&#xff…

Linux 学习笔记(16)

十六、 计划任务 在很多时候为了自动化管理系统&#xff0c;我们都会用到计划任务&#xff0c;比如关机&#xff0c;管理&#xff0c;备份之类的操作&#xff0c;我 们都可以使用计划任务来完成&#xff0c;这样可以是管理员的工作量大大降低&#xff0c;而且可靠度更好。 l…