马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Oracle 数据文件、业务目录要定期备份,还得定期清掉老备份免得把磁盘撑爆。Windows 上最省事的方案:两个 .bat + 任务计划程序。一个负责备份,一个负责删三天前的目录, scheduled 起来就全自动了。
一、备份脚本
存成 D:\sql\oracle\win-backup.bat:
@echo off
setlocal enabledelayedexpansion
:: 设置字符集为 UTF-8,控制台才能正常显示中文
chcp 65001
:: 源文件夹和目标文件夹
set "source_folder=D:\sql\oracle\oracle文档"
set "destination_folder=D:\sql\oracle\win-backup"
:: 目标文件夹不存在就创建
if not exist "%destination_folder%" mkdir "%destination_folder%"
:: 取当前日期时间,用来做备份目录名
for /f "tokens=2 delims==" %%a in ('wmic OS Getlocaldatetime /value') do set "dt=%%a"
set "YY=!dt:~2,2!" & set "YYYY=!dt:~0,4!"
set "MM=!dt:~4,2!" & set "DD=!dt:~6,2!"
set "HH=!dt:~8,2!" & set "Min=!dt:~10,2!"
set "Sec=!dt:~12,2!"
set "backup_folder=%destination_folder%\%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
:: 创建备份文件夹
mkdir "!backup_folder!"
:: 用 xcopy 复制文件夹及其内容
xcopy /E /I /Y "%source_folder%" "!backup_folder!\"
echo Backup completed: !backup_folder!
endlocal
pause
几个关键点
setlocal enabledelayedexpansion + !变量!:循环体里改变量必须开延迟扩展,不然读到的是旧值;
chcp 65001:让控制台正确显示中文,缺了会乱码;
wmic OS Getlocaldatetime /value 取出来的串形如 20261003104512.xxxxxx+xxx,靠字符串切片 !dt:~0,4! 这种截取年月日时分秒;
xcopy /E /I /Y:E 含空目录、I 目标是目录时按目录处理、Y 覆盖不确认,全自动场景这三个都得带。
二、删除备份脚本
存成 D:\sql\oracle\win-delete.bat,删掉三次备份之前的目录:
@echo off
setlocal
chcp 65001
:: 备份文件夹路径
set "backup_folder=D:\sql\oracle\win-backup"
:: 调 PowerShell 删三天前的目录
powershell -Command "$limit_date=(Get-Date).AddDays(-3); Get-ChildItem -Path '%backup_folder%' -Directory -Recurse | Where-Object { $_.LastWriteTime -lt $limit_date } | Remove-Item -Recurse -Force; Write-Host 'Deleted backup folders older than 3 days.'"
echo Deleted backup folders older than 3 days.
endlocal
pause
核心就一句 PowerShell:算出三天前的时间点,Get-ChildItem 列出目录、按 LastWriteTime 过滤、超期的 Remove-Item -Recurse -Force 删掉。时间戳用 LastWriteTime 判断比按目录名解析日期稳妥。
三、挂定时任务
步骤 1:打开任务计划程序
右键 win10「此电脑」→ 管理 → 计算机管理 → 任务计划程序。
步骤 2:建文件夹
任务计划程序库 → 右键新建文件夹,命名 mywinbackup(方便归类一眼看到)。
步骤 3:建备份任务
- 常规:名称自定义,勾使用最高权限运行(备份 Oracle 目录需要权限);
- 触发器 → 新建触发器,按需要设每天几点执行;
- 操作 → 新建操作,程序选上面建的
.bat,「起始于」填该 bat 所在目录(不填的话脚本里相对路径会跑偏);
- 设置:勾选「过了操作开始时间,立刻执行」,最后确定。
步骤 4:删备份任务
同上,完全一样的操作再来一遍——指到 win-delete.bat 就行。
四、踩坑提醒
- 批处理里中文乱码:文件保存编码要和
chcp 对上,UTF-8 保存 + chcp 65001;老记事本默认 ANSI,会显示成方块。
- 脚本双击能跑、定时任务跑不动:八成是「起始于」路径没填,或者没勾最高权限。
- 备份目录名带空格导致解析出错:全程
"%变量%" 加引号,别偷懒。
- 删太快没留回滚机会:生产环境把
-3 天改长一点(7 或 14),先观察一段时间。
- 别在 bat 里留 pause:定时任务执行时不会有交互窗口,pause 会让进程挂在那儿。
总结
Windows 定时备份方案就两块:一个 xcopy /E /I /Y 的备份 bat(目录名按时间戳自动带日期),一个调 PowerShell 按 LastWriteTime 删老目录的 bat,再用任务计划程序挂起来,记得勾「最高权限运行」和填「起始于」。删之前先放宽保留天数,真出事还有窗口。
qidao123.com企服评测-应用市场 编辑提示 |