1. 程式人生 > >bat命令備份oracle資料庫,並且刪除7天之前的資料檔案

bat命令備份oracle資料庫,並且刪除7天之前的資料檔案

用批處理命令備份oracle資料庫,我是用在windows server 2008 伺服器上,並且建立了定時任務,讓他7天執行一次.下面貼出程式碼:

@echo off
echo ================================================ 
echo  Windows環境下Oracle資料庫的自動備份指令碼
echo  1. 使用當前日期命名備份檔案。
echo  2. 自動刪除7天前的備份。
echo ================================================
::以“YYYYMMDD”格式取出當前時間。
set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%
set CURTIME=%time:~0,2%
REM 小時數如果小於10,則在前面補0
if "%CURTIME%"==" 0" set CURTIME=00
if "%CURTIME%"==" 1" set CURTIME=01
if "%CURTIME%"==" 2" set CURTIME=02
if "%CURTIME%"==" 3" set CURTIME=03
if "%CURTIME%"==" 4" set CURTIME=04
if "%CURTIME%"==" 5" set CURTIME=05
if "%CURTIME%"==" 6" set CURTIME=06
if "%CURTIME%"==" 7" set CURTIME=07
if "%CURTIME%"==" 8" set CURTIME=08
if "%CURTIME%"==" 9" set CURTIME=09
set CURTIME=%CURTIME%%time:~3,2%%time:~6,2%
 
::設定使用者名稱、密碼和要備份的資料庫。
set USER=sjpt
set PASSWORD=sjpt
set DATABASE=orcl
set nls_lang=american_america.al32utf8
::建立備份目錄。
if not exist "D:\backup\data\%BACKUPDATE% "     mkdir D:\backup\data\%BACKUPDATE%
if not exist "D:\backup\log\%BACKUPDATE% "      mkdir D:\backup\log\%BACKUPDATE%
set DATADIR=D:\backup\data\%BACKUPDATE%
set LOGDIR=D:\backup\log\%BACKUPDATE%
set DELDATADIR=D:\backup\data
set DELLOGDIR=D:\backup\log
::exp %USER%/%PASSWORD%@%DATABASE%  file=%DATADIR%\%USER%_%BACKUPDATE%%CURTIME%.dmp log=%LOGDIR%\log_%BACKUPDATE%%CURTIME%.log
echo 資料庫檔案備份成功,所在目錄為: %DATADIR%
echo 正在查詢舊備份檔案建立時間...
::刪除30天前的備份。
::先判斷要刪除的檔案是否存在
for /r %DELDATADIR% %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tc "%%a" ^| find /i "%%~nxa"'
) do (
echo "%%b %%c"
set /a dataCount+=1
)
for /r %DELLOGDIR% %%a in (*) do for /f "tokens=1,2* delims= " %%b in (
'dir /tc "%%a" ^| find /i "%%~nxa"'
) do (
echo "%%b %%c"
set /a logCount+=1
)
if %dataCount% gtr 1 goto beginCleandata
:iscleanlog
if %logCount% gtr 1 goto beginCleanlog
if %dataCount% equ 1 goto end
if %logCount% equ 1 goto end
::刪除檔案、刪除空資料夾
:beginCleandata
forfiles /p "%DELDATADIR%" /s /m *.* /d -7 /c "cmd /c del @path"
for /f "tokens=*" %%a in ('dir /b /ad /s "%DELDATADIR%"^|sort /r') do rd "%%a"
goto iscleanlog
:beginCleanlog
forfiles /p "%DELLOGDIR%" /s /m *.* /d -7 /c "cmd /c del @path"
for /f "tokens=*" %%a in ('dir /b /ad /s "%DELLOGDIR%"^|sort /r') do rd "%%a"
echo 舊備份檔案刪除成功!
pause
exit
:end
echo 無舊備份檔案。
echo 執行成功。
pause