`

ORACLE 自动备份脚本

 
阅读更多
方法一:
1. AP服务器上建立c:\backup文件夹(文件夹路径客户自己选择) 

2. 打开dbbkup.bat-->修改红字部分-->保存 
exp [color=red]citictest/citictest@colm2 file=c:\backup\%date:~4,20%.dmp    log=c:\backup\%date:~4,20%.log [/color]
compress=y direct=n rows=y [color=red]owner='citictest'[/color] 
consistent=n constraints=y grants=y indexes=y triggers=y 

3. 将dbbkup.bat放置于c:\backup文件夹之下 

4. 控制面板-->任务计划-->添加任务计划-->选择程序以进行计划-->浏览-->选中dbbkup.bat-->每日执行-->选择时间-->输入用户名密码-->完成 

5. 执行时间过了之后,c:\backup文件夹下面会出现yyyy-mm-dd.dmp命名的DUMP档案


方法二:
@echo off
setlocal ENABLEDELAYEDEXPANSION
::读取配置文件
md %windir%\OracleAutoBackup >nul 2>nul
set configFile=%windir%\OracleAutoBackup\config.ini
set i=0
if not exist %configFile% echo.>%configFile%
for /f "delims=" %%x in (%configFile%) do (
 if !i!==0 set bak_hou=%%x
 if !i!==1 set bak_lot=%%x
 if !i!==2 set bak_dir=%%x
 if !i! gtr 2 (
  set/a gup=!i!-2
  set ora[!gup!]=%%x
 )
 set/a i+=1
)
::取默认值
if "!bak_hou!"=="" set bak_hou=3
echo !bak_hou!|findstr "^[0-9]*$">nul || set bak_hou=3
if "!bak_lot!"=="" set bak_lot=7
echo !bak_lot!|findstr "^[0-9]*$">nul || set bak_lot=7
if "!bak_dir!"=="" set bak_dir=%cd%\数据库备份
for /f "tokens=*" %%x in ("!bak_dir!") do set bak_dir=%%~fx
if not exist !bak_dir! md !val! >nul 2>nul
::去掉格式错误的数据库连接配置项
set j=0
for %%i in (1,2,3,4,5,6,7,8,9) do (
 set ora[%%i]>nul 2>nul&& (
  set ora_cur=
  for /f "usebackq delims==. tokens=1-3" %%a in (`set ora[%%i]`) do set ora_cur=%%b
  set ora[%%i]=
  echo !ora_cur!|findstr "\/">nul 2>nul && echo !ora_cur!|findstr "@">nul 2>nul && (
   set/a j+=1
   set ora[!j!]=!ora_cur!
  )
 )
)
::进入管理程序
if "%1"=="" goto init

::检查exp命令是否可用
:checkexp
set resultFile=%temp%\%random%.txt
del %resultFile% /q>nul 2>nul
exp a/a@a%random% file=%temp%\%random%.dmp >nul 2>%resultFile%
if exist %resultFile% (
  type %resultFile%|find "'exp' 不是内部或外部命令">nul
  if !errorlevel!==0 (
    del %resultFile%>nul
    echo exp命令不可用!程序即将退出!
    ping -n 10 127.1 >nul 2>nul
    exit
  )
  del %resultFile%>nul
)
::1.数据库备份
title 备份进程
echo.
echo.
echo 一、正在进行备份……
for %%i in (1,2,3,4,5,6,7,8,9) do (
 set ora[%%i]>nul 2>nul&& (
  set ora_cur=
  for /f "usebackq delims==. tokens=1-3" %%a in (`set ora[%%i]`) do set ora_cur=%%b
  set ora_usr=
  set ora_net=
  for /f "delims=/" %%a in ('echo !ora_cur!') do set ora_usr=%%a
  for /f "delims=@ tokens=2" %%a in ('echo !ora_cur!') do set ora_net=%%a
  echo.
  echo.
  echo     %%i.正在备份 !ora_usr!/******@!ora_net!……
  md !bak_dir!\!ora_net!__!ora_usr!\ >nul 2>nul
  set ftmr=!time: =0!
  set bak_cur_dir=!bak_dir!\!ora_net!__!ora_usr!\
  set bak_cur_fnm=!ora_net!__!ora_usr!__!date:~0,4!!date:~5,2!!date:~8,2!-!ftmr:~0,2!!ftmr:~3,2!
  set bakfile=!bak_cur_dir!!bak_cur_fnm!.dmp
  set logfile=!bak_cur_dir!!bak_cur_fnm!.log
  exp !ora_cur! file="!bakfile!" log="!logfile!"
  echo 如果备份成功的话,就进行压缩>nul
  if exist "!bakfile!" (
   pushd !bak_cur_dir!
   set zipfile=
   if exist "%ProgramFiles%\winrar\winrar.exe" (
    echo 使用WinRAR进行压缩>nul
    set zipfile=!bak_cur_fnm!.rar
    "%programfiles%\winrar\winrar" a -r "!zipfile!" "!bak_cur_fnm!.dmp" "!bak_cur_fnm!.log"
   ) else (
    echo 使用ZIP指令进行压缩>nul
    set zipfile=!bak_cur_fnm!.zip
    zip "!zipfile!" "!bak_cur_fnm!.dmp" "!bak_cur_fnm!.log">nul
   )
   if exist "!zipfile!" (
    del /q "!bakfile!"
    del /q "!logfile!"
   )
   popd
  )
 )
)
::2.数据库过期备份删除
echo.
echo.
echo 二、正在清除过期的备份文件……
for /f "tokens=1,2,3 delims=-" %%a in ('echo wscript.echo date-!bak_lot! ^>t~.vbs ^& cscript //nologo t~.vbs ^& del t~.vbs') do (
    set y=%%a&set m=%%b&set d=%%c
    if %%b lss 10 set m=0%%b&if %%c lss 10 set d=0%%c
)
set DateE=!y!-!m!-!d!
for %%i in (1,2,3,4,5,6,7,8,9) do (
 set ora[%%i]>nul 2>nul&& (
  set ora_cur=
  for /f "usebackq delims==. tokens=1-3" %%a in (`set ora[%%i]`) do set ora_cur=%%b
  set ora_usr=
  set ora_net=
  for /f "delims=/" %%a in ('echo !ora_cur!') do set ora_usr=%%a
  for /f "delims=@ tokens=2" %%a in ('echo !ora_cur!') do set ora_net=%%a
  set cur_dir=!bak_dir!\!ora_net!__!ora_usr!
  for /f "tokens=*" %%x in ("!cur_dir!") do set cur_dir=%%~fx
  echo 判断文件夹条件是否满足 >nul
  for %%a in (!cur_dir!\*.dmp,!cur_dir!\*.zip,!cur_dir!\*.rar) do (
   echo 判断文件名称条件是否满足 >nul
   set n=%%a&set n=!n:~-17,-9!&set n=!n:~0,4!-!n:~4,2!-!n:~6,2!
   set t=%%~ta
   set FileDate=!t:~0,10!
   if "!n!"=="!FileDate!" (
    echo 判断时间条件是否满足 >nul
    if !FileDate! leq %DateE% (
     echo 删除 %%a
     del /q "%%a"
    )
   )
  )
 )
)
::3.完成退出
echo.
echo.
echo 三、本次备份操作完成,即将退出。
ping -n 10 127.1 >nul 2>nul
exit
 
::=================================以下是备份程序=================================
::=================================以下是管理程序=================================
:init
mode con cols=100 lines=40
title Oracle自动备份 - by jason
color 0e
::复制到 Windows 目录
copy "%~f0" "%windir%\OracleAutoBackup\OracleAutoBackup.bat" >nul 2>nul
::注册计划任务
:regtasks
at|find "服务尚未启动">nul 2>nul&&(
 net start schedule
 if not !errorlevel!==0 (
  echo Task Scheduler^(计划任务^)服务未能启动,程序即将退出!
  pause>nul
  goto exit
 )
)
set job_tmr=!bak_hou!:00
if !bak_hou! lss 10 set job_tmr=0!bak_hou!:00
at !job_tmr! /every:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 %windir%\OracleAutoBackup\OracleAutoBackup.bat -backup >nul 2>nul
for /f "usebackq" %%i in (`dir %windir%\tasks\at*.job /b/o:d`) do set lastAt=%%i
del %windir%\tasks\Oracle自动备份.job >nul 2>nul
rename %windir%\tasks\!lastAt! Oracle自动备份.job
::保存配置文件
:saveconfig
echo !bak_hou!>%configFile%
echo !bak_lot!>>%configFile%
echo !bak_dir!>>%configFile%
for %%i in (1,2,3,4,5,6,7,8,9) do (
 set ora[%%i]>nul 2>nul&& (
  set ora_cur=
  for /f "usebackq delims==. tokens=1-3" %%a in (`set ora[%%i]`) do set ora_cur=%%b
  echo !ora_cur!>>%configFile%
 )
)
::准备数据库配置字符串
set ora_str=
for %%i in (1,2,3,4,5,6,7,8,9) do (
 set ora[%%i]>nul 2>nul&& (
  set ora_cur=
  for /f "usebackq delims==. tokens=1-3" %%a in (`set ora[%%i]`) do set ora_cur=%%b
  set ora_usr=
  set ora_net=
  for /f "delims=/" %%a in ('echo !ora_cur!') do set ora_usr=%%a
  for /f "delims=@ tokens=2" %%a in ('echo !ora_cur!') do set ora_net=%%a
  set ora_str=!ora_str!%%i. !ora_usr!/******@!ora_net!; 
 )
)
::开始
:start
cls
echo  --------------------------------------------------------------------------------------------------
echo                                            Oracle自动备份
echo                                     作者:jason QQ:59006558
echo  --------------------------------------------------------------------------------------------------
echo    使用操作系统自带的计划任务功能,每天定时运行exp命令导出指定的Oracle数据库并压缩,然后按需删除
echo  已过期的压缩的导出文件,以实现自动备份的功能。
echo    通常,为了便于管理,在我们公司一个oracle用户有且仅有的全权管理一个数据库,因此该用户的登陆名称
echo  其实可以视做为数据库名称。
echo.
echo  1.添加数据库:!ora_str!
echo  2.删除数据库
echo  3.设置文件夹:!bak_dir!
echo  4.几点钟备份:!bak_hou!
echo  5.删除几天前:!bak_lot!
echo  6.立即备份
echo  7.退出
echo.

::选择
:cho
set choice=
set /p choice=请选择:
if not "%choice%"=="" set choice=%choice:~0,1%
if "%choice%"=="1" goto addora
if "%choice%"=="2" goto delora
if "%choice%"=="3" goto setdir
if "%choice%"=="4" goto sethou
if "%choice%"=="5" goto setlot
if "%choice%"=="6" goto nowbak
if "%choice%"=="7" goto exit
echo.
echo  =================================================================================================
echo  =================================== 请选择1~7,按任意键重选!====================================
echo  =================================================================================================
pause>nul
goto start

::添加数据库
:addora
set maxora=0
for %%i in (1,2,3,4,5,6,7,8,9) do (set ora[%%i]>nul 2>nul&&(set maxora=%%i))
set str_result=最多9个! 
if not !maxora!==9 (
 set/a maxora+=1
 set new_ora=
 set/p new_ora=请输入(用户名/密码@网络服务名):
 set str_result=格式错误!
 if not "!new_ora!"=="" (
  echo !new_ora!|findstr "\/">nul 2>nul && echo !new_ora!|findstr "@">nul 2>nul && (
   set ora[!maxora!]=!new_ora!
   set str_result=添加成功,
  )
 )
)
echo  =================================================================================================
echo  ==================================== !str_result!按任意键继续!====================================
echo  =================================================================================================
pause>nul
if "!str_result!"=="添加成功," goto saveconfig
goto start

::删除数据库
:delora
set str_result=操作错误!
set del_idx=0
set/p del_idx=请输入要删除的序数(1~9):
if not "%del_idx%"=="" set del_idx=%del_idx:~0,1%
if "!del_idx!"=="" set del_idx=0
echo !del_idx!|findstr "^[0-9]*$">nul || set del_idx=0
if not "!del_idx!"=="0" (
 set ora[!del_idx!]=
 set str_result=删除成功,
)
::去掉格式错误的数据库连接配置项
if "!str_result!"=="删除成功," (
 set j=0
 for %%i in (1,2,3,4,5,6,7,8,9) do (
  set ora[%%i]>nul 2>nul&& (
   set ora_cur=
   for /f "usebackq delims==. tokens=1-3" %%a in (`set ora[%%i]`) do set ora_cur=%%b
   set ora[%%i]=
   echo !ora_cur!|findstr "\/">nul 2>nul && echo !ora_cur!|findstr "@">nul 2>nul && (
    set/a j+=1
    set ora[!j!]=!ora_cur!
   )
  )
 )
)
echo  =================================================================================================
echo  ==================================== !str_result!按任意键继续!====================================
echo  =================================================================================================
pause>nul
if "!str_result!"=="删除成功," goto saveconfig
goto start
::设置文件夹
:setdir
set new_dir=
set/p new_dir=请输入备份用的文件夹:
if "!new_dir!"=="" set new_dir=%cd%\数据库备份
for /f "tokens=*" %%x in ("!new_dir!") do set new_dir=%%~fx
set bak_dir=!new_dir!
echo  =================================================================================================
echo  ==================================== 设置成功,按任意键继续!====================================
echo  =================================================================================================
pause>nul
goto saveconfig
::几点钟备份
:sethou
set str_result=操作错误!
set new_hou=
set/p new_hou=请输入每天几点钟备份(0~23):
echo !new_hou!|findstr "^[0-9]*$">nul || set new_hou=
if not "!new_hou!"=="" (
 if !new_hou! geq 0 (
  if !new_hou! leq 23 (
   set bak_hou=!new_hou!
   set str_result=设置成功,
  )
 )
)
echo  =================================================================================================
echo  ==================================== !str_result!按任意键继续!====================================
echo  =================================================================================================
pause>nul
if "!str_result!"=="设置成功," goto regtasks
goto start

::删除几天前
:setlot
set str_result=操作错误!
set new_lot=
set/p new_lot=请输入删除几天之前的备份(大于零):
echo !new_lot!|findstr "^[0-9]*$">nul || set new_lot=
if not "!new_lot!"=="" (
 if !new_lot! gtr 0 (
  set bak_lot=!new_lot!
  set str_result=设置成功,
 )
)
echo  =================================================================================================
echo  ==================================== !str_result!按任意键继续!====================================
echo  =================================================================================================
pause>nul
if "!str_result!"=="设置成功," goto saveconfig
goto start
::现在备份
:nowbak
start %windir%\OracleAutoBackup\OracleAutoBackup.bat -backup
echo  =================================================================================================
echo  ==================================== 成功启动,按任意键继续!====================================
echo  =================================================================================================
pause>nul
goto start
 
::创建计划任务[已方法因为要输入密码,已否决]
:saveschtasks
if "%ospwd%"=="" (
 set/p ospwd=保存计划任务时,无法取得授权,请输入%username%的密码:
 if "!ospwd!"=="" (
  echo 已放弃操作,按任意键返回
  pause>nul
  goto init
 )
)
set resultFile=%temp%\%random%.txt
del %resultFile% /q>nul 2>nul
schtasks /create /tn Oracle自动备份 /sc daily /st 03:00 /tr "%windir%\OracleAutoBackup.bat -backup" /ru %username% /rp %ospwd% /f >nul 2>%resultFile%
if exist %resultFile% (
  type %resultFile%|find "无法设置帐户信息">nul
  if !errorlevel!==0 (
    set ospwd=
    del %resultFile%>nul
    schtasks /delete /tn Oracle自动备份 /f >nul 2>nul
    goto saveschtasks  
  )
  del %resultFile%>nul
)
goto start
 
::退出程序
:exit
::pause>nul
分享到:
评论

相关推荐

    oracle自动备份脚本

    本文将围绕“Oracle自动备份脚本”这一主题,深入探讨如何利用脚本实现Oracle数据库的自动备份,确保数据的安全与可恢复性。 ### Oracle自动备份脚本的重要性 在日常运营中,数据的丢失或损坏可能对企业造成不可...

    Linux oracle 自动备份脚本

    ### Linux Oracle自动备份脚本详解 #### 背景与目的 在企业级数据库管理中,数据的安全性和可靠性至关重要。Oracle作为一款广泛使用的数据库管理系统,其数据备份的重要性不言而喻。通过设置自动化的备份机制可以...

    Oracle自动备份脚本

    通过windows的计划任务,完成Oracle数据的自动备份,利用rar按照系统日期重新命名压缩文件,并通过ftp上传到备份服务器。 具体参见http://blog.csdn.net/z3h/archive/2007/10/05/1812063.aspx 20080125补充一下:...

    oracle自动备份脚本的

    本文将围绕“Oracle自动备份脚本”这一主题,详细讲解如何利用脚本来实现Oracle数据库的定时备份。 首先,我们要理解标题中的“Oracle自动备份脚本”。这通常指的是一个批处理脚本,它包含了执行Oracle数据库备份的...

    windows环境下Oracle数据库的自动备份脚本

    windows环境下Oracle数据库的自动备份脚本

    linux 下的 oracle 自动备份脚本

    linux 下的 oracle 自动备份脚本

    oracle数据库自动备份脚本

    对于生产环境,通常需要对数据库执行有定时备份操作,好方便数据库出现异常问题的数据恢复,提高数据库的安全性,这里提供linux服务器下详细操作脚本,供大家参阅

    ORACLE自动备份脚本

    用于ORACLE自动备份用,必须先安装7Z压缩软件才能使用。

    oracle 数据库自动备份脚本

    实现oracle 数据库自动备份+保留最新的7天数据+另一机器拷贝备份的脚本

    Oracle数据库自动备份脚本FOR WIN.rar

    "Oracle数据库自动备份脚本FOR WIN.rar" 是一个针对Windows环境设计的自动化备份解决方案,它使得Oracle数据库的备份过程更加简便和可靠。 这个脚本主要有以下三个特点: 1. **动态日期命名**:备份导出文件时,...

    Oracle数据库RMAN的自动备份脚本

    ### Oracle数据库RMAN的自动备份脚本知识点解析 在企业级数据库管理中,备份与恢复是确保数据安全的重要环节之一。本文将详细解读一个Oracle数据库RMAN(Recovery Manager)的自动备份脚本,该脚本适用于Linux环境...

    oracle数据库自动备份脚本带说明

    "oracle数据库自动备份脚本带说明"的标题表明这是一个关于如何自动化执行Oracle数据库备份的脚本,这对于系统管理员来说是非常实用的工具。下面我们将详细探讨Oracle数据库的备份策略、自动备份脚本的工作原理以及...

Global site tag (gtag.js) - Google Analytics