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

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


💖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/sh source /home/oracle/.bash_profile export 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_profile current_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/sh source /home/oracle/.bash_profile export 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_profile current_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#" # 执行备份的用户密码 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 oracle unset TNS_ADMIN export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0 export ORACLE_SID=orcl export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib #防止Oracle安装界面乱码,先把语言环境改为英文 export LANG=en_US if [ $USER = "oracle" ];then if [ $SHELL = "/bin/ksh" ];then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi 

在这里插入图片描述

2、使配置文件生效:

source /etc/profile 

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

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

在这里插入图片描述

7、备份文件检查

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

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖
今天的文章 Oracle数据库:使用 bash脚本 + 定时任务 自动备份数据分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-04 17:30
下一篇 2024-12-04 17:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/77769.html