HQY

×

分享一套Oracle备份管理Web运维系统

hqy hqy 发表于2026-07-22 17:35:17 浏览151 评论0

抢沙发发表评论

基于 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
Web 框架,提供路由、模板渲染
SQLite
轻量级关系数据库,存储任务状态
paramiko
SSH 客户端,用于远程执行命令和 SFTP 传输
openpyxl
Excel 文件读写,用于批量导入/导出模板
subprocess
调用本地 RMAN 和 sqlplus 命令
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.htmltasks.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 oraclebackuptool

3. 安装依赖

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)。
  • • USERNAMEPASSWORD: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_HOMEPATH等,可在此填写,例如:
    export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
    export PATH=$ORACLE_HOME/bin:$PATH

提交后任务立即进入后台执行,页面跳转到任务详情。

4. 批量备份

点击 “批量备份”,先下载 Excel 模板(菜单 “下载模板”),按模板填写多个数据库信息,然后上传文件,系统将解析并自动为每一行创建备份任务。

模板列说明:

列名
说明
IP地址
数据库服务器 IP,本地填 127.0.0.1
端口
监听端口,默认 1521
数据库用户名
远程备份需填写,本地留空
数据库密码
远程备份需填写,本地留空
数据库SID/服务名
必填
全量间隔(天)
默认 7
保留天数(天)
默认 8
SSH用户
远程备份的 SSH 用户名,默认 oracle
SSH密码
若未配置密钥,可填写密码
远程环境设置
可选,如 export 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>
GET
获取任务状态(JSON),含 statuserrorupdated_at
/backup/task/<task_id>
GET
任务详情页面
/backup/download/<task_id>/
GET
列出备份文件
/backup/download/<task_id>/<filename>
GET
下载指定备份文件
/backup/log/<task_id>
GET
查看 RMAN 日志内容(文本)
/backup/log_files/<task_id>/
GET
列出日志目录所有文件
/backup/log_files/<task_id>/<filename>
GET
下载日志文件


⚠️ 注意事项

  1. 1. 本地备份环境:确保运行本系统的机器已安装 Oracle 客户端,且 rman和 sqlplus可在命令行直接调用(可通过 which rman检查)。
  2. 2. 远程备份要求
    • • 目标服务器需开通 SSH 服务,且备份机可免密或密码登录。
    • • 远程服务器上的 Oracle 用户(如 oracle)需具备执行 RMAN 的权限,且环境变量(ORACLE_HOMEPATHORACLE_SID)正确。
    • • 远程服务器上的 REMOTE_BACKUP_ROOT目录需 Oracle 用户有读写权限,且磁盘空间充足。
  3. 3. 备份文件下载:系统将远程备份文件下载到本地,请确保本地 BASE_BACKUP_DIR磁盘空间足够存放所有备份集。
  4. 4. 并发限制:当前未限制并发线程数,批量提交大量任务时需注意系统资源(CPU/内存/IO)。
  5. 5. 安全建议
    • • 生产环境请将默认 SECRET_KEY改为随机字符串。
    • • 建议使用 HTTPS 部署(如 Nginx 反向代理)。
    • • 不要将数据库密码明文存储在 Excel 文件中(建议使用 SSH 密钥认证替代密码)。
  6. 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 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客