一、开篇灵魂拷问:你的数据库有“后悔药”吗?


某公司数据库服务器磁盘阵列损坏,所有数据文件全部丢失。 DBA 信心满满地准备恢复,却发现最近的全备份是三个月前的——因为备份策略配置错误,每天的备份都失败了但没人发现。 最终,公司丢失了三个月的数据。


这就是备份策略的重要性。 备份不是“有没有”的问题,而是“能不能恢复”的问题。一个完整的备份策略需要考虑备份类型、备份频率、备份验证和恢复演练。


今天这篇文章,带你全面了解 Oracle 数据库的备份方式分类、各种备份的优缺点,以及生产环境的最佳备份实践。


---


二、全景架构图:Oracle 备份方式分类


先通过一张架构图,看清 Oracle 备份方式的完整分类:


Oracle数据库备份

物理备份 Physical Backup

逻辑备份 Logical Backup

冷备份 Cold Backup

热备份 Hot Backup

RMAN备份

关闭数据库

复制所有数据文件

复制控制文件

复制日志文件

BEGIN BACKUP模式

复制表空间数据文件

END BACKUP模式

全备份 Full Backup

增量备份 Incremental Backup

差异增量 Differential

累积增量 Cumulative

归档日志备份

控制文件自动备份

Data Pump导出

传统exp/imp-已过时

全库导出 FULL

模式导出 SCHEMA

表导出 TABLE

表空间导出 TABLESPACE

可传输表空间


关键分类解读:


  • 物理备份: 直接复制数据库的物理文件(数据文件、控制文件、日志文件)。
  • 逻辑备份: 导出数据库的逻辑对象(表、索引、存储过程等)。
  • 冷备份: 数据库关闭状态下的物理备份,最简单但需要停机。
  • RMAN 备份: Oracle 官方推荐的备份恢复工具,功能最强大。
  • Data Pump: Oracle 10g+ 推荐的逻辑备份工具,替代传统 exp/imp。


---


三、物理备份深度解析


1. 物理备份的本质定义


精确描述:

物理备份是直接复制数据库的物理文件(数据文件、控制文件、联机重做日志),备份的是操作系统级别的二进制文件,恢复时直接将文件还原到原位置。


物理备份的核心特征:

  • 备份的是二进制文件,不是 SQL 语句。
  • 恢复速度快(直接复制文件)。
  • 必须包含所有相关文件(数据文件+控制文件+日志)。
  • 通常需要数据库处于一致状态。


---


2. ❌ 冷备份(Cold Backup)详解


精确描述:

冷备份是在数据库完全关闭状态下,直接复制所有物理文件到备份目录。这是最简单、最可靠的备份方式,但需要停机窗口。


冷备份的完整操作步骤:

# 步骤 1:正常关闭数据库
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;

# 步骤 2:查看需要备份的文件
SELECT name FROM v$datafile;
SELECT name FROM v$controlfile;
SELECT member FROM v$logfile;
SHOW PARAMETER spfile;

# 步骤 3:复制所有物理文件到备份目录
cp /u01/oradata/ORCL/*.dbf /backup/cold/
cp /u01/oradata/ORCL/*.ctl /backup/cold/
cp /u01/oradata/ORCL/*.log /backup/cold/
cp $ORACLE_HOME/dbs/spfileORCL.ora /backup/cold/

# 步骤 4:启动数据库
sqlplus / as sysdba
STARTUP;


冷备份的优缺点:


| 优点 | 缺点 |

|------|------|

| ✅ 操作简单,不容易出错 | ❌ 需要停机,影响业务 |

| ✅ 恢复简单,直接还原即可 | ⚠️ 备份窗口长(1TB 数据库可能需要数小时) |

| ✅ 数据库一致性最好 | ⚠️ 只能恢复到备份时刻,无法时间点恢复 |


---


3. ⚠️ 热备份(Hot Backup)详解


精确描述:

热备份是在数据库运行状态下,将表空间逐个置于备份模式,然后复制数据文件。需要数据库处于归档模式。


热备份的完整操作步骤:

-- 步骤 1:确认数据库处于归档模式
ARCHIVE LOG LIST;

-- 步骤 2:将表空间置于备份模式
ALTER TABLESPACE users BEGIN BACKUP;

-- 步骤 3:在操作系统层面复制数据文件
-- cp /u01/oradata/ORCL/users01.dbf /backup/hot/

-- 步骤 4:结束备份模式
ALTER TABLESPACE users END BACKUP;

-- 步骤 5:对所有表空间重复步骤 2-4

-- 步骤 6:备份控制文件
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/hot/control.bkp';


热备份的原理:为什么需要 BEGIN BACKUP?

当表空间处于 BACKUP 模式时,LGWR 会记录完整的块镜像到联机重做日志。 如果备份过程中数据块被修改(导致备份的数据块不一致),恢复时可以使用日志中的完整镜像修复。


---


四、RMAN 备份深度解析


1. ✅ RMAN 的本质与优势


精确描述:

RMAN(Recovery Manager)是 Oracle 官方提供的备份恢复工具,集成在 Oracle 内核中,支持全备份、增量备份、块级校验、坏块检测、自动备份控制文件等功能。


RMAN 对比手工备份的七大优势:


| 序号 | 优势 | 说明 |

|------|------|------|

| 1 | 增量备份 | ✅ 只备份变化的数据块,节省 80% 以上空间 |

| 2 | 块级校验 | 自动检测物理坏块和逻辑坏块 |

| 3 | 自动备份控制文件 | 每次备份后自动备份控制文件和参数文件 |

| 4 | 压缩备份 | 支持备份压缩,减少存储空间 |

| 5 | 加密备份 | 支持备份加密,保护数据安全 |

| 6 | 自动管理备份片 | 自动分割和命名备份文件 |

| 7 | 恢复目录 | 可选的集中备份元数据管理 |


---


2. RMAN 全备份操作


# 连接 RMAN
rman target /

# 全库备份+归档日志
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;

# 全库备份+归档日志+控制文件自动备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
# 控制文件自动备份需提前配置
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;


备份文件位置查看:

-- 查看 RMAN 备份信息
SELECT 
    recid,
    backup_type,
    incremental_level,
    compressed,
    device_type,
    completion_time,
    round(bytes/1024/1024/1024, 2) AS size_gb
FROM v$backup_set
ORDER BY completion_time DESC
FETCH FIRST 10 ROWS ONLY;


---


3. RMAN 增量备份操作


0 级增量备份(相当于全备份):

rman target /
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG DELETE INPUT;


1 级差异增量备份(基于最近一次同级或更低级备份):

rman target /
RMAN> BACKUP INCREMENTAL LEVEL 1 DIFFERENTIAL DATABASE PLUS ARCHIVELOG;


1 级累积增量备份(基于最近一次 0 级备份):

rman target /
RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE PLUS ARCHIVELOG;


---


4. RMAN 常用配置


rman target /
# 配置保留策略(保留 7 天的备份)
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

# 配置控制文件自动备份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/%F';

# 配置备份压缩
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET;

# 配置并行度
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;

# 查看所有配置
RMAN> SHOW ALL;


---


五、逻辑备份深度解析


1. 逻辑备份的本质定义


精确描述:

逻辑备份是导出数据库中的逻辑对象(表、视图、存储过程等)的 SQL 语句和数据,备份的是可读的 SQL 脚本或二进制 DMP 文件,恢复时重新执行 SQL 或导入数据。


逻辑备份与物理备份的对比:


| 对比维度 | 物理备份 | 逻辑备份 |

|----------|----------|----------|

| 备份内容 | 二进制数据文件 | SQL 语句+数据 |

| 恢复粒度 | 整个数据库/表空间/数据文件 | ✅ 单表/单模式 |

| 恢复速度 | ✅ 快(直接复制文件) | 慢(需要执行 SQL) |

| 跨版本迁移 | 有限制 | ✅ 支持 |

| 跨平台迁移 | 有限制 | ✅ 支持 |


---


2. Data Pump(expdp/impdp)实战


创建导出目录:

CREATE OR REPLACE DIRECTORY dpump_dir AS '/backup/datapump';
GRANT READ, WRITE ON DIRECTORY dpump_dir TO scott;


全库导出:

expdp system/password DIRECTORY=dpump_dir \
      DUMPFILE=full_$(date +%Y%m%d).dmp \
      LOGFILE=full_export.log \
      FULL=Y PARALLEL=4


按 SCHEMA 导出:

expdp system/password DIRECTORY=dpump_dir \
      DUMPFILE=schema_scott.dmp \
      SCHEMAS=SCOTT


按表导出:

expdp system/password DIRECTORY=dpump_dir \
      DUMPFILE=table_orders.dmp \
      TABLES=SCOTT.ORDERS


按表空间导出:

expdp system/password DIRECTORY=dpump_dir \
      DUMPFILE=tbs_users.dmp \
      TABLESPACES=USERS


---


六、生产环境备份策略最佳实践


1. ❌ 推荐的备份组合策略


生产环境备份策略

物理备份-RMAN

逻辑备份-Data Pump

辅助措施

每周日: Level 0全备份

周一至周六: Level 1差异增量

每小时: 归档日志备份

每周日: SCHEMA级别导出

每月1日: 全库导出

控制文件自动备份

控制文件TRACE备份

定期恢复演练


---


2. 完整的 RMAN 备份脚本


#!/bin/bash
# Oracle RMAN 增量备份脚本
# 每周日执行 0 级备份,周一至周六执行 1 级差异增量

export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

BACKUP_DIR=/backup/rman
LOG_FILE=$BACKUP_DIR/rman_backup_$(date +%Y%m%d_%H%M%S).log

# 判断星期几
DAY_OF_WEEK=$(date +%u)

if [ $DAY_OF_WEEK -eq 7 ]; then
    # 周日:0 级全备份
    LEVEL=0
    LEVEL_NAME="Full"
else
    # 周一至周六:1 级差异增量
    LEVEL=1
    LEVEL_NAME="Differential"
fi

echo "Starting Level $LEVEL ($LEVEL_NAME) backup at $(date)" >> $LOG_FILE

rman target / <<EOF >> $LOG_FILE 2>&1
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$BACKUP_DIR/%F';

BACKUP INCREMENTAL LEVEL $LEVEL DATABASE PLUS ARCHIVELOG DELETE INPUT;
DELETE OBSOLETE;
EOF

echo "Backup completed at $(date)" >> $LOG_FILE


---


3. 备份策略核心参数


| 备份类型 | 频率 | 保留时间 | 备份窗口 |

|----------|------|----------|----------|

| RMAN 0 级全备份 | 每周 1 次(周日) | 4 周 | 凌晨 2:00-5:00 |

| RMAN 1 级差异增量 | 每天 1 次 | 7 天 | 凌晨 3:00-3:30 |

| 归档日志备份 | 每小时 1 次 | 7 天 | 每小时整点 |

| 控制文件自动备份 | 每次备份时 | 与全备份一致 | 自动 |

| Data Pump 全库导出 | 每月 1 次 | 3 个月 | 每月 1 日凌晨 |


---


4. 备份验证与监控


-- 检查最近 7 天的备份完成情况
SELECT 
    completion_time,
    input_type,
    incremental_level,
    status,
    time_taken_display
FROM v$rman_backup_job_details
WHERE start_time > SYSDATE - 7
ORDER BY completion_time DESC;

-- 检查备份集是否有过期
SELECT 
    recid,
    handle,
    media,
    completion_time,
    deleted
FROM v$backup_piece
WHERE completion_time > SYSDATE - 7
ORDER BY completion_time DESC;

-- 验证备份的有效性
-- rman target /
-- RMAN> VALIDATE BACKUPSET 12345;
-- RMAN> RESTORE DATABASE VALIDATE;


---


七、备份方式选择决策


根据场景选择备份方式


< 100GB 100GB ~ 1TB 1TB 可以 不可以

选择备份方式

数据库大小?

是否可以停机?

是否需要时间点恢复?

RMAN增量备份

冷备份 + Data Pump

RMAN全备份 + Data Pump

RMAN全备份 + 增量 + 归档日志

RMAN全备份

RMAN 0级 + 1级增量 + 归档日志


---


八、总结:记住这个“保险”类比就够了


【数据库备份 = 给房子买保险】


  • 物理备份(RMAN): 给房子整体投保(重建整栋房子)。恢复快,但粒度粗。
  • 逻辑备份(Data Pump): 给每件家具单独投保(可以只恢复一张桌子)。恢复慢,但粒度细。
  • 冷备份: 把房子锁起来,然后拍照存档。最简单但影响居住。
  • ⚠️ 热备份: 一边住一边拍照,需要记录拍照期间的每笔交易。
  • 增量备份: 只拍摄上次拍照后变化的地方,省胶卷。
  • 最好的备份策略: RMAN 全备份 + 增量备份 + 归档日志备份 + Data Pump 导出 + 定期恢复演练。


备份不是成本,而是保险。没有经过恢复验证的备份不是备份,只是心理安慰。定期进行恢复演练,确保备份真正可用,是每个 DBA 应尽的职责。


你在生产环境中使用哪种备份方式?是否遇到过备份无法恢复的情况?欢迎评论区分享你的经验。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐