基于 Python + Flask 构建的轻量级 Oracle 数据库备份管理平台,通过 RMAN 实现本地/远程物理备份,支持任务调度、状态跟踪、日志查看与文件下载,帮助 DBA 高效管理备份任务。
? 项目简介
本系统将传统命令行 RMAN 备份操作封装为 Web 服务,提供直观的界面和后台任务管理。支持:
• 手动单库备份:输入连接信息,立即触发备份。 • Excel 批量备份:通过模板批量导入多个数据库配置,一键提交所有备份任务。 • 本地与远程备份: • 本地备份:在备份机本机执行 RMAN(操作系统认证)。 • 远程备份:通过 SSH 连接到数据库服务器,在远端执行 RMAN,并将备份文件下载到本地存储。 • 全量/增量自动选择:根据全量间隔和上次全量时间自动决定备份级别(L0/L1),也支持强制指定。 • 任务状态跟踪:实时查看任务进度(pending/running/completed/failed),支持任务列表筛选。 • 日志与文件管理:查看 RMAN 详细日志,下载备份集文件,便于审计和恢复。
✨ 功能特性
• Web 可视化操作:无需记忆复杂命令,通过浏览器即可完成备份管理。 • 多数据库支持:同一系统可管理多个 Oracle 实例(本地或远程)。 • 自动级别决策:基于全量间隔(默认 7 天)和上次全量时间,自动选择增量或全量备份,减少存储占用。 • 远程备份自动化:SSH 登录远程服务器,执行 RMAN 脚本,完成后自动下载备份集和日志到本地。 • 任务队列与并发:每个备份任务在独立线程中运行,不阻塞界面操作。 • 备份文件浏览与下载:在 Web 界面中查看备份目录下的文件,一键下载。 • 日志集中管理:所有备份日志(包括调试日志)保存在本地,可在线查看或下载。 • 简单的认证机制:内置管理员账号(可配置),保护操作安全。
? 技术栈
Python 3.8+ Flask SQLite paramiko openpyxl subprocess threading
注意:远程备份功能依赖
paramiko,Excel 批量功能依赖openpyxl。若不需要相应功能,可选择性安装,但推荐全部安装以获得完整体验。
? 项目目录结构
oracle_backup_web_tool/
├── app.py # 主程序入口
├── backup_tasks.db # SQLite 数据库(自动生成)
├── uploads/ # 上传 Excel 临时文件存放目录
├── backup/ # 默认备份根目录(BASE_BACKUP_DIR)
│ ├── rman/ # 备份数据文件
│ │ ├── local_orcl/ # 按 "IP_SID" 组织
│ │ │ └── 20260722/ # 按日期分目录
│ │ │ ├── L0_*.dbf
│ │ │ ├── L0_*.log
│ │ │ └── L0_*.ctl
│ │ └── 192.168.1.100_orcl/
│ └── log/ # 备份日志文件
│ ├── local_orcl/
│ │ └── 20260722/
│ │ ├── L0_*.log
│ │ └── check_archivelog_debug.log
│ └── ...
└── templates/ # Flask 模板文件(Web 界面)
├── login.html # 登录页面
├── backup_index.html # 任务列表首页
├── backup_new.html # 新建单库备份表单
├── backup_batch.html # 批量备份上传页面
├── backup_detail.html # 任务详情页
├── backup_files.html # 备份文件列表页
├── backup_log.html # 日志内容查看页
├── base.html # 基础布局模板(被其他模板继承)
├── create_task.html # (备用)创建任务界面
└── tasks.html # (备用)任务列表片段各模板文件简要说明:
• login.html:用户登录界面。• backup_index.html:展示所有备份任务列表,支持跳转详情。• backup_new.html:手动备份表单,填写数据库连接信息、备份策略等。• backup_batch.html:批量备份上传页面,提供文件选择和模板下载入口。• backup_detail.html:任务详情,显示状态、错误信息,并链接到日志和文件列表。• backup_files.html:列出指定任务备份目录下的所有文件,支持下载。• backup_log.html:显示单个 RMAN 日志文件内容。• base.html:基础 HTML 结构,包含导航栏和公共样式,其他模板继承它。• create_task.html/tasks.html:早期版本遗留,当前未使用,可忽略。
? 安装与部署
1. 环境准备
• 操作系统:Windows / Linux(理论上支持,但本地备份需在 Oracle 环境运行的机器上使用)。 • Oracle 客户端(本地备份):安装 Oracle Instant Client 或完整客户端,确保 sqlplus和rman命令在系统 PATH 中可用。• Python 3.8+及 pip。
2. 克隆代码
git clone https://github.com/Zhh9126/oraclebackuptool.git
cd oraclebackuptool3. 安装依赖
pip install -r requirements.txt
若没有 requirements.txt,手动安装:
pip install flask paramiko openpyxl
4. 配置(可选)
在 app.py顶部可调整以下配置:
• BASE_BACKUP_DIR:本地备份存储根目录(默认~/backup)。• REMOTE_BACKUP_ROOT:远程服务器上的临时备份根目录(默认/home/oracle/backup)。• USERNAME/PASSWORD:Web 登录凭证(默认admin/admin)。• DEFAULT_SSH_USER:远程备份默认 SSH 用户名(默认oracle)。• 端口号:可在 app.run(port=5001)处修改。
建议根据实际环境修改这些值,尤其是远程备份目录需确保 Oracle 用户有写入权限。
5. 初始化数据库
首次运行会自动创建 SQLite 数据库文件 backup_tasks.db,无需手动操作。
6. 启动服务
python app.py
默认监听 http://0.0.0.0:5001,访问即可打开登录页面。
? 使用指南
1. 登录
使用配置的管理员账号(默认 admin/admin)登录。
2. 首页 - 任务列表
登录后显示所有备份任务,按创建时间倒序排列。可查看每个任务的状态、数据库名称、创建/更新时间。
3. 手动新建备份
点击 “新建备份”,填写表单:
• 连接方式: • 本地备份:IP 填 127.0.0.1或留空,无需数据库用户/密码(使用操作系统认证)。• 远程备份:填写数据库服务器 IP、SSH 用户名/密码(可选,若 SSH 密钥认证可留空)、数据库 SID/服务名。 • 备份策略:全量间隔(天)、保留天数(RMAN 恢复窗口)、强制级别(AUTO/L0/L1)。 • 远程环境变量(可选):若远程服务器需设置 ORACLE_HOME、PATH等,可在此填写,例如:export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
提交后任务立即进入后台执行,页面跳转到任务详情。
4. 批量备份
点击 “批量备份”,先下载 Excel 模板(菜单 “下载模板”),按模板填写多个数据库信息,然后上传文件,系统将解析并自动为每一行创建备份任务。
模板列说明:
127.0.0.1152178oracleexport ORACLE_HOME=...
5. 查看任务详情
在任务列表点击任意任务 ID,进入详情页:
• 显示任务状态、错误信息(如果有)。 • 提供 “查看日志”按钮,可在线浏览 RMAN 输出日志。 • 提供 “下载文件”按钮,进入文件列表页,可查看备份数据目录下的所有文件(如备份集、控制文件等),并支持单个下载。
6. 日志文件列表
在任务详情页点击 “查看调试日志”(或通过 URL /backup/log_files/<task_id>/)可查看该任务的所有日志文件(包括远程执行脚本的调试日志),便于排查问题。
⚙️ 配置详解
目录结构
备份数据按以下规则组织:
BASE_BACKUP_DIR/
├── rman/
│ └── {IP}_{SID}/ # 每个数据库独立目录
│ ├── last_full.txt # 记录最近一次全量备份日期
│ └── YYYYMMDD/ # 按日期存放
│ ├── L0_*.dbf
│ ├── L0_*.log
│ ├── L0_*.ctl
│ └── ...
└── log/
└── {IP}_{SID}/
└── YYYYMMDD/
├── L0_*.log
├── L1_*.log
└── check_archivelog_debug.log远程备份时,远程服务器上的临时目录结构与本地相同,完成后文件会被下载到本地对应位置。
环境变量
可通过设置系统环境变量覆盖默认配置(示例):
• USER:更改默认 SSH 用户名(如export USER=oracle)。
备份策略说明
• 全量间隔:两次全量备份之间的最大天数。超过该间隔后,下次备份自动升级为 L0。 • 保留天数:RMAN 的 RECOVERY WINDOW,用于控制备份集的保留策略,自动删除过期备份。• 强制级别: AUTO自动判断,L0强制全量,L1强制增量(若无可用全量则自动转为 L0)。
? API 接口(供前端调用)
/api/backup/task/<task_id>status, error, updated_at/backup/task/<task_id>/backup/download/<task_id>//backup/download/<task_id>/<filename>/backup/log/<task_id>/backup/log_files/<task_id>//backup/log_files/<task_id>/<filename>
⚠️ 注意事项
1. 本地备份环境:确保运行本系统的机器已安装 Oracle 客户端,且 rman和sqlplus可在命令行直接调用(可通过which rman检查)。2. 远程备份要求: • 目标服务器需开通 SSH 服务,且备份机可免密或密码登录。 • 远程服务器上的 Oracle 用户(如 oracle)需具备执行 RMAN 的权限,且环境变量(ORACLE_HOME,PATH,ORACLE_SID)正确。• 远程服务器上的 REMOTE_BACKUP_ROOT目录需 Oracle 用户有读写权限,且磁盘空间充足。3. 备份文件下载:系统将远程备份文件下载到本地,请确保本地 BASE_BACKUP_DIR磁盘空间足够存放所有备份集。4. 并发限制:当前未限制并发线程数,批量提交大量任务时需注意系统资源(CPU/内存/IO)。 5. 安全建议: • 生产环境请将默认 SECRET_KEY改为随机字符串。• 建议使用 HTTPS 部署(如 Nginx 反向代理)。 • 不要将数据库密码明文存储在 Excel 文件中(建议使用 SSH 密钥认证替代密码)。 6. 日志查看:若远程备份失败,可先查看任务详情中的错误信息,再通过“调试日志”下载 check_archivelog_debug.log和remote_backup_*.log以定位问题。
? 常见问题
Q:远程备份提示“sqlplus command not found”?
A:远程服务器的 PATH中未包含 Oracle 的 bin 目录,请在“远程环境设置”中配置正确的 ORACLE_HOME和 PATH。
Q:备份文件下载不完整或为空?
A:检查远程备份是否成功生成文件(可在远程服务器上查看 REMOTE_BACKUP_ROOT目录),以及备份完成后等待足够时间再下载(系统默认等待 2 秒后重试)。若仍失败,查看调试日志中的 STDOUT/STDERR。
Q:如何切换本地备份根目录?
A:修改 app.py中的 BASE_BACKUP_DIR变量,重启服务即可。
Q:能否支持多用户?
A:当前为单用户认证,若需多用户,可扩展 SQLite 用户表并增加登录管理。
? 相关资源
• Oracle RMAN 官方文档 • paramiko 文档 • Flask 文档 • openpyxl 文档
? 贡献
欢迎提交 Issue 和 Pull Request。如果您有改进建议或新功能需求,请通过 GitHub 与我们联系。
? 许可证
本项目采用 MIT 许可证,详情见 LICENSE 文件。
备份无忧,数据安全!?️
本文链接:https://www.kinber.cn/post/6723.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
