DBA | Oracle RMAN 实战:物理备份与数据恢复全解析

知识是人生的灯塔,只有不断学习,才能照亮前行的道路

📢 大家好,我是 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
相关推荐
现在,此刻2 小时前
clickhouse和pgSql跨库查询方案对比
数据库·sql·clickhouse·性能优化
while(1){yan}2 小时前
数据库的基本操作
数据库·oracle
翻斗花园牛图图-2 小时前
MySQL——库的操作
数据库·mysql
大猫会长2 小时前
supabase备份数据库中某个schema的方法
数据库·oracle
-指短琴长-2 小时前
MySQL快速入门——内置函数
android·数据库·mysql
小码过河.4 小时前
告别 mysqldump 痛点!用 mydumper 实现 MySQL 高效备份与恢复
数据库·mysql
TDengine (老段)5 小时前
从“数据堆场”到“智能底座”:TDengine IDMP如何统一数据语言
大数据·数据库·物联网·时序数据库·tdengine
l1t5 小时前
利用短整数类型和部分字符串优化DuckDB利用数组求解数独SQL
开发语言·数据库·sql·duckdb
一 乐6 小时前
医疗管理|医院医疗管理系统|基于springboot+vue医疗管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·医疗管理系统