Oracle 数据库定时备份(Windows 计划任务 + Bat 脚本)
前言
在实际开发中,数据库需要定期备份以防止数据丢失。手动备份不仅繁琐,而且容易遗忘。本文介绍如何利用 Windows 计划任务配合 Bat 脚本,实现 Oracle 数据库的自动定时备份,并在备份后自动压缩、清理旧文件。
整体思路
- 编写一个 Bat 脚本,使用 Oracle 的
exp命令导出数据库为.dmp文件,同时生成日志文件。 - 使用压缩工具(如 Bandizip)将导出的文件打包成 ZIP 压缩包。
- 删除原始导出文件(.dmp 和 .log),仅保留压缩包。
- 自动删除 30 天前的旧压缩包,释放磁盘空间。
- 通过 Windows 计划任务定期执行该脚本。
Bat 脚本内容
创建一个文本文件,将以下内容复制进去,并修改后缀名为 .bat(例如 OracleBackup.bat):
:: 将代码页更改为 UTF-8,避免中文乱码
chcp 65001 >nul
@echo off
echo =============== 开始导出数据库文件及日志文件 ===============
:: 使用 exp 导出(请根据实际情况修改连接字符串和路径)
exp system/1234@127.0.0.1:1521/orcl file=G:\backup\orcl_%date:~0,4%%date:~5,2%%date:~8,2%.dmp log=G:\backup\orcl_%date:~0,4%%date:~5,2%%date:~8,2%.log
echo =============== 开始压缩导出的数据库文件及日志文件 ===============
:: 使用 Bandizip 压缩(请根据实际安装路径修改)
"D:\Bandizip\Bandizip.exe" c "G:\backup\%date% %time:~0,2%时%time:~3,2%分.zip" "G:\backup\orcl_%date:~0,4%%date:~5,2%%date:~8,2%.dmp" "G:\backup\orcl_%date:~0,4%%date:~5,2%%date:~8,2%.log"
echo =============== 开始删除导出的原始文件 ===============
del G:\backup\*.dmp
del G:\backup\*.log
echo =============== 自动备份完成 ===============
:: 删除 30 天前的旧压缩包
forfiles /p "G:\backup" /s /m *.zip /d -30 /c "cmd /c del @path"
:: 延迟关闭窗口(便于查看执行结果)
ping 127.0.0.1 -n 30 >nul
exit

脚本关键点说明
| 部分 | 说明 |
|---|---|
chcp 65001 |
设置控制台代码页为 UTF-8,防止中文乱码。 |
exp 命令 |
Oracle 导出工具,需提前配置好环境变量。参数格式:exp 用户名/密码@主机:端口/服务名 file=路径 log=路径。 本例中文件命名使用了当前日期:%date:~0,4%(年)、%date:~5,2%(月)、%date:~8,2%(日)。 |
| Bandizip 压缩 | 调用 Bandizip 命令行工具将两个文件打包成 ZIP,压缩包命名包含日期和时间(时、分)。 注意:如果使用其他压缩工具(如 WinRAR、7-Zip),需替换相应命令。 |
del 删除 |
删除导出的 .dmp 和 .log 文件,仅保留压缩包。 |
forfiles 清理旧文件 |
遍历 G:\backup 文件夹,删除 30 天前(/d -30)的所有 .zip 文件。 /s 表示包括子文件夹,可根据需要调整。 |
ping 127.0.0.1 -n 30 |
利用 ping 自身实现延时 30 秒,便于查看执行结果,避免窗口一闪而 |
提示:请根据实际环境修改以下内容:
- Oracle 连接字符串(用户名/密码/主机/端口/服务名)
- 备份文件存放路径(
G:\backup)- Bandizip 的安装路径
- 保留天数(
/d -30中的 30)
测试文件效果
配置 Windows 计划任务
-
打开计划任务
进入 控制面板 → 系统和安全 → 计划任务(或在运行中输入taskschd.msc)。
-
创建基本任务
-
在右侧操作栏点击 创建基本任务。
-
输入任务名称(如“Oracle定时备份”),点击下一步。
-
设置触发器(例如每天、每周等),根据业务需求选择备份频率,点击下一步。
-
设置开始时间和日期,建议选择系统负载较低的时间段(如凌晨)。
-
-
指定操作
-
操作类型选择 启动程序。
-
在“程序或脚本”中点击浏览,选择刚才创建的
.bat文件。
-
点击完成。
-
-
测试任务
-
在任务列表中找到刚创建的任务,右键点击 运行,检查备份目录是否生成文件,确认脚本执行正常。
-
也可临时将触发时间设置为当前时间后几分钟,观察任务是否按时执行。
-
注意事项
- Oracle 客户端环境:运行脚本的机器需安装 Oracle 客户端,并确保
exp命令可用(通常位于$ORACLE_HOME/bin或已添加到 PATH 环境变量)。 - 权限问题:脚本中涉及文件删除,请确保运行计划任务的用户对备份目录有读写/删除权限。
- 压缩工具路径:如果 Bandizip 安装在非默认路径,请务必修改脚本中的路径;若未安装 Bandizip,可改用其他命令行压缩工具(如 7-Zip 的
7z命令)。 - 日志查看:若执行失败,可将脚本中的
@echo off临时注释掉,或在命令后添加>> backup.log 2>&1将输出重定向到日志文件,便于排查错误。 - 时间变量格式:
%date%和%time%的格式受系统区域设置影响,建议先在命令行中执行echo %date%和echo %time%查看实际格式,再调整截取下标。
扩展建议
- 如果数据库较大,导出时间较长,可考虑在任务计划中设置“如果任务运行时间超过 X 小时则停止”。
- 可增加邮件通知功能,在脚本末尾添加发送邮件的命令(如使用
blat或 PowerShell),以便及时了解备份结果。 - 对于生产环境,建议定期从备份服务器恢复数据测试,确保备份文件可用。

浙公网安备 33010602011771号