【Oracle指令碼】-很不錯的Windows下資料庫備份EXP指令碼

sdon發表於2010-12-05

 

 

------------開始---------------

@echo off
::--------------------------------------------------
::匯出資料庫,保留25天的備份
::--------------------------------------------------

::***********************獲得25天以前的日期*******************************
::定義N天(N<=28)前的日期
set N=7
::定義今天的日期
set CURRENT_DATE=%date:~0,4%%date:~5,2%%date:~8,2%
::定義獲得年的標示
set CURRENT_YEAR=%date:~0,4%
::定義去年的標示
set /a LAST_YEAR=%CURRENT_YEAR%-1
::定義獲得月的標示
set SIGNMONTH=%date:~5,1%
if %SIGNMONTH% EQU 0 (set CURRENT_MONTH=%date:~6,1%) else (set CURRENT_MONTH=%date:~5,2%)
::定義上個月的標示
if %CURRENT_MONTH% GTR 1 (
set /a LAST_MONTH=%CURRENT_MONTH%-1) else (
set /a LAST_MONTH=12)
::定義獲得天的標示
set SIGN=%date:~8,1%
if %SIGN% EQU 0 (set CURRENT_DAY=%date:~9,1%) else ( set CURRENT_DAY=%date:~8,2%)
::判斷是否閏年:0表示非閏年,1表示閏年
set /a CONDITION1=%CURRENT_YEAR%%%4
set /a CONDITION2=%CURRENT_YEAR%%%400
set /a CONDITION3=%CURRENT_YEAR%%%100
if %CONDITION1% EQU 0 (
 if %CONDITION2% EQU 0 (
  set /a LEAP_YEAR_CHECK=1
  ) else if %CONDITION3% NEQ 0 (
    set /a LEAP_YEAR_CHECK=1) else (
     set /a LEAP_YEAR_CHECK=0)) else (
    set /a LEAP_YEAR_CHECK=0)
::定義上個月的天數,如果是閏年,則2月份是29天,否則為28天
set LAST_MONTH_DAYS=0
if %LAST_MONTH% EQU 1 (set /a LAST_MONTH_DAYS=31)
if %LAST_MONTH% EQU 3 (set /a LAST_MONTH_DAYS=31)
if %LAST_MONTH% EQU 5 (set /a LAST_MONTH_DAYS=31)
if %LAST_MONTH% EQU 7 (set /a LAST_MONTH_DAYS=31)
if %LAST_MONTH% EQU 8 (set /a LAST_MONTH_DAYS=31)
if %LAST_MONTH% EQU 10 (set /a LAST_MONTH_DAYS=31)
if %LAST_MONTH% EQU 12 (set /a LAST_MONTH_DAYS=31)
if %LAST_MONTH% EQU 4 (set /a LAST_MONTH_DAYS=30)
if %LAST_MONTH% EQU 6 (set /a LAST_MONTH_DAYS=30)
if %LAST_MONTH% EQU 9 (set /a LAST_MONTH_DAYS=30)
if %LAST_MONTH% EQU 11 (set /a LAST_MONTH_DAYS=30)
if %LAST_MONTH% EQU 2 (if %LEAP_YEAR_CHECK% EQU 0 (set /a LAST_MONTH_DAYS=28) else (set /a LAST_MONTH_DAYS=29))
if %LAST_MONTH_DAYS% EQU 0 (goto END)
::定義最終的年
set BEFORE_YEAR=0
::定義最終的月
set BEFORE_MONTH=0
::定義最終的天
set BEFORE_DAY=0
::定義距離今天N天前的日期
set BN_DAYS_AGO=0
::*********************變數定義完成**********************************

::如果今天天數大於N
if %CURRENT_DAY% GTR %N% (
 set /a BEFORE_YEAR=%CURRENT_YEAR%)&(
 set /a BEFORE_MONTH=%CURRENT_MONTH%)&(
 set /a BEFORE_DAY=%CURRENT_DAY%-%N%
 ) else if %CURRENT_MONTH% NEQ 1 (
   set /a BEFORE_YEAR=%CURRENT_YEAR%)&(
   set /a BEFORE_MONTH=%LAST_MONTH%)&(
   set /a BEFORE_DAY=%LAST_MONTH_DAYS%-%N%+%CURRENT_DAY%
   ) else (
    set /a BEFORE_YEAR=%LAST_YEAR%)&(
    set /a BEFORE_MONTH=%LAST_MONTH%)&(
    set /a BEFORE_DAY=%LAST_MONTH_DAYS%-%N%+%CURRENT_DAY%)

if %BEFORE_MONTH% LSS 10 (set BEFORE_MONTH=0%BEFORE_MONTH%)
if %BEFORE_DAY% LSS 10 (set BEFORE_DAY=0%BEFORE_DAY%)
set /a BN_DAYS_AGO=%BEFORE_YEAR%%BEFORE_MONTH%%BEFORE_DAY%
::echo %BN_DAYS_AGO%
:END exit 0
::**************************獲得25天以前的日期*******************************
set today=%date:~0,10%
set before7=%BN_DAYS_AGO%

 

echo ******************************************************************** >> expsjsb.log
echo %today% %time:~0,8%: Starting. >> expsjsb.log
set timedir=%date:~0,4%%date:~5,2%%date:~8,2%
md D:\backup\%timedir%
if %ERRORLEVEL%==0 (echo %today% %time:~0,8%: 建立目錄D:\backup\%timedir%成功。>> expsjsb.log)&(goto NEXT)
if %ERRORLEVEL%==1 (echo %today% %time:~0,8%: 建立目錄D:\backup\%timedir%失敗或目錄已經存在。>> expsjsb.log)&(goto END)

:NEXT
echo %today% %time:~0,8%: 開始匯出資料檔案. >> expsjsb.log
exp system/system full=y file=E:\dmp\%timedir%\evsjsb%timedir%.dmp log=E:\dmp\%timedir%\evsjsb%timedir%.log
if %ERRORLEVEL%==0 (echo %today% %time:~0,8%: 資料匯出成功。>> expsjsb.log)&(goto SUC)
if %ERRORLEVEL%==1 (echo %today% %time:~0,8%: 資料匯出失敗。>> expsjsb.log)&(goto END)

:SUC
echo %today% %time:~0,8%: 刪除25天前的備份。>> expsjsb.log
if exist E:\dmp\%before7% GOTO EXIST
if not exist E:\dmp\%before7% GOTO NOEXIST

:EXIST
echo %today% %time:~0,8%: Delete the directory E:\dmp\%before7%. >> expsjsb.log
rd /s /q E:\dmp\%before25%
GOTO END

:NOEXIST
echo %today% %time:~0,8%: The directory E:\dmp\%before7% is not exist. >> expsjsb.log
GOTO END

:END
echo %today% %time:~0,8%: Quit. >> expsjsb.log
echo ******************************************************************** >> expsjsb.log
@echo on

-----------結束--------------

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/645199/viewspace-680932/,如需轉載,請註明出處,否則將追究法律責任。

相關文章