您的位置:首页 > 数据库 > Oracle

windows下实现oracle自动备份 bat

2012-02-06 11:54 381 查看
@echo off

setlocal enabledelayedexpansion

title %date% %time:~,8% by LiaoNing Sunray Software Technology

::定义数据库SID

set SID=sryx254

::定义用户名数组(各用户间用空格分隔 例如:user1 user2 user3)

set userArr=user1 user2 user3

set pswdArr=password1 password2 password3

::指定删除天数

set daysAgo=7

::指定备份路径

set filePath=E:\dmp_beifen\

::定义脚本内部变量

set time_=%time: =0%

set fileName=%date:~0,4%%date:~5,2%%date:~8,2%_%time_:~0,2%%time_:~3,2%.dmp

set newDir=%date:~0,10%\

::创建以当天日期命名的文件夹

if not exist %filePath% md %filePath%

if not exist %filePath%%newDir% md %filePath%%newDir%

::导出数据

set/a n=1

call :sub userArr %userArr%

call :sub pswdArr %pswdArr%

set/a arrLength=nuserArr

:loop

exp !userArr%n%!/!pswdArr%n%!@%SID% file=%filePath%%newDir%!userArr%n%!_%fileName%

::echo 测试显示 !userArr%n%!/!pswdArr%n%!

if %n% lss %arrLength% set/a "n+=1"&goto loop

goto next

:sub

set %1%n%=%2

if not "%3"=="" (set/a n+=1

shift /2&goto sub)

set/a "n%1=n,n=1"&goto :eof

:next

::删除N天以前的数据

set d=%date:~0,10%

mshta vbscript:createobject("scripting.filesystemobject").opentextfile("temp.txt",2,true).write(FormatDateTime(dateadd("d",-%daysAgo%+1,"%d%"),vbShortDate))(window.close)

for /f "tokens=1 delims= " %%i in (temp.txt) do set t1=%%i

for /f "delims= " %%i in ('dir /ad/b %filePath%') do (

set t2=%%i

set t3=!t2:~0,10!

if !t3! lss !t1! rd /s/q "%filePath%%%i")

del /f temp.txt

注意还要在控制面板中设置短日期、长日期格式为“yyyy-mm-dd”,否则最后面删除N天前的数据会出现问题(多删了好几天的备份文件)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: