Oracle数据库在linux和windows下自动备份脚本.docx
《Oracle数据库在linux和windows下自动备份脚本.docx》由会员分享,可在线阅读,更多相关《Oracle数据库在linux和windows下自动备份脚本.docx(10页珍藏版)》请在冰豆网上搜索。
Oracle数据库在linux和windows下自动备份脚本
Oracle数据库在linux和windows下自动备份脚本总结
本文我们主要对Oracle数据库在Linux和Windows下自动备份的脚本进行了总结,以便于我们对于Oracle数据库在不同平台上的备份的掌握。
一.Windows平台下
Windows系统下Oracle数据库自动备份脚本:
expData.bat的内容:
exp system/system@orcl file=c:
\oracle_bak\tne%date:
~4,10%.dmp owner=tne
exp system/system@orcl file=c:
\oracle_bak\prt%date:
~4,10%.dmp owner=prt
exp system/system@orcl file=c:
\oracle_bak\sec%date:
~4,10%.dmp owner=sec
exp system/system@orcl file=c:
\oracle_bak\tea%date:
~4,10%.dmp owner=tea
exp system/system@orcl file=c:
\oracle_bak\pic%date:
~4,10%.dmp owner=pic
exp system/system@orcl file=c:
\oracle_bak\system%date:
~4,10%.dmp owner=system
path=D:
\WinRAR 3.20
rar a Data%date:
~4,10%.rar *%date:
~4,10%.dmp
del *%date:
~4,10%.dmp
二.Linux平台下
功能:
1、每天数据库exp全备份
2、自动删除7天前的备份,系统只保留当前7天的备份
1.系统用户一览
用户
所在组
权限
密码
root
root
超级用户
root123
oracle
oinstall
dba
orcl
2.Oracle环境变量
标题
内容
ORACLE目录
/home/oracle
ORACLE_BASE
/usr/local/oracle/
ORACLE_HOME
/usr/local/oracle/product/11.2.0
ORACLE_SID
orcl
3.邮件设置
[root@oraclemail]#cd/etc/mail
[root@oraclemail]#mvsubmit.cfsubmit.cfbak
[root@oraclespool]#chmoda+wrxmqueue/
[root@oraclemail]#echo"sdsdssd"|mail-s"sda"
liunx@
4.创建备份目录
使用oracle创建备份文件存储目录
[root@oraclemail]#suoracle
[root@oraclemail]#df–hl
--查询/home下空闲磁盘空间,保证空间充足
[root@oraclemail]#su-oracle
[root@oracleoracle]$mkdir-p
/home/oracle/backup/data
[root@oracleoracle]$cd/home/oracle/backup
4.创建备份脚本
使用oracle用户创建自动备份脚本
[root@oracleoracle]$cd/home/oracle
[root@oracleoracle]$vibackup.sh
脚本内容如下,其中的红色部分需要根据实际情况调整
当前备份设置删除1个月之前的备份文件
#!
/bin/sh
######Oracleinfor#####
#设置字符集编码
exportLANG="en_US.UTF-8"
#设置语言
exportNLS_LANG="SimplifiedChinese_china".ZHS16GBK
#设置oracle的base目录
exportORACLE_BASE=/usr/local/oracle/
#设置oracle的家目录
exportORACLE_HOME=/usr/local/oracle/product/11.2.0
#设置oracle的sid
exportORACLE_SID=orcl
#把oracle的path加到path中去以便调用
exportPATH=$PATH:
$HOME/bin:
$ORACLE_HOME/bin
echo“检查磁盘空间”
#Checklocaldiskspace.................................
#注意这里写oracle备份文件目录
dest_posion=/home/oracle/backup
#邮件发送给谁,就是下面大于%85的时候的那句
RECIPT="xxxxxx"
USED=`df-k|grep$bak_home|awk'{print$5}'|awk-F%'{print$1}'`
#如果磁盘使用情况大于%85的话
if[$USED-gt85];then
#就报警并且发送邮件给当前用户
echo"Diskspaceisfull\243\254pleasecheckit"|mail-s"expfullbackupfailed"$RECIPT
exit1
fi
#设置备份文件格式
#设置删除备份文件的格式,当前为删除1个月前的备份
#设置备份时间
backuptime=`date+"%Y%m%d%H"`
#设置删除时间(例如现在是2013-3-23那么这地方就是2013-2-23)
deletetime=`date-d"1monthago"+"%Y%m%d%H"`
#这个地方给你自定义了一个变量记录你的oracle的备份目录
dest_posion="xxxxxxxx"
echo开始删除一个月前的备份
#开始删除1个月前的备份
#删除你oracle的备份和日志文件(这个地方的日志的格式必须和下面的startingexpbackup一致)
rm-f$dest_posion/orcl_$deletetime.dmp
rm-f$dest_posion/orcl_$deletetime.log
echo删除完毕
echo开始备份
#startingexpbackup.....
expsystem/abc123full=ybuffer=65536
#下面的这两个文件就是刚刚说要和上面的删除备份的时候必须一致的文件
bakdata=$dest_posion/orcl_$deletetime.dmp
baklog=$dest_posion/orcl_$deletetime.log
echo开始压缩备份
#首先到备份目录中
cd$dest_posion
#然后备份并把两个文件压缩成为一个文件,文件名字就是备份的那一个月.tar.gz
tar-zcvf${backuptime}.tar.gz$bakdata$baklog#压缩备份文件和日志文件
#如果成功的话就删除原来的.dmp和.log的文件
if[$?
-eq0];then
rm-rf$dest_posion/orcl_$deletetime.dmp&&rm-rfrm-f$dest_posion/orcl_$deletetime.log
else
echo"文件删除失败......."
fi
echo"开始远程上传";
##FTPserver######
FTP_HostName=192.168.0.211
FTP_UserName=ftpbackup
FTP_PassWord='passwd'
FTP_BackupDir=DBBACKUP
##ftpserver######
#服务器端必须装有lftp
lftp$FTP_HostName-u$FTP_UserName,$FTP_PassWord<#这里是FTP服务器的存放oracl数据库备份文件目录
cd$dest_posion
#进入之后删除上个月的...当然你也可以定义删除上上个月的等等都是date-d设置的
mrm${deletetime}.tar.gz
mput${backuptime}.tar.gz
bye
EOF
#如果上面FTP传输完成的话就发送邮件给指定的外网你的邮箱
if[$?
-eq0];then
##Sendemailtoadministrator######
echo`ls`|mail-s"数据库备份完毕$(date+"%Y%m%d"),请知会"yourmail@---fbackup_report@
else
echo"FTP传输失败....."
fi
注意:
date-d"1monthago"命令代表获取当前1个月之前的时间
date-d"1weekago"命令代表获取当前1周之前的时间
date-d"1dayago"命令代表获取当前1天之前的时间
提升权限
chmod+xbackup.sh#需要先设置为可执行脚本,只需要设置一次
手动测试一下
./backup.sh
5.设置脚本定时执行
要检查cron服务是否开启
/sbin/servicecrondstart//启动服务
/sbin/servicecrondstop//关闭服务
/sbin/servicecrondrestart//重启服务
使用root执行
vi/etc/crontab
#在最后一行添加
1017***oracle/home/oracle/backup.sh
#每天的17:
10执行/home/oracle/backup.sh
命令用法
●*****:
代表执行时间间隔
分别表示:
分钟:
0-59
小时:
1-23
日期:
1-31
月份:
1-12
星期:
0-6(0表示周日)
还可以用一些特殊符号:
*:
表示任何时刻
,:
表示分割
-:
表示一个段,如第二端里:
1-5,就表示1到5点
/n:
表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。
也可以写成1-23/1.
示例:
4321***21:
43执行
1505*** 05:
15执行
017***17:
00执行
017**1每周一的17:
00执行
0,1017**0,2,3每周日,周二,周三的17:
00和17:
10执行
0-10171**毎月1日从17:
00到7:
10毎隔1分钟执行
001,15*1毎月1日和15日和一日的0:
00执行
4241** 毎月1日的4:
42分执行
021**1-6 周一到周六21:
00执行
0,10,20,30,40,50**** 每隔10分执行
*/10**** 每隔10分执行
*1*** 从1:
0到1:
59每隔1分钟执行
01*** 1:
00执行
0*/1*** 毎时0分每隔1小时执行
0**** 毎时0分每隔1小时执行
28-20/3*** 8:
02,11:
02,14:
02,17:
02,20:
02执行
3051,15** 1日和15日的5:
30执行
在实际使用过程中需要根据数据库膨胀的速度考虑备份定时的时间,一般膨胀越快,备份越频繁,如每天一次晚上23:
00备份;数据库文件较大时,可适当降低备份频率,如2天或3天备份一次,同时增加删除频率,如只保留最近10天的数据。
需要注意备份路径所在的磁盘空间大小,一般使用df–hl查询,如果空间太小需要及时手动清理或增大空间。
●oracle:
执行脚本的用户
●/home/oracle/backup.sh:
执行脚本的路径
Linux系统下Oracle数据库的备份:
FIELNAME=/home/oracle/dmp/`date +%Y%m%d`.dmp
echo $FIELNAME > /home/oracle/dmp/filename
/home/oracle/product/9.2/bin/exp ccbip/'und\=2008CN(Y|N)
full=y file=$FIELNAME
bzip2 $FIELNAME
注:
创建的文件都是Oracle用户oinstall组的。
#!
/bin/bash
######Oracle infor#####
export ORACLE_HOME=/oracle/ruankodb/product/db/10g
export ORACLE_SID=test
export PATH=$ORACLE_HOME/bin:
$PATH
######Backup oracle user and password#####
ORSQL_UserName1=user1
ORSQL_PassWord1=passwd1
ORSQL_UserName2=user2
ORSQL_PassWord2=passwd2
ORSQL_UserName3=user3
ORSQL_PassWord3=passwd3
######Database name######
Backup_Database_Name1=user1db
Backup_Database_Name2=user2db
Backup_Database_Name3=user3db
##FTPserver######
FTP_HostName=192.168.0.211
FTP_UserName=ftpbackup
FTP_PassWord='passwd'
FTP_BackupDir=DBBACKUP
########
TodayDBBackup=db-*-$(date +"%Y%m%d").dmp
OldDBBackup=db-*-$(date -d -3day +"%Y%m%d").dmp
##backuping######
exp $ORSQL_UserName1/$ORSQL_PassWord1 file=/dbbackup/db-$Backup_Database_Name1-$(date +"%Y%m%d").dmp;
exp $ORSQL_UserName2/$ORSQL_PassWord2 file=/dbbackup/db-$Backup_Database_Name2-$(date +"%Y%m%d").dmp;
exp $ORSQL_UserName3/$ORSQL_PassWord3 file=/dbbackup/db-$Backup_Database_Name3-$(date +"%Y%m%d").dmp;
rm -f /dbbackup/$OldDBBackup
cd /dbbackup/
##ftpserver######
lftp $FTP_HostName -u $FTP_UserName,$FTP_PassWord << EOF
cd $FTP_BackupDir
mrm $OldDBBackup
mput $TodayDBBackup
bye
EOF
##Send email to administrator######
echo `ls`| mail -s "数据库备份完毕$(date +"%Y%m%d"),请知会" yourmail@ -- -f backup_report@
##################################
##################################