SQLite WAL 备份与恢复实验

环境：Python 3.9 或以上，标准库 sqlite3；验证平台为 macOS、本地文件系统。
运行演示：python3 demo.py
运行全部测试：python3 -m unittest -v
演示和测试只在临时目录创建数据库，不触碰真实业务数据。

命令行用法：python3 backup.py /absolute/path/app.db /absolute/path/new-backup-dir
输出 new-backup-dir/snapshot.db。父目录须已存在，输出目录须不存在。
使用唯一的备份目录，避免覆盖历史快照。失败时清理本次创建的目录。
源连接 mode=ro 防止路径拼错时自动创建空库；WAL 读取仍可能需要目录权限和 -shm。
5 秒超时是 backup 进度回调中的协作式期限，不覆盖完整性检查，也不是硬墙钟上限。

恢复演练：将已关闭、已检查的 snapshot.db 复制到全新的目录，以新文件路径启动
测试应用，核对订单和业务查询并尝试写入。不要直接覆盖正被业务连接打开的数据库，
不要删除运行中数据库的 -wal/-shm。正式切换应停写、关连接后再按应用流程执行。
本例未实现断电持久性保证、异地存储、保留策略、加密、多个 ATTACH 库的一致快照。
