博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

Oracle数据库自动备份脚本

Posted on 2011-04-21 14:37  codingsilence  阅读(558)  评论(0编辑  收藏  举报

因项目需要,要整出个每天自动备份Oracle数据库的脚本,在参考了网上的相关资料,结合Windows自带的任务计划功能,基本能满足需求。相关代码如下:

view plaincopy to clipboardprint?
@echo off  
REM ###########################################################  
REM # Windows Server 2003下Oracle数据库自动备份批处理脚本  
REM ###########################################################  
REM 取当前系统时间,可能因操作系统不同而取值不一样  
set CURDATE=%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%  
REM 设置所有者、用户名和密码  
set OWNER=DBUSER  
set USER=DBUSER  
set PASSWORD=DBPWD  
REM 创建备份用目录,目录结构为backup/YYYYMMDD/  
if not exist "backup"                     mkdir backup  
if not exist "backup/%CURDATE%/"          mkdir backup/%CURDATE%/  
set CURDIR=backup/%CURDATE%  
set FILENAME=%CURDIR%/%OWNER%_%CURDATE%_%CURTIME%.DMP  
set EXPLOG=%CURDIR%/%OWNER%_%CURDATE%_%CURTIME%_log.log  
REM 调用ORACLE的exp命令导出用户数据  
exp %USER%/%PASSWORD%@DBSample file=%FILENAME% log=%EXPLOG% owner=%OWNER% grants=n  
exit  
@echo off
REM ###########################################################
REM # Windows Server 2003下Oracle数据库自动备份批处理脚本
REM ###########################################################
REM 取当前系统时间,可能因操作系统不同而取值不一样
set CURDATE=%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%
REM 设置所有者、用户名和密码
set OWNER=DBUSER
set USER=DBUSER
set PASSWORD=DBPWD
REM 创建备份用目录,目录结构为backup/YYYYMMDD/
if not exist "backup"              mkdir backup
if not exist "backup/%CURDATE%/"     mkdir backup/%CURDATE%/
set CURDIR=backup/%CURDATE%
set FILENAME=%CURDIR%/%OWNER%_%CURDATE%_%CURTIME%.DMP
set EXPLOG=%CURDIR%/%OWNER%_%CURDATE%_%CURTIME%_log.log
REM 调用ORACLE的exp命令导出用户数据
exp %USER%/%PASSWORD%@DBSample file=%FILENAME% log=%EXPLOG% owner=%OWNER% grants=n
exit 

其中,%USER%/%PASSWORD%@DBSample中的DBSample为连接数据库的实例名称;grants=n表示导出数据时不导出对表/视图/序列/角色的授权

然后再结合Windows自带的“任务计划”,设置于每天夜里1点钟或其他时间自动运行,便可达到每天自动备份指定数据库的目的了!

附相关代码知识点:

1、@echo off:DOS在运行批处理时,会依次执行批处理中的每条命令,并且会在显示器上显示,如果你不想让它们显示,可以加一个“echo off”。当然,“echo off”也是命令,它本身也会显示,如果连这条也不显示,就在前面加个“@”

2、批处理获取当前日期时间:%time:~0,2%:“:”(冒号)和“~”波浪号必不可少,“~”后的数字:为正数表示舍弃输出结果的前几位;直接跟负数表示取到输出结果的后第几位;“,”后的数字:为正数表示取到输出结果的前第几位;为负数表示舍弃输出结果的后几位。如想获取当前系统时间的HHMMSS格式,则可以成%time:~0,2%%time:~3,2%%time:~6,2%

3、imp、exp非交互式命令行方式使用方法:exp 用户名/密码@实例名 file=路径/文件名.dmp owner=用户名, imp 用户名/密码@实例名 fromuser=导出时用的用户名 touser=用户名 file=路径/文件名.dmp

如果备份的文件太大,可以使用WinRAR带命令行的格式调用WinRAR压缩备份的文件,具体代码如下:

view plaincopy to clipboardprint?
CD %CURDATE%  
"C:/Program Files/WinRAR/WinRAR.exe" a -df %PREFIX%_%CURDATE%_%CURTIME%.rar * -r 
CD %CURDATE%
"C:/Program Files/WinRAR/WinRAR.exe" a -df %PREFIX%_%CURDATE%_%CURTIME%.rar * -r

首先进行已备份文件的目录中,调用系统安装的WinRAR的命令行格式,带上相关参数,即可。