面向 Oracle 数据库的大表历史数据归档与安全清理工具(Oracle 11g+)
分析 → 复制 → 校验 → 人工确认 → 清理,全链路审计留痕
长期运行的 Oracle 生产系统中,大表会持续累积历史数据,导致表和索引体积膨胀、查询与维护成本上升、备份时间变长;但业务上既不敢直接删除,历史数据又需要保留可查。
Oracle Archive Manager 解决的就是这个问题:把满足归档条件的数据从生产 Oracle 安全迁移到独立归档 Oracle,确认数据完整后,再由人工显式清理生产库。
它是一个 Python C/S 桌面程序(PySide6 GUI),控制数据保存在本地 SQLite,默认低侵入:
- 不修改业务表结构、不创建触发器、不依赖 DB Link
- 生产库默认只读账号即可运行;清理(Purge)可单独使用具备 DELETE 权限的账号
复制是自动的,清理必须经显式确认。 (Copy is automatic. Destruction is explicit.)
- 复制可以自动执行;
- 删除生产数据必须经过验证;
- 删除必须由用户显式触发、二次确认;
- 任一批次验证失败,生产库该批次不得删除;
- 程序崩溃后可判断数据处于 COPY / VERIFIED / PURGED 哪个阶段;
- 所有归档边界在 RUN 创建时冻结,恢复任务不会重新计算;
- 归档工具不修改业务表结构;
- 全部操作留有审计记录。
| 功能 | 说明 |
|---|---|
| 连接管理 | 生产库 / 归档库双连接,测试连接、获取版本与 Schema,密码本地安全保存(keyring) |
| 归档分析 | 按日期字段 + 保留月份,预估总行数、待归档行数、表/索引大小与归档范围 |
| 分批归档 | 固定 Batch Size 分批复制,逐批提交、逐批校验,标记验证状态 |
| 安全清理 | Copy + Verify 完成后由用户显式触发 Purge,展示待删数量与条件、二次确认、分批提交、写入审计 |
| 断点续跑 | 程序异常退出 / 网络中断 / Oracle 异常后可恢复:识别未完成 RUN 与 Batch,不重复删除、不重复处理 |
| 定时调度 | 任务可配置计划,支持定时自动归档 |
| 运行报表 | 运行历史、批次明细、日志查看与导出 |
| 自动更新 | 启动时检查 GitHub 最新版本,发现新版后一键下载安装(OTA) |
前往 Releases 下载最新的 Windows 单文件可执行程序(Nuitka 编译),解压即可运行,无需安装 Python 环境。
使用前提:
- Windows 10/11;
- 可访问生产与归档 Oracle 数据库(Oracle 11g 及以上,Thick 模式,需 Oracle Instant Client)。
本程序由 Nuitka 编译,部分杀毒软件可能将其误报为威胁。这是 Python 打包应用的常见问题,并非真正的恶意代码。
安全验证:
- 本程序为开源软件,源码完全公开,可自行审查;
- 所有构建均在 GitHub Actions 公开编译,编译日志完全透明;
- 每个 Release 均附带 VirusTotal 扫描结果,检测均为已知误报模式。
如仍有疑虑,建议自行从源码编译(见下方说明)。
需要 Python 3.12+,推荐使用 uv:
# 安装依赖
uv sync
# 启动程序
uv run oracle-archive-manager
# 运行单元测试
uv run pytest如需自行编译 Windows 单文件 exe:
# 克隆仓库
git clone https://github.com/ayumilove/OracleArchiveManager.git
cd OracleArchiveManager
# 安装依赖
uv sync
# 编译单文件 exe
uv run python -m nuitka src/oracle_archive_manager \
--standalone --onefile \
--python-flag=-m \
--enable-plugin=pyside6 \
--windows-icon-from-ico=src/oracle_archive_manager/resources/icons/app.ico \
--windows-console-mode=disable \
--output-dir=dist \
--output-filename=OracleArchiveManager.exe编译完成后,dist/OracleArchiveManager.exe 即为可独立运行的单文件程序。
- Python 3.12+ / PySide6:桌面 GUI
- python-oracledb:Oracle 数据库访问(Thick 模式,兼容 Oracle 11g)
- SQLite:本地控制库(任务、连接、运行记录、审计)
- pydantic / loguru / keyring:数据模型、日志、凭据安全存储
- Nuitka:发布打包
- pytest:单元测试
设计与开发文档统一存放在 docs/:
| 文件 | 内容 |
|---|---|
01_PRODUCT_REQUIREMENTS.md |
产品需求与范围 |
02_ARCHITECTURE_DESIGN.md |
总体架构设计 |
03_DATA_MODEL.md |
SQLite 控制库数据模型 |
04_ARCHIVE_WORKFLOW.md |
归档、验证、清理状态机 |
05_ORACLE_STRATEGY.md |
Oracle 11g 数据访问与性能策略 |
06_GUI_DESIGN.md |
PySide6 GUI 页面与交互设计 |
07_SECURITY_SAFETY.md |
数据安全、权限与防误操作 |
08_DEVELOPMENT_PLAN.md |
分阶段开发计划 |
09_TODO.md |
可执行 Todo List |
10_TEST_PLAN.md |
测试与验收方案 |
11_PROJECT_STRUCTURE.md |
Python 工程目录和模块职责 |
12_RELEASE_DEPLOYMENT.md |
打包、部署、升级与配置 |
13_OPEN_SOURCE_PLAN.md |
后续开源策略建议 |
14_DECISIONS.md |
当前已经确定的技术决策 |
push/ PR:GitHub Actions 自动运行单元测试(ci.yml);v*.*.*标签:自动 Nuitka 编译 Windows 单文件 exe 并发布 GitHub Release(release.yml)。
- MySQL / PostgreSQL / SQL Server 支持
- Oracle CDC、实时同步
- DB Link、Data Pump 自动编排
- 全自动无人审批的 Purge
- Web/B/S、多租户、分布式 Worker
使用中遇到问题,欢迎提交 Issue。
© 2026 xcode.im · Oracle Archive Manager
