Oracle 数据库在 Windows2008 中的备份脚本
本文所使用的环境为:
操作系统:Windows server 2008 R2
数据库软件:oracle 11g 11.2.0.3
一、本地备份
本次项目的数据库备份使用 oracle 自带的 expdp 和 exp 工具,其中 expdp 又称为数据泵,
具有数据传输快,可使用多线程的特点。适用于大数据量的表和数据库。但只能在数据库服
务器本地使用。
使用方法参考下面的步骤:
1、 在备份文件所放置的硬盘下建立一个 db_backup 文件夹。如本次使用的目录为:
C:\db_backup。然后在数据库中设置该目录的虚拟目录:
create directory dir_dp as 'C:\db_backup';
本次创建的虚拟目录名为:dir_dp 本例子导出的用户使用的是 sys,所以不需要赋权。
如果是其他用户导出,则需要授予该目录的读写权限,如下语句:
Grant read,write on directory dir_dp to XXXX;
在 db_backup 文件夹下建立一个文本文档,如 expdp.txt,编辑该文档加入以下内容:
@echo off
set RAR_CMD="C:\Program Files\WinRAR\WinRAR.exe"
set FILENAME=oracle
set hour=%time:~,2%
if "%time:~,1%"==" " set hour=0%time:~1,1% //设置 dmp 的文件名以实时时间结尾
//产生的 dmp 文件名头一个字段
//rar 压缩程序安装位置
set
TIMESTYLE=%date:~0,4%-%date:~5,2%-%date:~8,2%-%hour%-%time:~3,2%-%time:~6,2%
set FILEPATH=%FILENAME%_%TIMESTYLE%.dmp
set LOGPATH=%FILENAME%_%TIMESTYLE%.log
set RARPATH=%FILENAME%_%TIMESTYLE%.rar
echo ============================================
echo 正在备份 Oracle 数据库,请稍等......
echo ============================================
expdp '/ as sysdba' directory=dir_dp dumpfile=%FILEPATH%
logfile=%LOGPATH%
//schemas 是数据库的某一用户名,按需要修改;
schemas=alfresco parallel=4
parallel 是任务的进程数,按服务器的性能适当修改
echo 备份完成!
echo ============================================
echo 压缩备份文件,请稍等......
echo ============================================
%RAR_CMD% a -df "%RARPATH%" "%FILEPATH%" "%LOGPATH%"
//将产生的备份
文件压缩
echo 压缩完成!
echo ============================================
echo 正在计算压缩文件数量.....
set
f=rar
for /f %%i in ('dir /b /s /a-d *.%f% ^| find "." /c') do set s=%%i
echo %f% 文件数量有:%s%
if %s% equ 8 (
for /f %%i in ('dir %p% /a-d *.%f% ^/b /od /tc') do del %%i /a /f &goto x
:x
echo 删除成功! //保留 7 天的备份文件,多于 7 天则删除前面的文件
)
注意:复制入文本后将红色字的注释全部删除!
复制完毕,并按实际情况修改好后将文本的后缀名改为 bat,即可双击试运行。如下图:
正常运行完毕后,产生一个 rar 压缩包。如下图:
有条件也可把这个包复制 7 个,再运行一次脚本验证是否只保留 7 个备份文件。
自此,expdp 脚本编译完成。
下面设置 Windows 2008 的任务计划程序,打开位置如下图:
创建一个任务:
新建一个触发器,每天 0 点开始启动脚本,启用项打钩:
这里输入脚本的位置。注意:“起始于”这项一定要填上脚本文件所在的目录,否则 rar
压缩程序将不能执行。
自此,expdp 在 Windows 2008 下的配置完成,可以将系统时间调到快接近 0 点,验证
自动备份是否正常。
二、网络备份
因数据库服务器本身空间不是很够,有可能会将数据备份产生的文件放到另外的计算机
设备上,这种情况下我们使用 exp 工具。此时的计算机设备应该能和数据库服务器联网,并
且能够登录数据库。自动备份脚本如下:
@echo off
set RAR_CMD="C:\Program Files\WinRAR\WinRAR.exe"
set USERNAME=alfresco
//目标数据库用户名
set PASSWORD=alfresco
//目标数据库用户密码
set SIDDISCRIBE=alfresco
//对目标数据库的监听配置名
set CONDETION1=%USERNAME%/%PASSWORD%@%SIDDISCRIBE%
set FILENAME=oradata
set hour=%time:~,2%
if "%time:~,1%"==" " set hour=0%time:~1,1%
set
TIMESTYLE=%date:~0,4%-%date:~5,2%-%date:~8,2%-%hour%-%time:~3,2%-%time:~6,2%
set FILEPATH=%FILENAME%_%TIMESTYLE%.dmp
set LOGPATH=%FILENAME%_%TIMESTYLE%.log
set RARPATH=%FILENAME%_%TIMESTYLE%.rar
echo ============================================
echo 正在备份 Oracle 数据库,请稍等......
echo ============================================
exp userid=%CONDETION1% file=%FILEPATH% log=%LOGPATH%
echo 备份完成!
echo ============================================
echo 压缩备份文件,请稍等......
echo ============================================
%RAR_CMD% a -df "%RARPATH%" "%FILEPATH%" "%LOGPATH%"
echo 压缩完成!
echo ============================================
echo 正在计算压缩文件数量.....
set
f=rar