喜鹊软件数据库备份工具,SQL Server 自动备份与定时计划
喜鹊软件数据库备份工具,SQL Server 自动备份与定时计划

喜鹊软件数据库备份工具是一款面向 SQL Server 的轻量化自动备份工具。它把“备份哪些库、备份到哪个目录、什么时候备份、备份文件留多久、历史上留过哪些”这五件事收进一个体积不到 10 MB 的桌面程序里:勾选数据库、设定时间节点、开机常驻即可,不必在服务器上配置维护计划,也不必再维护一份没人看的备份脚本。
程序基于 .NET 8 开发,备份过程全程有状态栏进度条,每一次备份(成功或失败)都会写进 SQLite 备份日志,可在【备份历史记录】页按日期与关键字追溯、勾选清理。
目录
一、它解决什么问题
多数中小型业务系统的数据库备份,实际都处在下面四种状态之一,各有各的隐患:
- 靠 SQL Server 维护计划:Express 版根本没有 SQL Server 代理,维护计划配不了;就算是企业版,配置分散在 SSMS 里,换一台服务器就要重配一遍。
- 靠人手工备份:节假日、出差、交接期最容易断档;文件名随手起,真要找“上周三那一份”时根本定位不到。
- 靠脚本定时跑:能跑,但没人看结果——失败了没有告警,成功了也没有台账,时间一长就变成“不知道到底有没有在备份”。
- 备份是否真的可恢复,没人验证过:这是最要命的一条,往往等到真正需要恢复时才发现备份文件本身就是坏的。
本工具的定位很直白:把数据库备份从“偶尔做一次的手工活”,变成一件有台账、可追溯、有人盯的日常事务——到点自己跑,跑完自己记账,坏了自己告诉你。
二、核心功能一览
| 功能模块 | 能力 | 说明 |
|---|---|---|
| 数据库列表 | 多库勾选 | 从实例拉取用户库(自动排除系统库与离线库),可多选;配置项里勾过的库,下次刷新按名字自动回勾 |
| 连接与认证 | 端口 + 两种认证 | 服务器地址可带端口(0 = 不指定);支持 SQL Server 身份验证(sa + 密码),也可勾选Windows 身份验证走集成安全 |
| 备份目录 | 双目录冗余 | 目录 1 必填、目录 2 可留空;填了两个目录时,每个库各备份一份(本地盘 + 移动盘 / 异地目录) |
| 备份执行 | BACKUP DATABASE | 逐库 × 逐目录执行,WITH STATS = 5 回传进度;单个库失败不中断,最后一次性汇总 |
| 备份后处理 | 压缩 + 过期清理 | 压成同名 zip(压缩成功才删 .bak,失败保留原文件);按保留天数自动清理过期备份文件 |
| 定时计划 | 每天 / 指定星期 | 到点自动跑一次无人值守备份:不弹任何框,结果写状态栏 + 托盘气泡 + 日志 |
| 实时倒计时 | 工具栏常驻 | 右侧每秒刷新“距自动备份还有 X 小时 Y 分 Z 秒”,与实际触发共用同一套算法 |
| 备份日志 | SQLite 台账 | 每次备份写一条:备份时间 / 数据库名 / 文件名 / 完整路径 / 文件大小 / 是否压缩 / 成败 / 失败原因 |
| 历史记录 | 查询与清理 | 日期范围 + 关键字(库名 / 文件名 / 路径)模糊检索;可勾选删除,先删文件再删记录 |
| 系统托盘 | 开机启动常驻 | 最小化到托盘,【系统设置】页可勾选开机启动,实现长期无人值守 |
| 可靠性 | 校验 / 预检 / 看门狗 | 见本文第六节 |

三、备份配置:一次配好,长期不管
3.1 连接数据库:地址、端口与两种认证方式
右栏第一行填服务器地址与端口,点【测试连接】连通后,程序会自动加载该实例下的数据库列表并按配置回勾此前勾选过的库,省去每次重新勾选。
认证方式二选一:默认 SQL Server 身份验证(登录名 + 密码);勾选【Windows 身份验证】后改用集成安全连接,以当前登录的 Windows 账号连库,登录名与密码自动置灰。
两个实测会卡住的点:
① 填了端口时,程序会自动把 localhost / . 替换成 127.0.0.1
② 1434 是 DAC 专用保留端口,实例端口填成 1434 时备份会被拒绝(专用管理员连接下禁止并行操作)。
3.2 多库选择与双目录冗余
左侧列表勾选要备份的库,右侧填备份目录。文件名统一为 库名_yyyyMMdd.bak(压缩后为同名 .zip),例如 AIS20210906162930_20261010.bak——固定格式的好处是:清理时能准确识别“哪些是本工具生成的”,不会误删别人手工拷进来的备份。
目录 2 建议留给第二块物理盘或移动硬盘:两个目录都填时,每个库会在两个目录各落地一份,本地盘故障时还有一份可恢复。
3.3 备份后压缩与过期清理
勾选【备份后压缩】后,备份完成会压成 zip,压缩成功才删除原 .bak(压缩失败则保留 .bak,不至于两头空);【删除 n 天之前的备份文件】填 0 表示不清理,填 7 表示每次备份完成后自动清理 7 天前的文件。
凡是涉及删文件的逻辑,都做了三重保险:
- 只删本工具生成的文件(按文件名格式识别),备份目录里手工拷入的 .bak 不会被误伤;
- 本次备份没有任何一项成功时,直接跳过清理——否则停机一周再开机,会把仅存的老备份删光;
- 按“目录 × 数据库”分组,每库保底留最近 2 份,连续失败也不会被清空。
四、定时自动备份(无人值守)
4.1 周期与时间节点
在【备份配置】页勾选周期(每天,或指定周一至周日中的某几天)并填写备份时间(HH:mm,默认 23:59),保存后即生效。到点时程序自动跑一次备份,规则上有两条刻意的取舍:
- 同一时间节点只触发一次:以“日期 + 时分”作为节点标识,同一分钟内的 60 次检查不会重复触发;
- 不做补跑:启动时时间点已过也不会追补——否则顺手打开一次工具就可能灌出一堆备份文件。需要补跑,点【开始备份】手动执行。
验证链路不用真等到半夜:启动时加参数 --simulate-schedule,会立刻模拟一次“到点触发”,走的是与真实触发完全相同的无人值守路径。
4.2 工具栏实时倒计时
工具栏右侧常驻一行倒计时:距自动备份还有 X 小时 Y 分 Z 秒,每秒刷新;超过一天会自动带上天数。它显示的下一次时刻,与状态栏提示、与实际触发判定共用同一个算法,不会出现“界面说还有 10 分钟、实际 10 分钟后没跑”的两套口径;改动周期或时间点后,下一秒就会跟着变。
三种特殊状态也有明确提示:备份进行中显示“备份进行中…”;没有勾选任何周期时提示未设置周期;备份时间格式填写错误时提示应为 HH:mm。
4.3 开机启动与托盘通知
定时计划只在工具运行期间有效,因此长期无人值守的做法是:到【系统设置】页勾选开机启动,工具随系统启动并驻留托盘,到点自行备份。
无人值守路径下一个模态框都不弹——半夜弹出的确认框没人点,线程会一直卡在那里,后面几天的备份全废。备份结果通过三种方式告知:状态栏文字、托盘气泡通知、以及写入备份日志。
五、备份日志与历史记录追溯
每一次备份(含失败)都会写进程序目录下的 backuplog.db(SQLite),字段包括备份时间、数据库名、备份文件名、完整路径、文件大小、是否压缩、是否成功、失败原因。日志单独成库而不写进配置文件,是因为它是只增的时间序列数据,与配置文件(通常与其他服务共用)混写既越写越大,语义也不对。
【备份历史记录】页可按日期范围 + 关键字(对数据库名 / 文件名 / 完整路径模糊匹配)检索,结果直接列出备份时间、库名、文件名、大小、成败与完整路径;需要清理时可勾选删除,删除顺序是先删文件、再删记录,避免出现“记录没了、文件还在占空间”或“文件没了、记录还显示存在”的错位。
这套台账解决的其实是一个管理问题:随时能回答“过去一个月每天都备份了吗”“上周三那一份多大、在哪个目录”“哪一次失败过、失败原因是什么”。

六、为生产环境做的可靠性设计
备份工具最怕的不是“报错”,而是静默失效——界面看着一切正常,实际已经好几天没备份成功。针对这类问题做了以下处理:
| 机制 | 作用 |
|---|---|
| RESTORE VERIFYONLY 校验 | 备份文件落盘后先做一次恢复校验,坏备份不会被记成成功 |
| .part 中转转正 | 先写临时文件、写完再 Move 成正式文件,避免写入中断留下“看起来存在、实际是坏的”备份 |
| 磁盘空间预检 | 按上次成功体积 × 1.1 预估,空间不足提前拦下并提示,不写到一半才失败 |
| 6 小时命令超时 + 8 小时看门狗 | 一次备份卡死后自动复位忙标记并告警,避免“卡一次,之后所有自动备份全部静默跳过” |
| 单实例保护 | Mutex 保证只有一个实例运行,第二个实例会把已运行的窗口唤到前台,防止两实例并发写同一文件 |
| 全局异常兜底 + 滚动日志 | 自绘界面抛异常不会静默崩;运行日志按月滚动保留(logs\backup-yyyyMM.log) |
| 距上次成功备份提醒 | 状态栏常驻“距上次成功备份已 N 天”,长期没成功会主动提醒 |
| 清理保底策略 | 同 3.3:只删自己的文件、本次无成功不清理、每库保底留最近 2 份 |

七、运行环境与部署注意事项
- 系统:Windows 10 及以上(Windows 11 下圆角与窗口投影效果更佳);基于 .NET 8,目标机需 .NET 8 桌面运行时,也可按自包含方式发布后直接拷贝使用。
- 部署形态:绿色部署,程序目录下只有可执行文件、
appsettings.json配置与backuplog.db日志库。 - 目录权限(最容易踩):备份是 SQL Server 服务账号写文件、工具读取与清理,因此备份目录必须给服务账号写权限,否则会报“无法打开备份设备”。用共享目录做异地备份时同理。
- 账号与口令:配置文件里会保存数据库连接口令,建议改用专用备份账号(具备备份权限即可,不必 sysadmin),并收紧配置文件的访问控制。
- 备份目标建议:至少一本地盘 + 一异地 / 移动盘双目录;重要系统建议再把目录做一次定期离线归档。
八、快速上手:五步跑起来
- 填服务器地址与端口、选择认证方式 →【测试连接】,连通后自动加载数据库列表;
- 勾选要备份的数据库 → 选择备份目录(建议两块盘);
- 设置保留天数与是否压缩 →【保存配置】;
- 设定周期与备份时间 →【系统设置】勾选开机启动;
- 点【开始备份】先跑一次,再到【备份历史记录】确认台账已写入。
做完这五步,日常要做的只剩下:偶尔扫一眼工具栏右侧的倒计时,以及状态栏那句“距上次成功备份已 N 天”。
