热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle安装自动备份,Oracle自动备份脚本

废话不多说了,直接给大家贴代码了,具体代码如下所示:#!binsh#***********************************

废话不多说了,直接给大家贴代码了,具体代码如下所示:

#!/bin/sh

#******************************************************************

# File: oraclebak.sh

# Creation Date: 2014/1/22 17:57:32

# Last Modified: 2014/1/22 17:57:34

# 脚本功能:oracle备份脚本

# 执行方法:1、第一次执行需要root用户执行,脚本会以询问的方式创建备份目录和相关参数

# 2、脚本会自动写入crontab调度里面定时执行,crontab设置是在第一次执行的时候自动添加的

#******************************************************************

echo $USER

if [ $USER != root ]

then

echo "检测到安装用户不是root用户,请用root用户登录再执行安装文件"

exit 1

fi

echo "开始安装oracle数据库备份工具.........................."

echo "请输入备份程序的安装目录:"

read installdir

mkdir -p $installdir

result=$?

while [ $result -ne 0 ]

do

echo "无法创建目录,请重新输入或退出安装。输入y重新输入,输入n退出安装。"

read redo

if [ $redo != y ]

then

echo "用户退出安装。"

exit 0

fi

echo "请输入备份程序的安装目录:"

read installdir

mkdir $installdir

result=$?

done

echo "安装目录创建完成。"

echo "请输入执行备份用户(一般为oracle用户):"

read execuser

id $execuser

result=$?

while [ $result -ne 0 ]

do

echo "不存在该用户,是否更换其它用户或者退出安装新建用户,输入y更换用户,输入n退出安装"

read redo

if [ $redo != y ]

then

echo "用户退出安装"

exit 0

fi

echo "请输入执行备份的用户(一般为tnmsdb2用户)"

read execuser

id $execuser

result=$?

done

echo "你希望建立备份的数据库数量(一般为1)"

read backnum

if [ $backnum -eq 0 ]

then

echo "无备份数据库,退出安装"

exit 0

fi

scount=0

while [ $scount -lt $backnum ]

do

echo "请输入第"$(($scount+1))"个备份登录登录oracle数据库的用户名和密码,以及本地服务名"

echo "用户名"

read username[$scount]

echo "密码"

read password[$scount]

echo "服务名"

read sname[$scount]

su -l -c"sqlplus /nolog" $execuser<

whenever sqlerror exit sql.sqlcode;

connect ${username[$scount]}/${password[$scount]}&#64;${sname[$scount]}

exit

insert

result&#61;$?

if [ $result -ne 0 ]

then

echo "输入数据库信息无法被连接&#xff0c;是否重新输入&#xff1f;输入y重新输入&#xff0c;输入n退出安装。"

read redo

if [ $redo !&#61; y ]

then

echo "用户退出安装"

exit 0

fi

else

scount&#61;$(($scount&#43;1))

fi

done

echo "输入值守时间&#xff0c;值守时间的格式为 mm hh dd MM E 。"

echo "m代表分钟&#xff0c;h代表小时&#xff0c;d代表日期&#xff0c;M代表月份&#xff0c;E代表星期"

echo "不输入则为任意时间"

scount&#61;0

iscontinue&#61;y

while [ $iscontinue &#61;&#61; y ]

do

echo "输入第$(($scount&#43;1))个值守时间"

echo "分钟"

read min

echo "小时"

read hour

echo "日期"

read day

if [ ! $day ]

then

day&#61;"*"

fi

echo "月份"

read mouth

if [ ! $mouth ]

then

mouth&#61;"*"

fi

week&#61;"*"

backtime[$scount]&#61;"$min $hour $day $mouth $week"

echo -e "${backtime[$scount]}"

echo "是否输入更多值守时间&#xff1f;输入y继续&#xff0c;输入n进入下一步。"

read iscontinue

scount&#61;$(($scount&#43;1))

done

echo "是否要进行远程备份&#xff1f;输入y为进行远程备份&#xff0c;输入n进入下一步"

scount&#61;0

read iscontinue

while [ $iscontinue &#61;&#61; y ]

do

echo "请选择远程备份类型&#xff0c;输入s为sftp备份类型&#xff0c;否则为ftp备份类型"

read iss

if [ $iss &#61;&#61; s ]

then

rtype[$scount]&#61;"sftp"

else

rtype[$scount]&#61;"ftp"

fi

echo "请输入远程备份地址&#xff0c;可以为域名&#xff0c;计算机名或者ip地址"

read rurl[$scount]

echo "请输入远程备份登录名"

read rname[$scount]

echo "请输入远程备份登录密码"

read rpass[$scount]

echo "是否输入更多远程备份地址&#xff1f;输入y重新输入&#xff0c;n进入下一步"

read iscontinue

scount&#61;$(($scount&#43;1))

done

# installdir

# execuser

# username password sname

# backtime

# rtype rurl rname rpass

echo "您所作的备份配置如下&#xff1a;"

sresult&#61;$(echo -n "$installdir" | grep &#39;^/&#39;)

if [ ! $sresult ]

then

installdir&#61;"$PWD/$installdir"

else

installdir&#61;$installdir

fi

echo "本地备份目录为$installdir"

echo "执行备份系统用户为$execuser"

echo "系统备份数据库&#xff1a;"

allcount&#61;${#username[&#64;]}

scount&#61;0

while [ $scount -lt $allcount ]

do

echo "${username[$scount]}/${password[$scount]}&#64;${sname[$scount]}"

scount&#61;$(($scount&#43;1))

done

echo "执行备份的值守时间表&#xff0c;*代表任意"

scount&#61;0

backnum&#61;${#backtime[&#64;]}

while [ $scount -lt $backnum ]

do

echo "${backtime[$scount]}"

scount&#61;$(($scount&#43;1))

done

rnum&#61;${#rtype[&#64;]}

if [ $rnum -ne 0 ]

then

echo "远程备份的服务地址为:"

scount&#61;0

while [ $scount -lt $rnum ]

do

echo "连接方式:${rtype[$scount]},连接地址:${rurl[$scount]},用户名:${rname[$scount]},密码:${rpass[$scount]}"

scount&#61;$(($scount&#43;1))

done

fi

echo "是否确认安装&#xff1f;输入y继续&#xff0c;输入n退出安装"

read isgoon

if [ $isgoon !&#61; y ]

then

exit 0;

fi

echo "正在生产目录结构................................";

mkdir -p $installdir/logs

mkdir -p $installdir/temp

mkdir -p $installdir/zip

chown -Rvf $execuser $installdir

echo "目录结构生成完成................................"

echo "生成备份执行文件................................"

echo "#!/bin/bash">$installdir/runback.sh

echo "source ~/.bash_profile">>$installdir/runback.sh

echo "nowdate&#61;\$(date &#43;%Y-%m-%d_%k.%M.%S)">>$installdir/runback.sh

echo "nowmouth&#61;\$(date &#43;%Y-%m)">>$installdir/runback.sh

echo "echo \"\$nowdate开始备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh

scount&#61;0

snum&#61;${#username[&#64;]}

while [ $scount -lt $snum ]

do

echo "exp ${username[$scount]}/${password[$scount]}&#64;${sname[$scount]} file&#61;$installdir/temp/${username[$scount]}_${sname[$scount]}\$nowdate.dmp compress&#61;N>>$installdir/logs/\$nowmouth.log 2>&1">>$installdir/runback.sh

scount&#61;$(($scount&#43;1))

done

echo "echo \"\$(date &#43;%Y-%m-%d_%k.%M.%S)完成备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh

echo "echo \"\$(date &#43;%Y-%m-%d_%k.%M.%S)开始打包.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh

echo "gzip $installdir/zip/\$nowdate.zip $installdir/temp/>>$installdir/logs/\$nowmouth.log 2>&1">>$installdir/runback.sh

echo "rm -Rvf $installdir/temp/*>>$installdir/logs/\$nowmouth.log 2>&1">>$installdir/runback.sh

echo "echo \"\$(date &#43;%Y-%m-%d_%k.%M.%S)打包完成.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh

scount&#61;0

if [ ${#rtype[&#64;]} -ne 0 ]

then

echo "echo \"\$(date &#43;%Y-%m-%d_%k.%M.%S)进行远程备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh

snum&#61;${#rtype[&#64;]}

while [ $scount -lt $snum ]

do

echo "lftp -u ${rname[$scount]},${rpass[$scount]} ${rtype[$scount]}://${rurl[$scount]}<>$installdir/runback.sh

echo "mkdir remotedbback">>$installdir/runback.sh

echo "cd remotedbback">>$installdir/runback.sh

echo "mput $installdir/zip/\$nowdate.zip">>$installdir/runback.sh

echo "exit">>$installdir/runback.sh

echo "remote">>$installdir/runback.sh

scount&#61;$(($scount&#43;1))

done

echo "echo \"\$(date &#43;%Y-%m-%d_%k.%M.%S)完成远程备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh

fi

echo "exit 0">>$installdir/runback.sh

chmod 775 $installdir/runback.sh

chown $execuser $installdir/runback.sh

echo "生成备份执行文件完成............................"

echo "开始定制值守时间................................"

scount&#61;0

snum&#61;${#backtime[&#64;]}

while [ $scount -lt $snum ]

do

echo "${backtime[$scount]} $installdir/runback.sh">>$installdir/planlist

scount&#61;$(($scount&#43;1))

done

su -l -c"crontab $installdir/planlist" oracle

echo "完成值守时间定制................................"

exit 0

接下来给大家介绍linux oracle自动备份脚本

1、备份脚本&#xff1a;

#!/bin/sh

export ORACLE_BASE&#61;/home/oracle

export ORACLE_HOME&#61;$ORACLE_BASE/product/10.2.0/db_1

export ORACLE_SID&#61;orcl

export PATH&#61;$PATH:$HOME/bin:$ORACLE_HOME/bin

export DATA_DIR&#61;/home/bakup/data

export LOGS_DIR&#61;/home/bakup/logs

export DELTIME&#61;&#96;date -d "7 days ago" &#43;%Y%m%d&#96;

export BAKUPTIME&#61;&#96;date &#43;%Y%m%d%H%M%S&#96;

mkdir -p $DATA_DIR

mkdir -p $LOGS_DIR

echo "Starting bakup..."

echo "Bakup file path $DATA_DIR/$BAKUPTIME.dmp"

exp shop/lyisABC0987&#64;orcl file&#61;$DATA_DIR/$BAKUPTIME.dmp log&#61;$LOGS_DIR/$BAKUPTIME.log

echo "Delete the file bakup before 7 days..."

rm -rf $DATA_DIR/$DELTIME*.dmp

rm -rf $LOGS_DIR/$DELTIME*.log

echo "Delete the file bakup successfully. "

echo "Bakup completed."

2、添加到任务调度

crontab -u oracle -e

* 3 * * * /home/bakup/bakup.sh

即每天凌晨3点进行备份

如需每天备份多次&#xff0c;可设置不同时间段备份&#xff1a;

例如&#xff1a;* 3,13,18 * * * /home/bakup/bakup.sh&#xff0c;即每天3点、13点、18点进行备份。

说明&#xff1a;文件备份目录&#xff0c;用户oracle必须有更改权限&#xff0c;否则无法备份。



推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linu ... [详细]
  • 本人新手,用Unity3D想做一个简单的赛车游戏,现在的问题是转弯的时候很容易出现翻车的情况,求解决思路比如说你的中心是在(0,0,0),你把他设置成(0,-1.0,0)之类的就可 ... [详细]
  • FTP服务ftp的报错及用户管理
    ftp服务常见报错530报错认证失败(密码错误或者服务端拒绝)550服务本身未开启553文件系统不可写(权限问题)500服 ... [详细]
  • 用lvm+vmware+kickstart实现系统自动安装和快照安装
    由于我的机子是32位,装不了64位系统,所以无法使用kvm,只能用vmware了,可是vmware安装使用自带的autoinst.iso实现自动安装,无法实现我的需求,经过研究我使用kic ... [详细]
  • PHP程序员玩转Linux系列 搭建FTP代码开发环境
    PHP程序员玩转Linux系列搭建FTP代码开发环境-PHP程序员玩转Linux系列文章:有些同学可能觉得我写的都是啥yum安装的,随便配置一下而已,没啥技术含量,我的目的是让大家 ... [详细]
  • 明明白白用Qt5.10编写FTP客户端
    使用Linux自带工具实现定时下载FTP文件(文末)前言自从Qt5删除了QFtp模块后,就没有了可方便使用的FTP类。根据官方的说法&# ... [详细]
  • linux 命令——screen
    最近遇到一个东西aria2,这个玩意,这个是啥呢?Aria2是一个轻量级Linux下载软件,支持HTTPHTTPS,FTP,SFTP,BitTorrent和磁力链接(官方版),公司 ... [详细]
  • linux ftp 线程数设置,Linux搭建ftp在windows下这么访问,需要怎么设置【设置vsftp最大连接数和每个ip的最大连接数】...
    文章来源:http:zhidao.baidu.comlink?urlLOfStD1kcxGhI_D5qC7oka3_4QZc1nn1SJwWaSd4onWoVl5Wt ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • IP双栈环境下网络应用迁移
    IPv4向IPv6迁移有多种途径,在选择具体的迁移方式时,当前环境中运行的应用是否支持IPv6是重要的考量因素之一,同时在编写新的应用时,需要考虑新编写的应用不仅可以适应当前主流的IPv4环境, ... [详细]
  • SVN 功能说明(简版)
    Subversion(SVN)是什么?SVN是一种版本管理系统,是开源软件的基石。即使在沟通充分的情况下,多人维护同一份源代码的一定也会 ... [详细]
  • /usr/local/webots/bin/webotsbin: /lib/x86_64linuxgnu/libm.so.6: version `GLIBC_2.29‘ not found (r
    usrlocalwebotsbinwebots-bin:libx86_64-linux-gnulibm.so.6:versionGLIBC_2.29notfound(require ... [详细]
author-avatar
我爱投资理财
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有