oracle.bat
@ECHO OFF
REM 調(diào)用格式:call%~dp0OracleBackup 數(shù)據(jù)庫 用戶名 密碼 文件夾名稱
ECHO----------------------------
ECHO 服務(wù)器:XXX.XXX.X.X
ECHO----------------------------
ECHO.
ECHO--XXX:
ECHO.
ECHO XXX:用戶名 密碼
call%~dp0OracleBackup 數(shù)據(jù)庫 用戶名 密碼 文件夾名稱
ECHO.
OracleBackup.bat
@ECHO OFF
REM EMIS4開發(fā)數(shù)據(jù)庫備份腳本,建議每周執(zhí)行兩次
REM!!!用戶應(yīng)當(dāng)具備expdp導(dǎo)出的權(quán)限
REM!!!使用expdp方式導(dǎo)出,使用directory=dpdata,映射到數(shù)據(jù)庫服務(wù)器上的E:appAdministratordpdata
REM 參數(shù):OracleBackup 數(shù)據(jù)庫 用戶名 密碼 文件夾名稱
REM-----------------------變量設(shè)置--------------------------
REM Oracle中設(shè)置的DPDATA別名
SET DIRECTORYNAME=dpdata
REM Oracle中設(shè)置的DPDATA物理路徑(位于ORACLE服務(wù)器上)
SET SRC=E:appAdministratordpdata
REM rar所在的路徑
SET RAR=%~dp0rar.exe
REM 本次備份的文件的文件名(不包含后綴)
SET FILE=%2_%date:~0,4%%date:~5,2%%date:~8,2%
REM 指定要保留的天數(shù)
SET DaysAgo=60
REM 指定要保留的最小文件個(gè)數(shù)
SET ReserveNum=3
REM-----------------------程序開始--------------------------
ECHO 創(chuàng)建存放文件夾
md%SRC%%4
ECHO 按日期完整導(dǎo)出EMIS開發(fā)數(shù)據(jù)庫
expdp%2/%3@%1 directory=%DIRECTORYNAME% dumpfile=%FILE%.dmp schemas=%2
ECHO 將導(dǎo)出的數(shù)據(jù)庫進(jìn)行壓縮
%RAR% a -m5 -s -r -ep1 -y -idq %SRC%%4\%FILE%.rar %SRC%%FILE%.dmp
ECHO 刪除臨時(shí)文件,只保留壓縮后的數(shù)據(jù)庫包
REM 如果壓縮失敗,不刪除DMP文件
if exist "%SRC%%4\%FILE%.rar" (DEL "%SRC%%FILE%.dmp")
REM 如果DMP存在(壓縮失敗),復(fù)制到目標(biāo)路徑
if exist "%SRC%%FILE%.dmp" (MOVE /Y "%SRC%%FILE%.dmp" "%SRC%%4\%FILE%.dmp")
del%SRC%export.log
REM 按文件的修改日期,刪除DaysAgo以前的數(shù)據(jù)(暫時(shí)不用)
REM forfiles/p %SRC%%4 /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
REM 計(jì)算要保留的最小日期
CALL :DateToDays%date:~0,4% %date:~5,2% %date:~8,2% PassDays
SET/a PassDays-=%DaysAgo%
CALL :DaysToDate%PassDays% DstYear DstMonth DstDay
REM 日期格式字符串為yyyyMMdd
SET DstDate=%DstYear%%DstMonth%%DstDay%
ECHO 將刪除日期為%DstDate% 及以前的數(shù)據(jù)!
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO 刪除路徑中的%DaysAgo%天以前的數(shù)據(jù)
for /r "%SRC%%4" %%a in (*.*) do (
REM 記錄備份文件個(gè)數(shù)
SET"FileNum=0" for /f "delims=" %%i in ('dir /B /A-D "%SRC%%4" 2^>nul') do set /a filenum+=1
REM 防止備份出問題后,將所有備份文件刪完,保留指定個(gè)數(shù)的備份文件
if !FileNum! leq %ReserveNum% (
ECHO 備份文件個(gè)數(shù)少于%ReserveNum%個(gè),退出刪除!
GOTO :EOF
)
REM 截取文件名中的日期部分
SET"FileDate=%%a"
SET"FileDate=!FileDate:~-12,-4!" if "!FileDate!" leq "%DstDate%" (
if exist "%%a" (DEL /f /q "%%a")
)
)
ENDLOCAL
GOTO :EOF
:DateToDays%yy% %mm% %dd% days
SETLOCAL ENABLEEXTENSIONS
SET yy=%1&SET mm=%2&SET dd=%3
IF1%yy% LSS 200 IF 1%yy% LSS 170 (SET yy=20%yy%) ELSE (SET yy=19%yy%)
SET/a dd=100%dd%%%100,mm=100%mm%%%100
SET/a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
SET/a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
ENDLOCAL&SET %4=%j%&GOTO :EOF
:DaysToDate%days% yy mm dd
SETLOCAL ENABLEEXTENSIONS
SET/a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
SET/a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
SET/a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(IF%mm% LSS 10 SET mm=0%mm%)&(IF %dd% LSS 10 SET dd=0%dd%)
ENDLOCAL&set %2=%yy%&SET %3=%mm%&SET %4=%dd%&GOTO :EOF
Rar.exe完整下載 ORACLE數(shù)據(jù)庫EXPDP備份.zip