1.默认获取本机IP(支持XP与WIN7系统获取IP)
2.可对远程服务器进行备份还原
3.多用户备份还原
4.操作时智能提示及IP验证
将以下代码另存为.bat格式文件。
@echo off
REM ======================================================
REM backup or revert ORCL database
REM ======================================================
echo -------------------------------------------------------------------------
echo backup or revert ORCL database
echo -------------------------------------------------------------------------
echo.
title BACKUP ORCL DATABASE
color 0a
set ORACLE_PASSWORD=ORCL
set DBUSER_SYSTEM=system
set BACKUP_DIR=%cd%
set TODAY=%date:~0,4%_%date:~5,2%_%date:~8,2%
rem user exists default 0(0.not exist,1.exist)
set USER_EXISTS=0
rem invalidIP is invalid IP labels,check IP validity,if the IP is invalid then set invalidIP=1
set invalidIP=0
set num=1
rem XP系统下获取IP
:XPIP
@echo off
setlocal enabledelayedexpansion
set "Space= "
set "IP_addr=%Space%IP Address"
for /f "tokens=1,* delims=." %%i in ('ipconfig /all') do (
for %%a in (IP_addr) do (
if "%%i"=="!%%a!" set %%a=%%j
)
)
Rem ===========对IP结果进行处理===========
set ORACLE_HOST=%IP_addr:*:=%
:ltrim
if "%ORACLE_HOST:~0,1%"==" " set ORACLE_HOST=%ORACLE_HOST:~1%&&goto ltrim
if not "%ORACLE_HOST%" equ "IP Address" goto doit
rem WIN7系统下获取IP
:WIN7IP
@echo off
setlocal enabledelayedexpansion
set "Space= "
set "IP_addr=%Space%IPv4 地址 "
for /f "tokens=1,* delims=." %%i in ('ipconfig /all') do (
for %%a in (IP_addr) do (
if "%%i"=="!%%a!" set %%a=%%j
)
)
Rem ===========对IP结果进行处理===========
set ORACLE_HOST=%IP_addr:*:=%
:delleft
if "%ORACLE_HOST:~0,1%"==" " set ORACLE_HOST=%ORACLE_HOST:~1%&&goto delleft
:delright
if "%ORACLE_HOST:~-5%"=="(首选) " set ORACLE_HOST=%ORACLE_HOST:~,-5%&&goto delright
goto doit
:doit
@echo off
if %invalidIP%==1 ( set /p ORACLE_HOST="【无效的IP,请重新输入IP】:") else (
if "%ORACLE_HOST%" equ "IPv4 地址 " (
set /p ORACLE_HOST="【获取IP失败,请手动输入安装服务器IP】:"
) else (
set /p ORACLE_HOST="【请输入安装服务器IP,回车默认IP:%ORACLE_HOST%】:"
)
)
if "%ORACLE_HOST%" equ "" goto doit
echo %ORACLE_HOST%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul||goto fail
set _inputIp=%ORACLE_HOST:.= %
call :checkIp %_inputIp%
:port
set /p ORACLE_PORT="【请输入数据库端口 回车默认[1521] 】:"
set /p ORACLE_DB="【请输入数据库实例名 回车默认[ORCL] 】:"
set /p SYSTEM_PWD="【请输入数据库system用户密码 回车默认[ORCL]】:"
if "%ORACLE_PORT%" equ "" ( set ORACLE_PORT=1521)
if "%ORACLE_DB%" equ "" ( set ORACLE_DB=ORCL)
if "%SYSTEM_PWD%" equ "" ( set SYSTEM_PWD=ORCL)
set BACK_NAME=%ORACLE_DB%_%TODAY%
:ChooseHandle
echo ┌─────────────────────┐
echo :: (1) exp ORCL data → 1 ::
echo :: (2) imp ORCL data → 2 ::
echo :: (E) Exit → E ::
echo └─────────────────────┘
echo.
:InputChoice
@echo off
echo ------------Do your choice-----------------
set /p chs=please input your choice :
echo ------------End of Choice------------------
echo.
if "%chs%" EQU "" goto InputChoice
if %chs% EQU 1 goto expInit
if %chs% EQU 2 goto impInit
if "%chs%"=="E" (
goto End
) else (
echo error choice, please input your choice again!
goto InputChoice
)
:expInit
set BACK_FULL_NAME=%BACKUP_DIR%\%BACK_NAME%
set BACK_TODAY_DMP=%BACK_FULL_NAME%\dmp
set BACK_TODAY_LOG=%BACK_FULL_NAME%\log
if not exist %BACKUP_DIR% mkdir %BACKUP_DIR%
if not exist %BACK_FULL_NAME% mkdir %BACK_FULL_NAME%
if not exist %BACK_TODAY_DMP% mkdir %BACK_TODAY_DMP%
if not exist %BACK_TODAY_LOG% mkdir %BACK_TODAY_LOG%
call :queryUser
:ESTEP1
:: user1
set ORACLE_USERNAME=user1
goto expData
:ESTEP2
:: user2
set ORACLE_USERNAME=user2
goto expData
:ESTEP3
:: user3
set ORACLE_USERNAME=user3
goto expData
:ESTEP4
:: user4
set ORACLE_USERNAME=user4
goto expData
:ESTEP5
:: user5
set ORACLE_USERNAME=user5
goto expData
:ESTEP6
:: user6
set ORACLE_USERNAME=user6
goto expData
:ESTEP7
:: user7
set ORACLE_USERNAME=user7
goto expData
:ESTEP8
:: user8
set ORACLE_USERNAME=user8
goto expData
:ESTEP9
goto compress
:expData
REM %BACK_FULL_NAME%_bat_exp.log
type "%BACKUP_DIR%"\select_orcl_user.log | findstr /i "%ORACLE_USERNAME%" >nul
if %errorlevel%==0 ( set USER_EXISTS=1 ) else (
set USER_EXISTS=0
)
if %USER_EXISTS%==1 (
echo ==================开始备份%ORACLE_HOST%服务器 %ORACLE_USERNAME%数据=================
echo ==================开始备份%ORACLE_HOST%服务器 %ORACLE_USERNAME%数据================= >>%BACK_FULL_NAME%_bat_exp.log
echo 当前的时间是: %DATE% %time%
echo 当前的时间是: %DATE% %time% >>%BACK_FULL_NAME%_bat_exp.log
exp %ORACLE_USERNAME%/%ORACLE_PASSWORD%@//%ORACLE_HOST%:%ORACLE_PORT%/%ORACLE_DB% buffer=64000 file=%BACK_TODAY_DMP%\%ORACLE_USERNAME%.dmp rows=Y STATISTICS=none compress=N log=%BACK_TODAY_LOG%\%ORACLE_USERNAME%_exp.log
echo ==================备份%ORACLE_HOST%服务器 %ORACLE_USERNAME%数据完成=================
echo ==================备份%ORACLE_HOST%服务器 %ORACLE_USERNAME%数据完成================= >>%BACK_FULL_NAME%_bat_exp.log
) else (
echo %ORACLE_HOST%服务器 %ORACLE_USERNAME%用户不存在
echo %ORACLE_HOST%服务器 %ORACLE_USERNAME%用户不存在 >>%BACK_FULL_NAME%_bat_exp.log
)
set /a num=%num%+1
goto ESTEP%num%
:compress
echo .
echo 备份完成!
echo 备份完成! >>%BACK_FULL_NAME%_bat_exp.log
echo 当前的时间是: %DATE% %time% >>%BACK_FULL_NAME%_bat_exp.log
move %BACK_FULL_NAME%_bat_exp.log %BACK_FULL_NAME%
echo .
goto End
:impInit
set REVERT_TODAY_LOG=%BACKUP_DIR%\%BACK_NAME%\implog
set /p REVERT_PATH=please input revert path;enter default path[%BACKUP_DIR%\%BACK_NAME%\dmp]:
if "%REVERT_PATH%" equ "" ( set REVERT_PATH=%BACKUP_DIR%\%BACK_NAME%\dmp)
if not exist %REVERT_TODAY_LOG% mkdir %REVERT_TODAY_LOG%
call :queryUser
REM imp tools
:ISTEP1
:: user1
set ORACLE_USERNAME=user1
goto impData
:ISTEP2
:: user2
set ORACLE_USERNAME=user2
goto impData
:ISTEP3
:: user3
set ORACLE_USERNAME=user3
goto impData
:ISTEP4
:: user4
set ORACLE_USERNAME=user4
goto impData
:ISTEP5
:: user5
set ORACLE_USERNAME=user5
goto impData
:ISTEP6
:: user6
set ORACLE_USERNAME=user6
goto impData
:ISTEP7
:: user7
set ORACLE_USERNAME=user7
goto impData
:ISTEP8
:: user8
set ORACLE_USERNAME=user8
goto impData
:ISTEP9
goto impLastOperation
:impData
REM ORACLE_DB%_%TODAY%_bat_imp.log
type "%BACKUP_DIR%"\select_orcl_user.log | findstr /i "%ORACLE_USERNAME%" >nul
if %errorlevel%==0 ( set USER_EXISTS=1 ) else (
set USER_EXISTS=0
)
if %USER_EXISTS%==1 (
echo ==================开始还原%ORACLE_HOST%服务器 %ORACLE_USERNAME%数据=================
echo ==================开始还原%ORACLE_HOST%服务器 %ORACLE_USERNAME%数据================= >>%ORACLE_DB%_%TODAY%_bat_imp.log
echo 当前的时间是: %DATE% %time%
echo 当前的时间是: %DATE% %time% >>%ORACLE_DB%_%TODAY%_bat_imp.log
imp %ORACLE_USERNAME%/%ORACLE_PASSWORD%@//%ORACLE_HOST%:%ORACLE_PORT%/%ORACLE_DB% full=y buffer=64000 file=%REVERT_PATH%\%ORACLE_USERNAME%.dmp rows=Y ignore=Y log=%REVERT_TODAY_LOG%\%ORACLE_USERNAME%_imp.log
echo ==================还原%ORACLE_HOST%服务器 %ORACLE_USERNAME%数据完成=================
echo ==================还原%ORACLE_HOST%服务器 %ORACLE_USERNAME%数据完成================= >>%ORACLE_DB%_%TODAY%_bat_imp.log
) else (
echo %ORACLE_HOST%服务器 %ORACLE_USERNAME%用户不存在
echo %ORACLE_HOST%服务器 %ORACLE_USERNAME%用户不存在 >>%ORACLE_DB%_%TODAY%_bat_imp.log
)
set /a num=%num%+1
goto ISTEP%num%
:impLastOperation
echo .
echo 还原完成!
echo 还原完成! >>%ORACLE_DB%_%TODAY%_bat_imp.log
echo 当前的时间是: %DATE% %time% >>%ORACLE_DB%_%TODAY%_bat_imp.log
echo %ORACLE_DB%_%TODAY%_bat_imp.log %BACKUP_DIR%\%BACK_NAME%
move %ORACLE_DB%_%TODAY%_bat_imp.log %BACKUP_DIR%\%BACK_NAME%
echo .
goto End
:queryUser
@echo off
echo set linesize 500;>>select_orcl_user.sql
echo show user;>>select_orcl_user.sql
echo SELECT USERNAME FROM ALL_USERS;>>select_orcl_user.sql
echo exit;>>select_orcl_user.sql
sqlplus "%DBUSER_SYSTEM%/%SYSTEM_PWD%@//%ORACLE_HOST%:%ORACLE_PORT%/%ORACLE_DB%" @"%BACKUP_DIR%"\select_orcl_user.sql >select_orcl_user.log
if %chs% EQU 1 goto ESTEP1
if %chs% EQU 2 goto ISTEP1
:checkIp
if "%4"=="" goto fail
for %%i in (%1 %2 %3 %4) do (
if %%i gtr 255 goto fail
)
goto port
:fail
set invalidIP=1
goto doit
:END
echo.
endlocal
del /f/q "%BACKUP_DIR%"\select_orcl_user.sql
del /f/q "%BACKUP_DIR%"\select_orcl_user.log
pause
exit