oracle自动备份

本文使用exdpd进行自动备份,以德华安顾的测试环境为例。

一、设置备份目录

  1. 创建备份目录 mkdir -p /home/oracle/backup/agtest
  2. 将其设置为Oracle备份目录 create or replace directory DATA_BACKUP as '/home/oracle/backup/agtest'; 可以查询dba_directories查看所有directory. SQL>select * from dba_directories;

二、备份代码详解

#!/bin/bash
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_SID=feikong
export PATH=$ORACLE_HOME:$ORACLE_HOME/bin:$ORACLE_HOME/dbs:$PATH 
export ORACLE_TERM=xterm #终端窗口,不用改
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 #设置字符集 查看server端的字符集:select userenv('language') from dual;
#以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。
# oracle用户的系统环境变量路径:/home/oracle/.bash_profile
#---------------------------------------------------------
date=`date +%Y%m%d"_"%H%M%S`   #获取系统当前日期时间,格式为:20160602_204653(年月日_时分秒)
days=15  #设置删除15天之前的备份文件
orsid='10.1.3.138:1521/feikong'  #Oracle数据库服务器IP、端口、SID
orowner=agtest  #备份此用户下面的数据
bakuser=agtest  #用此用户来执行备份,必须要有备份操作的权限
bakpass=agtest  #执行备份的用户密码
bakdir=/home/oracle/backup  #备份文件路径,需要提前创建好
bakdata=$orowner"_"$date.dmp #备份数据库名称
baklog=$orowner"_"$date.log #备份执行时候生成的日志文件名称
expdp $bakuser/$bakpass@$orsid schemas=$orowner directory=DATA_BACKUP dumpfile=$bakdata logfile=$baklog #expdp 用户/密码@ORACLE_SID schemas=导出用户名 dumpfile=生成的dmp文件名 DIRECTORY=dmp文件的目录位置 logfile=生成的日志文件名 
find $bakdir/$orowner  -type f -name "*.dmp" -mtime +$days -exec rm -rf {} \;  #删除15天前备份的dmp数据库文件(注意:{} \中间有空格)
find $bakdir/$orowner  -type f -name "*.log" -mtime +$days -exec rm -rf {} \;  #删除15天前备份的log日志文件(注意:{} \中间有空格)
#格式:find <指定目录> <指定条件> <指定动作> 
  1. bak.sh放入到/home/oracle/backup/文件夹中
  2. 增加可执行的权限:chmod +x bak.sh
  3. 切换到oracle用户,进入/home/oracle/backup/文件夹,执行sh bak.sh即可进行手动备份。
  4. 备份完成后的文件存储在/home/oracle/backup/agtest

参考文章: * Linux下自动备份Oracle数据库并删除指定天数前的备份

三、自动备份设置

使用crontab来进行定时任务的设置。

切换到oracle用户

[root@feikong ~]# su - oracle

追加定时任务

[oracle@feikong ~]$ crontab -e 
# 分(0-59) 时(0-23) 天(1-31) 月(1-12) 周(0-7) 执行方式 命令
30 12 * * * /bin/sh  /home/oracle/backup/bak.sh
#设置每天12:30进行备份

保存后提示已经装载了新的定时任务

"/tmp/crontab.KeIZna" 3L, 79C written
crontab: installing new crontab

再次查看定时任务列表,可以看到定时任务已经添加

[oracle@feikong ~]$ crontab -l
# 分 时 天 月 周  命令
02 09 * * * /bin/sh  /home/oracle/backup/bak.sh

[oracle@feikong ~]$ 

重启服务即生效

[root@feikong ~]# service crond restart
Stopping crond:                                            [  OK  ]
Starting crond:                                            [  OK  ]

更加详细的crontab使用请看

四、crontab介绍

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

4.1 命令格式

crontab [-u user] [ -e | -l | -r ]

4.2 命令参数

  • -u user:用来设定某个用户的crontab服务;
  • file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
  • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
  • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
  • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
  • -i:在删除用户的crontab文件时给确认提示。

例:

crontab -e #编辑当前用户的定时任务
crontab -l #查看当前用户的定时任务
crontab -e -u oracle #编辑oracle用户的定时任务
crontab -l -u oracle #查看oracle用户的定时任务

4.3 定时任务设置实例

根据分 时 天 月 周,我们可以设置出任何时候的定时任务。

# 分(0-59) 时(0-23) 天(1-31) 月(1-12) 周(0-7) 执行方式 命令
30 12 * * * /bin/sh  /home/oracle/backup/bak.sh #每天12:30备份
0  7  * * 1-5 /bin/sh  /home/oracle/backup/bak.sh #周一到周五每天7:00备份
0-30/5 7 * * * /bin/sh  /home/oracle/backup/bak.sh #每天7点0-30分每五分钟备份一次
30 9 1-10,15 2 * /bin/sh  /home/oracle/backup/bak.sh #2月份1-10日和15日的9:30备份
30 9 1-10,15 2 1,3,5 /bin/sh  /home/oracle/backup/bak.sh #2月份的1-10日和15日的9:30备份 或者 2月份的星期一、星期三、星期五的9:30备份

分时天月是AND的关系,分时月周也是AND的关系,是OR的关系。

4.4 crond 安装与配置服务

crontab编辑完成后,建议重启服务 /sbin/service crond restart 常用的crontab命令:

安装crontab:

yum install crontabs

服务操作说明:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

查看crontab服务状态:

service crond status

手动启动crontab服务:

service crond start

查看crontab服务是否已设置为开机启动,执行命令:

ntsysv

加入开机自动启动:

chkconfig –level 35 crond on

参考文章: * Linux 下执行定时任务 crontab 命令详解 * crontab 定时任务 * 鸟哥linux私房菜<第十六章、例行性工作排程 (crontab)>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木制robot技术杂谈

Hexo搭建个人博客(二)— 搭建Hexo

这篇文章主要介绍如何搭建本地Hexo博客,并将博客部署到github。 ---- 初始化Hexo 在电脑上任意一个你喜欢的地方创建一个文件夹,文件夹的名字命名...

40070
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Pydio托管文件共享服务器

随着云的采用增加,越来越多的数据被远程存储。从音乐到图片再到个人文档,很多人都将文件上传到他们不管理的服务器上。如果您希望将文件保存在您控制的服务器上,则可以使...

41700
来自专栏技术博客

JavaScript判断页面是否已经加载完毕

  在做针对CheckBox框点击事件的时候,发现点击以后有时候会报错,但是是生成的JavaScript的代码的内部错误,无法判断到底是什么地方有问题。就一直在...

10020
来自专栏Linyb极客之路

RESTFUL API 安全设计指南

REST的全称是REpresentational State Transfer,表示表述性无状态传输,无需session,所以每次请求都得带上身份认...

16720
来自专栏PHP在线

MySQL 主从复制的原理和配置

主从复制的原理: 分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下: 1).Slave上面的IO进程连接上Master,并请求从指定...

349120
来自专栏云计算教程系列

如何在Ubuntu 18.04上创建多节点MySQL集群

MySQL Cluster分布式数据库为MySQL数据库管理系统提供高可用性和吞吐量。MySQL Cluster由一个或多个管理节点(ndb_mgmd)组成,这...

25900
来自专栏电光石火

Linux自动每日备份

此文介绍一种,每天自动备份网站以及数据库文件,发送EMAIL到邮箱,并上传网站和数据加文件到FTP空间,自动删除旧备份的方法。

24670
来自专栏Golang语言社区

HTTP协议漫谈

简介 园子里已经有不少介绍HTTP的的好文章。对HTTP的一些细节介绍的比较好,所以本篇文章不会对HTTP的细节进行深究,而是从够高和更结构化的角度将H...

375130
来自专栏网络

CobaltStrike团体服务器部署并后台运行

大家好,我是你们的老朋友Alex。Cobaltstrike的部署安装很简单,但是在实际使用中出现了问题。我把团队服务器放在ECS上,出现了两个问题:1.客户端无...

37260
来自专栏破晓之歌

Redis安装和初步使用 原

获取安装包:https://github.com/MSOpenTech/redis

28320

扫码关注云+社区

领取腾讯云代金券