一、开篇场景:停机窗口只有30分钟,如何备份1TB数据库?


某电商系统只有一个凌晨2:00-2:30的维护窗口。<font color=#D32F2F>数据库1TB,冷备份需要先关闭数据库再复制文件,光是复制1TB文件就需要2小时,远超维护窗口。而如果使用RMAN热备份,数据库无需停机,备份在后台自动完成。</font>


这就是冷备份与热备份最核心的区别。<font color=#1976D2>冷备份简单可靠但需要停机,热备份复杂但可以在线运行。选择哪种备份方式,取决于业务对停机时间的容忍度。</font>


今天这篇文章,从原理、操作步骤、优缺点、恢复方式四个维度,彻底讲透冷备份与热备份的区别。


---


二、全景对比图:冷备份与热备份的完整对比


先通过一张架构图,看清冷备份和热备份在操作流程上的根本区别:


热备份流程

数据库正常运行

ALTER TABLESPACE BEGIN BACKUP

使用OS命令复制该表空间文件

ALTER TABLESPACE END BACKUP

所有表空间备份完毕?

备份控制文件

备份完成-数据库始终可用

冷备份流程

正常关闭数据库

SHUTDOWN NORMAL/IMMEDIATE

使用OS命令复制文件

cp *.dbf *.ctl *.log /backup/

启动数据库 STARTUP

备份完成-数据库可用


关键区别解读:

  • <font color=#D32F2F>红色(冷备份关键步骤):</font> 必须先关闭数据库,业务中断。
  • <font color=#388E3C>绿色(热备份关键步骤):</font> 表空间逐个进入备份模式,数据库始终可用。
  • <font color=#1976D2>蓝色(冷备份结果):</font> 一个时间点的一致性快照。
  • <font color=#F57C00>橘色(热备份结果):</font> 需要配合归档日志才能恢复到一致状态。


---


三、冷备份(Cold Backup)深度解析


1. <font color=#D32F2F>冷备份的本质定义</font>


精确描述:

冷备份(Cold Backup)也称为离线备份(Offline Backup),是在数据库完全关闭的状态下,<font color=#1976D2>使用操作系统命令直接复制所有物理文件(数据文件、控制文件、联机重做日志、参数文件)到备份目录。</font>


冷备份的核心特征:

  • 数据库必须处于关闭状态(SHUTDOWN NORMAL/IMMEDIATE/TRANSACTIONAL)。
  • 备份的是完整的数据文件,不依赖归档日志。
  • 恢复时直接将文件还原到原位置即可。
  • 备份的文件具有完全一致性(因为数据库已正常关闭)。


---


2. <font color=#1976D2>冷备份的完整操作步骤</font>


步骤一:正常关闭数据库

sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
-- 或 SHUTDOWN NORMAL
-- 或 SHUTDOWN TRANSACTIONAL
-- 绝对不能使用 SHUTDOWN ABORT(会导致数据文件不一致)


步骤二:查看需要备份的所有文件

-- 查看数据文件
SELECT name FROM v$datafile;

-- 查看控制文件
SELECT name FROM v$controlfile;

-- 查看联机重做日志
SELECT member FROM v$logfile;

-- 查看参数文件位置
SHOW PARAMETER spfile;


步骤三:复制所有物理文件

# 创建备份目录
mkdir -p /backup/cold/$(date +%Y%m%d)

# 复制数据文件
cp /u01/oradata/ORCL/*.dbf /backup/cold/$(date +%Y%m%d)/

# 复制控制文件
cp /u01/oradata/ORCL/*.ctl /backup/cold/$(date +%Y%m%d)/

# 复制联机重做日志
cp /u01/oradata/ORCL/*.log /backup/cold/$(date +%Y%m%d)/

# 复制参数文件
cp $ORACLE_HOME/dbs/spfileORCL.ora /backup/cold/$(date +%Y%m%d)/


步骤四:启动数据库

sqlplus / as sysdba
STARTUP;


---


3. <font color=#388E3C>冷备份的恢复步骤</font>


冷备份的恢复非常简单——直接还原文件即可:


-- 步骤1:关闭数据库
SHUTDOWN ABORT;  -- 如果数据库无法正常关闭

-- 步骤2:还原所有备份文件到原位置
-- cp /backup/cold/20260712/*.dbf /u01/oradata/ORCL/
-- cp /backup/cold/20260712/*.ctl /u01/oradata/ORCL/
-- cp /backup/cold/20260712/*.log /u01/oradata/ORCL/
-- cp /backup/cold/20260712/spfileORCL.ora $ORACLE_HOME/dbs/

-- 步骤3:启动数据库
STARTUP;


---


4. <font color=#D32F2F>冷备份的优缺点</font>


| 优点 | 缺点 |

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

| <font color=#388E3C>操作简单,不容易出错</font> | <font color=#D32F2F>必须停机,影响业务</font> |

| <font color=#388E3C>恢复简单,直接复制还原</font> | <font color=#F57C00>备份窗口长(大数据库需要数小时)</font> |

| <font color=#388E3C>备份文件完全一致</font> | <font color=#F57C00>只能恢复到备份时刻,无法时间点恢复</font> |

| <font color=#388E3C>不依赖归档日志</font> | <font color=#F57C00>备份频率低(通常每周或每月一次)</font> |

| <font color=#388E3C>适合开发测试环境</font> | <font color=#D32F2F>不适合7×24小时生产环境</font> |


---


四、热备份(Hot Backup)深度解析


1. <font color=#F57C00>热备份的本质定义</font>


精确描述:

热备份(Hot Backup)也称为在线备份(Online Backup),是在数据库正常运行的状态下,<font color=#1976D2>将表空间逐个置于备份模式(BEGIN BACKUP),然后复制该表空间的数据文件,最后结束备份模式(END BACKUP)。</font>


热备份的核心特征:

  • 数据库必须处于归档模式(ARCHIVELOG)
  • 备份期间数据库正常运行,用户可以继续操作。
  • 备份的数据文件可能不一致(备份期间数据块可能被修改)。
  • 恢复时需要应用归档日志将数据文件恢复到一致状态。


---


2. <font color=#1976D2>热备份的完整操作步骤</font>


前置检查:确认归档模式

-- 检查是否处于归档模式
ARCHIVE LOG LIST;
-- 或者
SELECT log_mode FROM v$database;

-- 如果不是归档模式,需要开启
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;


步骤一:逐个表空间进行备份

-- 对USERS表空间进行热备份
ALTER TABLESPACE users BEGIN BACKUP;
-- 此时USERS表空间处于备份模式

-- 在操作系统层面复制USERS表空间的数据文件
-- cp /u01/oradata/ORCL/users01.dbf /backup/hot/

-- 结束备份模式
ALTER TABLESPACE users END BACKUP;


步骤二:对所有表空间重复操作

-- 查看所有表空间
SELECT tablespace_name FROM dba_tablespaces;

-- 对SYSTEM表空间
ALTER TABLESPACE system BEGIN BACKUP;
-- cp /u01/oradata/ORCL/system01.dbf /backup/hot/
ALTER TABLESPACE system END BACKUP;

-- 对SYSAUX表空间
ALTER TABLESPACE sysaux BEGIN BACKUP;
-- cp /u01/oradata/ORCL/sysaux01.dbf /backup/hot/
ALTER TABLESPACE sysaux END BACKUP;

-- 对UNDOTBS1表空间
ALTER TABLESPACE undotbs1 BEGIN BACKUP;
-- cp /u01/oradata/ORCL/undotbs01.dbf /backup/hot/
ALTER TABLESPACE undotbs1 END BACKUP;


步骤三:备份控制文件

-- 以二进制方式备份控制文件
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/hot/control.bkp';

-- 同时生成CREATE CONTROLFILE脚本(推荐)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/backup/hot/control.sql';


步骤四:切换日志并备份归档日志

-- 切换日志,使当前日志归档
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM ARCHIVE LOG CURRENT;

-- 备份归档日志
-- cp /u01/archivelog/*.arc /backup/hot/archivelog/


---


3. <font color=#D32F2F>热备份的核心原理:为什么需要BEGIN BACKUP?</font>


这是热备份最核心的技术问题。<font color=#1976D2>当表空间处于BEGIN BACKUP模式时,Oracle会做两件关键事情:</font>


机制一:记录完整块镜像到REDO日志

正常情况:LGWR只记录变更向量(修改了哪几个字节)
备份模式:LGWR记录整个块的完整镜像

原因:如果在备份复制过程中,数据块正在被修改:
- 操作系统可能复制到一个“分裂块”(一半旧数据+一半新数据)
- 恢复时使用REDO中的完整块镜像替换这个分裂块


机制二:冻结数据文件头

正常情况:数据文件头的检查点SCN会不断更新
备份模式:数据文件头的检查点SCN被冻结

原因:备份期间数据文件可能被修改,需要记录备份开始时的SCN
恢复时从该SCN开始应用归档日志


<font color=#D32F2F>如果执行了BEGIN BACKUP但忘记执行END BACKUP,会导致联机重做日志急剧膨胀!</font>


---


4. <font color=#388E3C>热备份的优缺点</font>


| 优点 | 缺点 |

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

| <font color=#388E3C>不需要停机,业务不中断</font> | <font color=#F57C00>操作较复杂,容易出错</font> |

| <font color=#388E3C>可以频繁备份(每天甚至每小时)</font> | <font color=#D32F2F>必须开启归档模式</font> |

| <font color=#388E3C>支持时间点恢复</font> | <font color=#F57C00>恢复时需要应用归档日志</font> |

| <font color=#388E3C>适合7×24小时生产环境</font> | <font color=#F57C00>备份期间REDO日志量增大</font> |

| <font color=#388E3C>可只备份特定表空间</font> | <font color=#D32F2F>备份期间表空间不能正常OFFLINE</font> |


---


五、冷备份与热备份的七大核心区别


| 序号 | 对比维度 | <font color=#D32F2F>冷备份(Cold Backup)</font> | <font color=#F57C00>热备份(Hot Backup)</font> |

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

| 1 | 数据库状态 | <font color=#D32F2F>必须关闭(SHUTDOWN)</font> | <font color=#388E3C>正常运行(OPEN)</font> |

| 2 | 是否停机 | <font color=#D32F2F>是,业务中断</font> | <font color=#388E3C>否,业务不受影响</font> |

| 3 | 归档模式 | 不需要 | <font color=#D32F2F>必须开启</font> |

| 4 | 备份一致性 | <font color=#388E3C>完全一致</font> | <font color=#F57C00>可能不一致(需要恢复)</font> |

| 5 | 恢复复杂度 | <font color=#388E3C>简单(直接还原)</font> | 较复杂(需应用归档日志) |

| 6 | 时间点恢复 | <font color=#D32F2F>不支持</font> | <font color=#388E3C>支持(需归档日志)</font> |

| 7 | 适用场景 | 开发/测试/可停机维护窗口 | <font color=#388E3C>7×24小时生产环境</font> |


---


六、实战对比:冷备份与热备份的操作时间对比


<font color=#1976D2>测试场景</font>

  • 数据库大小:500GB
  • 磁盘I/O速度:200MB/s(复制速度)


<font color=#D32F2F>冷备份时间</font>

停机时间 = 关闭数据库(1分钟) + 复制文件(500GB/200MB=43分钟) + 启动数据库(2分钟)
总停机时间 = 约46分钟
备份窗口 = 约46分钟


<font color=#F57C00>热备份时间</font>

停机时间 = 0分钟
备份窗口 = 约43分钟(但数据库始终可用)
额外操作时间 = 逐个表空间BEGIN/END BACKUP(约5分钟)


---


七、现代Oracle备份的最佳实践


<font color=#388E3C>强烈推荐:使用RMAN替代手工热备份</font>


手工热备份虽然可行,但强烈不建议在生产环境中使用。<font color=#D32F2F>手工热备份容易出错(忘记END BACKUP、漏备份表空间),恢复时操作复杂。</font>


推荐使用RMAN热备份:

# RMAN热备份——一行命令完成
rman target /
RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;


RMAN热备份的优势:

  • 自动处理BEGIN/END BACKUP逻辑。
  • 自动备份控制文件和参数文件。
  • 支持增量备份。
  • 支持块级校验和坏块检测。
  • 恢复时自动选择需要的备份和归档日志。


---


八、总结:记住这个“餐厅盘点”类比就够了


<font color=#1976D2>【冷备份是关门盘点,热备份是营业中盘点】</font>


  • 冷备份(Cold Backup): <font color=#D32F2F>餐厅关门歇业,把所有库存搬到仓库一件一件清点。</font> 结果精确,但影响了所有客人。适合小店(开发环境)、深夜(维护窗口)。
  • 热备份(Hot Backup): <font color=#F57C00>餐厅正常营业,服务员一边招呼客人,一边逐桌清点餐具。</font> 需要记录清点期间的每一笔交易(归档日志),最后汇总时把清点期间的交易补上。客人感知不到,但操作复杂。
  • RMAN热备份: <font color=#388E3C>请了一家专业的盘点公司,他们自带扫描枪,自动清点,自动记录,自动汇总。</font> 省心省力,出错率极低。
  • 生产环境建议: <font color=#388E3C>永远不要使用手工热备份,始终使用RMAN。冷备份只用于特殊场景(如迁移、克隆、开发环境)。</font>


<font color=#1976D2>理解冷备份和热备份的区别,是制定数据库备份策略的基础。虽然现在RMAN已经取代了手工备份,但理解底层原理对于故障处理和数据恢复仍然至关重要。</font>


你的生产环境使用过手工热备份吗?是否遇到过忘记END BACKUP导致的REDO暴涨问题?欢迎评论区分享你的经验。


---


Logo

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

更多推荐