欢迎光临
我们一直在努力

03-RMAN备份恢复完整教程

RMAN备份恢复完整教程——全备+增量+归档清理+恢复验证

很多人配了RMAN备份就觉得高枕无忧了。备份不等于能恢复——没有验证过恢复流程的备份约等于没有。这篇文章从社保系统的RMAN策略出发,给出一套可落地的备份恢复方案。

文章目录

  • RMAN备份恢复完整教程——全备+增量+归档清理+恢复验证
    • 一、RMAN 基础概念
    • 二、全备脚本
    • 三、增量备份
    • 四、恢复验证——最重要但最容易被跳过
    • 五、常见故障恢复
    • 六、检查清单

一、RMAN 基础概念

RMAN 是 Oracle 自带的备份恢复工具,不需要额外安装。

概念说明
全备(Full) 备份所有数据文件+控制文件+参数文件
增量备份(Incremental) 只备份自上次备份以来变化的数据块
归档日志 记录所有数据库变更,用于恢复到任意时间点
恢复目录(Catalog) 可选,将备份元数据存到独立数据库,方便集中管理

社保系统用控制文件记录备份信息就够了——不需要额外的Catalog数据库。


二、全备脚本

#!/bin/bash
# full_backup.sh —— 每周日凌晨执行

export ORACLE_SID=orcl
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export DATE=$(date +%Y%m%d)

rman target / log=/backup/rman_full_$DATE.log <<EOF
run {
# 备份数据库(含归档日志)
BACKUP AS COMPRESSED BACKUPSET DATABASE
FORMAT '/backup/full_%d_%T_%s_%p.bkp'
PLUS ARCHIVELOG
FORMAT '/backup/arch_%d_%T_%s_%p.bkp'
DELETE INPUT;

# 备份控制文件和参数文件
BACKUP CURRENT CONTROLFILE
FORMAT '/backup/ctl_%d_%T_%s_%p.bkp';
BACKUP SPFILE
FORMAT '/backup/spfile_%d_%T_%s_%p.bkp';
}

# 清除7天前的备份
DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 7 DAYS;

# 清除3天前的归档日志(已备份的)
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3';
EOF

# 检查备份日志,含错误则告警
if grep -E 'RMAN-|ORA-' /backup/rman_full_$DATE.log; then
echo "备份异常,请检查日志" | mail -s "RMAN备份告警" admin@xx.gov.cn
fi

关键选项:

  • AS COMPRESSED BACKUPSET——开启压缩,社保库能省30-50%空间
  • PLUS ARCHIVELOG DELETE INPUT——备份归档日志后自动删除源文件
  • OBSOLETE RECOVERY WINDOW OF 7 DAYS——保留7天内可恢复的备份,老的自动清

三、增量备份

#!/bin/bash
# incr_backup.sh —— 周一到周六凌晨执行,只备份变化的块

rman target / log=/backup/rman_incr_$DATE.log <<EOF
run {
BACKUP INCREMENTAL LEVEL 1 AS COMPRESSED BACKUPSET DATABASE
FORMAT '/backup/incr1_%d_%T_%s_%p.bkp'
PLUS ARCHIVELOG
FORMAT '/backup/arch_%d_%T_%s_%p.bkp'
DELETE INPUT;
}

DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 7 DAYS;
EOF

LEVEL 1 是差异增量——只备份自上次 LEVEL 0(全备)以来变化的块。恢复时需要全备+所有增量+所有归档日志。

时间窗口:全备 30-60 分钟,增量备份 5-15 分钟。


四、恢复验证——最重要但最容易被跳过

备份文件存在不等于能恢复。必须定期做恢复验证。

#!/bin/bash
# restore_test.sh —— 每月执行一次,恢复到测试服务器验证

rman target / <<EOF
run {
# 恢复到测试服务器的不同目录
SET NEWNAME FOR DATABASE TO '/test/%b';
RESTORE DATABASE;
RECOVER DATABASE;
}

# 验证完成后删除测试文件
DELETE NOPROMPT BACKUP OF DATABASE COMPLETED BEFORE 'SYSDATE-30';
EOF

社保级别的底线:全备每周一次,增量每天一次,恢复验证每月一次。


五、常见故障恢复

场景一:数据文件损坏

— 查哪个文件坏了
SELECT * FROM v$recover_file;

— RMAN恢复单个文件
rman target /
RESTORE DATAFILE 5;
RECOVER DATAFILE 5;
ALTER DATABASE DATAFILE 5 ONLINE;

场景二:误删表数据,恢复到删除前

— 前提:有归档日志
rman target /
RUN {
SET UNTIL TIME "TO_DATE('2026-06-24 14:30:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
ALTER DATABASE OPEN RESETLOGS;

场景三:控制文件全部损坏

rman target /
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;


六、检查清单

— 最近一次备份时间
SELECT MAX(COMPLETION_TIME) FROM V$BACKUP_SET;

— 备份文件列表
SELECT HANDLE, BYTES/1024/1024 AS MB, COMPLETION_TIME
FROM V$BACKUP_PIECE ORDER BY COMPLETION_TIME DESC;

— 归档日志空间
SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;

— 是否需要备份(自上次备份以来的变更量)
SELECT * FROM V$BACKUP_SYNC_IO;


✅ 亮点:社保系统可复现的完整备份方案,从脚本到验证一条路走通。扩展方向:RMAN与DataGuard配合使用、备份到磁带库/OSS对象存储。

赞(0)
未经允许不得转载:171主机测评 » 03-RMAN备份恢复完整教程
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址