Oracle通过RMAN备份至MinIO且防止数据删除的详细步骤
作者:扑火的小飞蛾
本文提供了一个简单的测试方案,用于将Oracle数据库通过RMAN备份到MinIO,并重点配置MinIO以防止备份文件被误删除,方案涵盖了环境准备、MinIO和RMAN的配置、防误删功能测试以及恢复验证等步骤,需要的朋友可以参考下
前言
你想要实现的核心需求是:把Oracle数据库通过RMAN备份到MinIO,并且要防止备份文件被误删除,你希望测试方案足够简单,小白也能上手,且重点在MinIO侧的配置(RMAN无需复杂配置)。
下面我为你整理了一份零基础友好的测试方案,从环境准备到最终验证,每一步都有具体命令和操作说明,全程聚焦MinIO的防误删配置,RMAN仅做基础备份操作。
一、测试前提(小白友好版)
1. 基础环境(提前确认)
| 组件 | 要求 |
|---|---|
| Oracle | 安装并启动,有测试库(如ORCL),RMAN工具可用(默认安装Oracle就有) |
| MinIO | 单节点/集群均可,已安装mc客户端(参考之前的mc安装步骤) |
| 网络 | Oracle服务器能访问MinIO的9000端口(telnet minio-ip 9000测试) |
| 权限 | Oracle服务器有执行RMAN、mc的权限;MinIO有创建桶、配置版本/锁定的权限 |
2. 核心思路
- RMAN:将Oracle备份集直接推送到MinIO(MinIO兼容S3协议,RMAN可直接对接);
- MinIO:通过版本控制(防误删/覆盖)+ 对象锁定(防恶意删除)实现防误删;
- 测试重点:验证备份成功、删除/覆盖备份文件后能恢复、锁定后无法删除。
二、详细测试步骤(小白可照做)
步骤1:MinIO侧配置(核心防误删)
1.1 配置MinIO别名(Oracle服务器上操作)
# 替换为你的MinIO地址、AccessKey、SecretKey mc alias set minio-test http://minio-ip:9000 minioadmin minioadmin # 验证配置:列出MinIO已有桶(无输出也正常) mc ls minio-test
1.2 创建备份桶并启用防误删配置
# 1. 创建专用备份桶(命名:oracle-backup) mc mb minio-test/oracle-backup # 2. 启用版本控制(核心:删除/覆盖后保留旧版本) mc version enable minio-test/oracle-backup # 3. 启用对象锁定(可选,强化防删:需桶创建时开启,若已创建需重建) # 重新创建带锁定的桶(先删旧桶,测试环境可删) mc rb minio-test/oracle-backup --force mc mb --with-lock minio-test/oracle-backup # 4. 启用版本控制(锁定桶必须配版本控制) mc version enable minio-test/oracle-backup # 5. 验证配置:查看桶的版本和锁定状态 echo "版本控制状态:" mc version info minio-test/oracle-backup echo "对象锁定状态:" mc retention info minio-test/oracle-backup
说明:--with-lock是对象锁定的前提,生产环境创建桶时直接加这个参数,测试环境可重建。
1.3 (可选)设置默认保留策略(防删更严格)
# 设置桶的默认保留策略:GOVERNANCE(管理级,10天内不可删/改) mc retention set --default GOVERNANCE 10d minio-test/oracle-backup # 验证保留策略 mc retention info minio-test/oracle-backup
步骤2:RMAN配置(极简,无需复杂配置)
2.1 编写RMAN备份脚本(Oracle服务器上)
新建脚本文件rman_backup_minio.sh,内容如下(替换括号内内容):
#!/bin/bash
# Oracle环境变量(小白必改:根据自己的Oracle配置)
export ORACLE_SID=ORCL # 你的Oracle实例名
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1 # 你的Oracle安装目录
export PATH=$ORACLE_HOME/bin:$PATH
# RMAN备份命令(直接备份到MinIO)
rman target / << EOF
RUN {
# 备份数据库+归档日志,压缩
BACKUP AS COMPRESSED BACKUPSET
DATABASE
PLUS ARCHIVELOG
# 备份集推送到MinIO(格式:s3://桶名/路径)
FORMAT 's3://oracle-backup/orcl/backup_%d_%T_%U.bkp'
# MinIO的S3配置(替换为你的MinIO信息)
CONFIGURE CHANNEL DEVICE TYPE DISK PARMS 'S3_ACCESS_KEY=minioadmin, S3_SECRET_KEY=minioadmin, S3_ENDPOINT=http://minio-ip:9000, S3_REGION=us-east-1';
}
# 查看备份结果
LIST BACKUP SUMMARY;
EXIT;
EOF
2.2 执行备份脚本
# 赋予执行权限 chmod +x rman_backup_minio.sh # 执行备份(小白注意:需用oracle用户执行) su - oracle -c "./rman_backup_minio.sh"
小白提示:
- 若报错
S3_ACCESS_KEY不存在:确认Oracle版本≥12c(12c以上原生支持S3); - 若11g版本:需先安装Oracle S3插件,或先备份到本地再用
mc cp上传到MinIO(文末附替代方案)。
2.3 验证备份是否成功上传到MinIO
# 列出MinIO桶中的备份文件 mc ls minio-test/oracle-backup/orcl/
能看到类似backup_ORCL_20260305_xxxx.bkp的文件,说明备份成功。
步骤3:测试防误删功能(核心验证)
场景1:手动删除备份文件,验证版本控制可恢复
# 1. 先记录备份文件名(比如:backup_ORCL_20260305_123456.bkp) BACKUP_FILE=backup_ORCL_20260305_123456.bkp # 2. 模拟误删除:删除MinIO中的备份文件 mc rm minio-test/oracle-backup/orcl/$BACKUP_FILE # 3. 查看删除后的版本(仍能看到旧版本,标记为DELETED) mc ls --versions minio-test/oracle-backup/orcl/$BACKUP_FILE # 4. 恢复误删的文件(替换VERSION_ID为上一步查到的版本ID) mc cp minio-test/oracle-backup/orcl/$BACKUP_FILE?versionId=VERSION_ID minio-test/oracle-backup/orcl/$BACKUP_FILE # 5. 验证恢复成功 mc ls minio-test/oracle-backup/orcl/$BACKUP_FILE
场景2:启用对象锁定后,验证无法删除/修改
# 1. 给备份文件加法律保留(永久锁定,手动解除前不可删) mc legalhold enable minio-test/oracle-backup/orcl/$BACKUP_FILE # 2. 尝试删除该文件(会报错,无法删除) mc rm minio-test/oracle-backup/orcl/$BACKUP_FILE # 3. 解除锁定(如需删除,测试完成后执行) mc legalhold disable minio-test/oracle-backup/orcl/$BACKUP_FILE
场景3:模拟覆盖备份文件,验证版本保留
# 1. 再次执行RMAN备份(生成同名新文件) su - oracle -c "./rman_backup_minio.sh" # 2. 查看版本:能看到新旧两个版本 mc ls --versions minio-test/oracle-backup/orcl/$BACKUP_FILE # 3. 恢复旧版本(比如恢复到备份前的版本) mc restore minio-test/oracle-backup/orcl/$BACKUP_FILE --version-id=旧版本ID
步骤4:测试恢复(可选,验证备份可用)
# 1. 将MinIO中的备份文件下载到本地 mc cp minio-test/oracle-backup/orcl/$BACKUP_FILE /tmp/ # 2. 用RMAN验证备份文件有效性(Oracle用户执行) rman target / << EOF RESTORE VALIDATE DATABASE FROM BACKUPSET '/tmp/$BACKUP_FILE'; EXIT; EOF
输出validation succeeded说明备份文件有效。
三、小白避坑指南
- RMAN连接MinIO报错:
- 检查MinIO地址/端口是否通(
ping minio-ip+telnet minio-ip 9000); - AccessKey/SecretKey是否写对(MinIO默认是minioadmin/minioadmin,生产需改);
- Oracle 11g不支持直接S3:替代方案是先备份到本地,再用
mc cp上传:
- 检查MinIO地址/端口是否通(
# 1. RMAN备份到本地 rman target / << EOF BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG FORMAT '/tmp/%d_%T_%U.bkp'; EOF # 2. mc上传到MinIO mc cp /tmp/*.bkp minio-test/oracle-backup/orcl/
- MinIO对象锁定创建失败:
- 对象锁定必须在创建桶时启用(
--with-lock),已创建的桶无法直接开启,需重建;
- 对象锁定必须在创建桶时启用(
- 删除文件后看不到版本:
- 确认已执行
mc version enable,未启用版本控制则删除后无法恢复。
- 确认已执行
总结
- MinIO侧核心配置:创建带
--with-lock的桶 + 启用版本控制 + 可选保留策略,是防误删的关键; - RMAN侧极简操作:无需复杂配置,仅需在备份命令中指定MinIO的S3参数(12c+),11g可先本地再上传;
- 核心验证点:误删后能通过版本恢复、锁定后无法删除、备份文件可验证有效性。
整个测试方案全程用复制粘贴的命令,小白只需替换MinIO地址、Oracle实例名等少量参数,即可完成从备份到防误删的全流程验证。
以上就是Oracle通过RMAN备份至MinIO且防止数据删除的详细步骤的详细内容,更多关于Oracle RMAN备份至MinIO的资料请关注脚本之家其它相关文章!
