
知识是人生的灯塔,只有不断学习,才能照亮前行的道路
📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路 😋 。
文章目录:

由于文章篇幅过长原因,我将《DBA | Oracle 容灾备份神器 RMAN 工具介绍与实践指南》其分为上、下两篇,其中上篇为RMAN 快速入门介绍,下篇为 RMAN 备份恢复实践。
温馨提示:本文是作者在工作之余花了4~5天总结而出,花费一定心血,请作者喝一瓶可乐吧!知识要点多,篇幅偏长,包含实践思考,希望对各位从事 DBA 知友有帮助。若有帮助请加入到作者知识星球【全栈工程师修炼指南】多多支持作者,更多全栈知识尽在其中!
最后,文章末尾有 oracle rman 脚本网盘下载链接,或者访问知识星球文章获取。链接地址:
https://articles.zsxq.com/id_0awq896cbww1.html

4.Oracle RMAN 备份容灾实践指南
使用镜像(映像)副本备份与恢复
步骤 01.首先查询当前数据库中有哪些 Oracle 关键文件,后续便可根据数据文件序号指定备份的数据文件。
go
SQL>setlines1000
SQL>set pagesize 500
-- 参数文件
-- 这将把SPFILE的内容导出到 c:\backup\spfile_content.txt; 文件中,你可以用文本编辑器打开它。
SQL> colNAMEfor a40
SQL> colVALUEfor a60
SQL> SPOOL c:\backup\spfile_content.txt;
SELECTNAME,VALUEFROM V$SPPARAMETER;
SPOOL OFF;
-- 控制文件
SQL> SELECTnameAS file_name FROM v$controlfile;
FILE_NAME
--------------------------------------------------
C:\APP\ORACLE\ORADATA\BKHISTDB\CONTROL01.CTL
C:\APP\ORACLE\RECOVERY_AREA\BKHISTDB\CONTROL02.CTL
-- 归档文件
SQL> col NAME for a60
SQL> SELECTTHREAD#,SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE#,DEST_ID,NAME,ACTIVATION# FROM V$ARCHIVED_LOG;
THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# DEST_ID NAME ACTIVATION#
---------- ---------- ------------- ------------ ---------- --------------------------------------------------- -----------
1 21 2096373 2143940 1 C:\ORACLE\ARCHIVELOG\ARCH_1_21_1215525163_B66E7EA9.ARC 3060694185
-- 在线重做日志
SQL> select * from V$LOG;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME CON_ID
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------- ------------ -------------- ----------
1 1 22 209715200 512 1 NO CURRENT 2143940 31-10月-25 1.8447E+19 0
2 1 20 209715200 512 1 YES INACTIVE 2095919 30-10月-25 2096373 30-10月-25 0
3 1 21 209715200 512 1 YES INACTIVE 2096373 30-10月-25 2143940 31-10月-25 0
-- 表空间
SELECT tablespace_name, bytes/1024/1024AS size_mb, autoextensible FROM dba_data_files;
TABLESPACE_NAME SIZE_MB AUT
------------------------------ ---------- ---
SYSTEM 840 YES
SYSAUX 770 YES
UNDOTBS1 535 YES
USERS 5 YES
ITGEEKDATA 100 NO
ITGEEKDATA 100 NO
ITGEEKDATA 100 NO
-- 数据文件
SQL> col FILE_NAME for a50
SQL> select file_name,file_id from dba_data_files;
FILE_NAME FILE_ID
-------------------------------------------------- ----------
C:\APP\ORACLE\ORADATA\BKHISTDB\SYSTEM01.DBF 1 -- SYSTEM 表空间数据文件
C:\APP\ORACLE\ORADATA\BKHISTDB\SYSAUX01.DBF 3
C:\APP\ORACLE\ORADATA\BKHISTDB\UNDOTBS01.DBF 5
C:\APP\ORACLE\ORADATA\BKHISTDB\USERS01.DBF 7
C:\APP\ORACLE\ORADATA\BKHISTDB\ITGEEKDATA01.DBF 8
C:\APP\ORACLE\ORADATA\BKHISTDB\ITGEEKDATA02.DBF 9
C:\APP\ORACLE\ORADATA\BKHISTDB\ITGEEKDATA03.DBF 10
步骤 02.使用镜像(映像)副本方式备份数据到 RMAN,恢复最方便但是空间占用较大。
go
# 例如,备份 SYSTEM01.DBF 到 RMAN 磁盘目录下,并以备份集编号命名,可自定义也可忽略,前面参数中已经配置了缺省。
RMAN> backup as copy datafile 1 format 'c:/backup/rman/%U';
# 亦科根据 FILE_ID 指定 datafile 1,3,5 方式指定备份数据文件。
RMAN> backup as copy datafile 1,3,7,8 format 'c:/backup/rman/%U';
输出文件名 = C:\BACKUP\RMAN\DATA_D-BKHISTDB_I-3060694697_TS-USERS_FNO-7_1Q47JJ4S 标记 = TAG20251031T093628 RECID=3 STAMP=1215941789
输出文件名 = C:\BACKUP\RMAN\DATA_D-BKHISTDB_I-3060694697_TS-ITGEEKDATA_FNO-8_1P47JJ4S 标记 = TAG20251031T093628 RECID=4 STAMP=1215941789
输出文件名 = C:\BACKUP\RMAN\DATA_D-BKHISTDB_I-3060694697_TS-SYSTEM_FNO-1_1N47JJ4S 标记 = TAG20251031T093628 RECID=5 STAMP=1215941794
输出文件名 = C:\BACKUP\RMAN\DATA_D-BKHISTDB_I-3060694697_TS-SYSAUX_FNO-3_1O47JJ4S 标记 = TAG20251031T093628 RECID=6 STAMP=1215941795
# 例如,备份所有归档日志到 RMAN 磁盘目录下。
RMAN> backup as copy archivelog all format 'c:/backup/rman/%U';
输出文件名 = C:\BACKUP\RMAN\ARCH_D-BKHISTDB_ID-3060694697_S-20_T-1_A-3060694185_1K47JIPT RECID=21 STAMP=1215941438
输出文件名 = C:\BACKUP\RMAN\ARCH_D-BKHISTDB_ID-3060694697_S-22_T-1_A-3060694185_1L47JIPT RECID=22 STAMP=1215941438
输出文件名 = C:\BACKUP\RMAN\ARCH_D-BKHISTDB_ID-3060694697_S-21_T-1_A-3060694185_1J47JIPT RECID=23 STAMP=1215941439
# 例如,备份 SPFILE(参数文件)到 RMAN 磁盘目录下。
# C:\app\oracle\product\12.2.0\dbhome_1\database
RMAN> backup as copy spfile format 'c:/backup/rman/%U';
片段句柄 = C:\BACKUP\RMAN\1S47JJC0_1_1 标记 = TAG20251031T094016 注释 = NONE
# 例如,备份指定表空间到 RMAN 磁盘目录下。
RMAN> backup as copy tablespace ITGEEKDATA format 'c:/backup/rman/%U';
输出文件名 = C:\BACKUP\RMAN\DATA_D-BKHISTDB_I-3060694697_TS-ITGEEKDATA_FNO-8_1U47JMSL 标记 = TAG20251031T104020 RECID=7 STAMP=1215945622
输出文件名 = C:\BACKUP\RMAN\DATA_D-BKHISTDB_I-3060694697_TS-ITGEEKDATA_FNO-9_1V47JMSL 标记 = TAG20251031T104020 RECID=8 STAMP=1215945622
输出文件名 = C:\BACKUP\RMAN\DATA_D-BKHISTDB_I-3060694697_TS-ITGEEKDATA_FNO-10_2047JMSL 标记 = TAG20251031T104020 RECID=9 STAMP=1215945622
步骤 03.备份控制文件并自定义文件格式,实际前面 RMAN 参数中已经配置了自动触发(可选,此处了解即可)
go
backup current controlfile format='c:/backup/rman/CTR-%d-%T-%t'
# 通道 ORA_DISK_1: 正于 30-10月-25 启动段 1
# 通道 ORA_DISK_1: 完成了于 30-10月-25 启动段 1
# 片段句柄 = C:\BACKUP\RMAN\CTR-BKHISTDB_20251030-1215890052 标记 = TAG20251030T191412 注释 = NONE
步骤 04.查看镜像(映像)数据文件副本与控制文件、参数文件备份集信息。
go
# 查看备份集摘要信息
list backup summary;
# 查看镜像副本信息
list copy;
weiyigeek.top-查看备份信息图
步骤 05.模拟参数文件丢失、数据文件丢失以及数据库异常。
go
# 模拟spfile参数文件丢失
move C:\app\oracle\product\12.2.0\dbhome_1\database\SPFILEBKHISTDB.ORA c:\backup\SPFILEBKHISTDB.ORA
# 模拟数据丢失
SQL> delete from itgeek.emp;
已删除 7 行。
# 模拟数据库崩溃
SQL> shutdown abort;
# ORACLE 例程已经关闭。
步骤 06.恢复 SPFILE 的参数文件。
go
# 1.启动RMAN并连接数据库
rman target /
# 2.设置数据库标识(DBID)
# 如果SPFILE完全丢失,RMAN可能无法识别数据库,您需要手动指定DBID。
RMAN> SET DBID=3060694697