Oracle 数据库定时备份(Windows 计划任务 + Bat 脚本)

前言

在实际开发中,数据库需要定期备份以防止数据丢失。手动备份不仅繁琐,而且容易遗忘。本文介绍如何利用 Windows 计划任务配合 Bat 脚本,实现 Oracle 数据库的自动定时备份,并在备份后自动压缩、清理旧文件。


整体思路

  1. 编写一个 Bat 脚本,使用 Oracle 的 exp 命令导出数据库为 .dmp 文件,同时生成日志文件。
  2. 使用压缩工具(如 Bandizip)将导出的文件打包成 ZIP 压缩包。
  3. 删除原始导出文件(.dmp 和 .log),仅保留压缩包。
  4. 自动删除 30 天前的旧压缩包,释放磁盘空间。
  5. 通过 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

image-20240509145109383

脚本关键点说明

部分 说明
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)

测试文件效果

image-20240509154500501

配置 Windows 计划任务

  1. 打开计划任务
    进入 控制面板系统和安全计划任务(或在运行中输入 taskschd.msc)。

    image-20240509155737560
  2. 创建基本任务

    • 在右侧操作栏点击 创建基本任务

      image-20240509161105686
    • 输入任务名称(如“Oracle定时备份”),点击下一步。

    • 设置触发器(例如每天、每周等),根据业务需求选择备份频率,点击下一步。

    • 设置开始时间和日期,建议选择系统负载较低的时间段(如凌晨)。

  3. 指定操作

    • 操作类型选择 启动程序

    • 在“程序或脚本”中点击浏览,选择刚才创建的 .bat 文件。

      image-20240509161626501
    • 点击完成。

  4. 测试任务

    • 在任务列表中找到刚创建的任务,右键点击 运行,检查备份目录是否生成文件,确认脚本执行正常。

    • 也可临时将触发时间设置为当前时间后几分钟,观察任务是否按时执行。

      image-20240509162209749

注意事项

  • 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),以便及时了解备份结果。
  • 对于生产环境,建议定期从备份服务器恢复数据测试,确保备份文件可用。
posted @ 2024-05-09 17:07  克峰同学  阅读(122)  评论(0)    收藏  举报