news 2026/5/13 2:16:17

【Oracle数据库指南】第25篇:Oracle备份与恢复基础详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Oracle数据库指南】第25篇:Oracle备份与恢复基础详解

上一篇【第24篇】Oracle数据字典与动态性能视图详解
下一篇明日更新,敬请期待


摘要

备份与恢复是Oracle数据库管理的核心任务,关系到数据的安全性和业务的连续性。本文详细讲解Oracle备份的分类(物理备份与逻辑备份)、RMAN(Recovery Manager)的使用、冷备份与热备份的操作流程、不完全恢复与完全恢复的场景,以及RMAN实战脚本,帮助DBA构建可靠的备份恢复体系。


一、备份与恢复概述

1.1 为什么需要备份

  • 硬件故障:磁盘损坏、服务器故障
  • 人为错误:误删除表、错误更新数据
  • 软件故障:Oracle Bug、操作系统崩溃
  • 灾难恢复:火灾、地震等不可抗力
  • 数据迁移:数据库迁移、升级

1.2 备份类型分类

Oracle备份 ├── 物理备份(Physical Backup) │ ├── 冷备份(Consistent Backup / Offline Backup) │ └── 热备份(Hot Backup / Online Backup) │ ├── RMAN备份(推荐) │ └── 用户管理备份(User-Managed Backup) └── 逻辑备份(Logical Backup) ├── EXP/IMP(经典工具) └── EXPDP/IMPDP(数据泵,推荐)

二、冷备份(Consistent Backup)

2.1 冷备份概述

冷备份是在数据库完全关闭状态下进行的备份,也称为一致性备份。

优点

  • 操作简单
  • 备份文件一致
  • 恢复速度快

缺点

  • 需要关闭数据库(业务中断)
  • 只适用于可停机环境

2.2 冷备份步骤

-- 步骤1:关闭数据库SHUTDOWNIMMEDIATE;-- 步骤2:在操作系统中复制所有数据文件、控制文件、重做日志文件-- cp /u01/oradata/testdb/*.dbf /backup/-- cp /u01/oradata/testdb/*.ctl /backup/-- cp /u01/oradata/testdb/*.log /backup/-- 步骤3:备份参数文件-- cp $ORACLE_HOME/dbs/spfiletestdb.ora /backup/-- 步骤4:启动数据库STARTUP;

2.3 冷备份脚本

#!/bin/bash# cold_backup.sh - Oracle冷备份脚本exportORACLE_SID=testdbexportORACLE_HOME=/u01/oracle/product/11.2.0/dbhome_1exportPATH=$ORACLE_HOME/bin:$PATHBACKUP_DIR=/backup/cold/$ORACLE_SID/$(date+%Y%m%d)mkdir-p$BACKUP_DIRecho"=== 关闭数据库 ==="sqlplus / as sysdba<<EOF SHUTDOWN IMMEDIATE; EXIT; EOFecho"=== 复制数据文件 ==="cp/u01/oradata/$ORACLE_SID/*.dbf$BACKUP_DIR/echo"=== 复制控制文件 ==="cp/u01/oradata/$ORACLE_SID/*.ctl$BACKUP_DIR/echo"=== 复制重做日志 ==="cp/u01/oradata/$ORACLE_SID/*.log$BACKUP_DIR/echo"=== 备份参数文件 ==="cp$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora$BACKUP_DIR/echo"=== 启动数据库 ==="sqlplus / as sysdba<<EOF STARTUP; EXIT; EOFecho"=== 冷备份完成 ==="

三、热备份(Hot Backup / Online Backup)

3.1 热备份概述

热备份是在数据库运行期间进行的备份,需要数据库运行在**归档模式(ARCHIVELOG)**下。

优点

  • 不需要关闭数据库(业务不中断)
  • 支持时间点恢复

缺点

  • 操作复杂
  • 会产生额外的重做日志归档
  • 恢复时间较长

3.2 用户管理的热备份

-- 步骤1:检查数据库是否在归档模式SELECTlog_modeFROMv$database;-- 如果不是ARCHIVELOG,需要先切换到归档模式-- 步骤2:开始备份表空间ALTERTABLESPACEusers_dataBEGINBACKUP;-- 步骤3:在操作系统中复制数据文件-- cp /u01/oradata/testdb/users01.dbf /backup/-- 步骤4:结束备份ALTERTABLESPACEusers_dataENDBACKUP;-- 步骤5:备份归档日志-- cp /u03/archive/testdb/*.arc /backup/archive/-- 步骤6:备份控制文件ALTERDATABASEBACKUPCONTROLFILETO'/backup/control.bkp';

3.3 查看备份状态

-- 查看哪些表空间处于备份模式SELECT*FROMv$backup;-- 查看数据文件头部的检查点信息SELECTfile#, status, checkpoint_change# FROM v$datafile_header;

四、RMAN(Recovery Manager)备份

4.1 RMAN概述

RMAN是Oracle提供的专用备份恢复工具,支持增量备份、压缩备份、加密备份等高级功能。

RMAN优点

  • 自动管理备份集
  • 支持增量备份
  • 支持块级别的恢复
  • 集成Catalog目录(可选)

4.2 RMAN基本命令

# 启动RMANrman target /# 查看RMAN配置RMAN>SHOW ALL;# 配置备份集保留策略(保留7天)RMAN>CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF7DAYS;# 配置备份集冗余度(保留2份)RMAN>CONFIGURE RETENTION POLICY TO REDUNDANCY2;# 配置控制文件自动备份RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;# 配置备份集压缩RMAN>CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET;

4.3 RMAN全库备份

# 全库备份(包括数据文件、控制文件、SPFILE)rman target /<<EOF RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/backup/rman/%U'; BACKUP DATABASE PLUS ARCHIVELOG; RELEASE CHANNEL ch1; } EOF

4.4 RMAN增量备份

# 增量备份级别0(全量基础备份)rman target /<<EOF BACKUP INCREMENTAL LEVEL 0 DATABASE; EOF# 增量备份级别1(差异备份,默认)rman target /<<EOF BACKUP INCREMENTAL LEVEL 1 DATABASE; EOF# 增量备份级别1(累积备份)rman target /<<EOF BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE; EOF

4.5 RMAN表空间备份

# 备份单个表空间rman target /<<EOF BACKUP TABLESPACE users_data; EOF# 备份多个表空间rman target /<<EOF BACKUP TABLESPACE users_data, users_index; EOF

4.6 RMAN归档日志备份

# 备份归档日志rman target /<<EOF BACKUP ARCHIVELOG ALL; EOF# 备份归档日志并删除已备份的归档rman target /<<EOF BACKUP ARCHIVELOG ALL DELETE INPUT; EOF

五、RMAN恢复

5.1 完全恢复(Complete Recovery)

完全恢复将数据库恢复到最近一次提交的事务

# 恢复整个数据库rman target /<<EOF STARTUP FORCE MOUNT; RESTORE DATABASE; RECOVER DATABASE; ALTER DATABASE OPEN; EOF# 恢复表空间rman target /<<EOF SQL 'ALTER TABLESPACE users_data OFFLINE'; RESTORE TABLESPACE users_data; RECOVER TABLESPACE users_data; SQL 'ALTER TABLESPACE users_data ONLINE'; EOF

5.2 不完全恢复(Incomplete Recovery)

不完全恢复将数据库恢复到指定的时间点或SCN

# 基于时间点的恢复(Time-Based Recovery)rman target /<<EOF STARTUP FORCE MOUNT; RUN { SET UNTIL TIME "TO_DATE('2024-01-15 10:30:00', 'YYYY-MM-DD HH24:MI:SS')"; RESTORE DATABASE; RECOVER DATABASE; } ALTER DATABASE OPEN RESETLOGS; EOF# 基于SCN的恢复(SCN-Based Recovery)rman target /<<EOF STARTUP FORCE MOUNT; RUN { SET UNTIL SCN 1234567; RESTORE DATABASE; RECOVER DATABASE; } ALTER DATABASE OPEN RESETLOGS; EOF# 基于日志序列号的恢复(Sequence-Based Recovery)rman target /<<EOF STARTUP FORCE MOUNT; RUN { SET UNTIL SEQUENCE 100 THREAD 1; RESTORE DATABASE; RECOVER DATABASE; } ALTER DATABASE OPEN RESETLOGS; EOF

六、逻辑备份(EXPDP/IMPDP)

6.1 数据泵(Data Pump)概述

数据泵是Oracle 10g引入的逻辑备份工具,替代传统的EXP/IMP。

优点

  • 速度快(并行、直接路径)
  • 支持断点续传
  • 支持远程导出/导入
  • 支持表空间传输

6.2 创建数据泵目录

-- 创建目录对象CREATEORREPLACEDIRECTORY dpump_dirAS'/backup/datapump';-- 授予目录权限GRANTREAD,WRITEONDIRECTORY dpump_dirTOscott;GRANTDATAPUMP_EXP FULL_DATABASETOsystem;GRANTDATAPUMP_IMP FULL_DATABASETOsystem;

6.3 EXPDP导出

# 导出整个数据库expdp system/passwordFULL=yDIRECTORY=dpump_dirDUMPFILE=full_%U.dmpLOGFILE=full_exp.logPARALLEL=4FILESIZE=2G# 导出指定用户expdp system/passwordSCHEMAS=scottDIRECTORY=dpump_dirDUMPFILE=scott_%U.dmpLOGFILE=scott_exp.log# 导出指定表expdp system/passwordTABLES=scott.emp,scott.deptDIRECTORY=dpump_dirDUMPFILE=tables_%U.dmpLOGFILE=tables_exp.log# 导出时排除某些对象expdp system/passwordSCHEMAS=scottDIRECTORY=dpump_dirDUMPFILE=scott_nodata.dmpLOGFILE=scott_exp.logEXCLUDE=TABLE

6.4 IMPDP导入

# 导入整个数据库impdp system/passwordFULL=yDIRECTORY=dpump_dirDUMPFILE=full_%U.dmpLOGFILE=full_imp.log# 导入指定用户impdp system/passwordSCHEMAS=scottDIRECTORY=dpump_dirDUMPFILE=scott_%U.dmpLOGFILE=scott_imp.log# 导入时重映射用户(从scott导入到app_user)impdp system/passwordDIRECTORY=dpump_dirDUMPFILE=scott_%U.dmpREMAP_SCHEMA=scott:app_userLOGFILE=remap_imp.log# 导入时重映射表空间impdp system/passwordDIRECTORY=dpump_dirDUMPFILE=scott_%U.dmpREMAP_TABLESPACE=users_data:new_data_tsLOGFILE=remap_ts_imp.log

七、RMAN实战脚本

7.1 每日全备脚本

#!/bin/bash# daily_rman_backup.sh - RMAN每日全备脚本exportORACLE_SID=testdbexportORACLE_HOME=/u01/oracle/product/11.2.0/dbhome_1exportPATH=$ORACLE_HOME/bin:$PATHBACKUP_DATE=$(date+%Y%m%d)LOG_FILE=/backup/rman/log/${BACKUP_DATE}_full.log rman target /<<EOF>$LOG_FILE2>&1RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/backup/rman/%U'; BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG; DELETE NOPROMPT OBSOLETE; RELEASE CHANNEL ch1; } EXIT; EOF# 检查RMAN执行结果ifgrep-q"RMAN-"$LOG_FILE;thenecho"RMAN备份失败,请检查日志:$LOG_FILE"exit1elseecho"RMAN备份成功:$LOG_FILE"fi

7.2 增量备份脚本

#!/bin/bash# incremental_backup.sh - RMAN增量备份脚本exportORACLE_SID=testdbexportORACLE_HOME=/u01/oracle/product/11.2.0/dbhome_1BACKUP_DATE=$(date+%Y%m%d)DAY_OF_WEEK=$(date+%u)# 1=Monday, 7=Sundayif[$DAY_OF_WEEK-eq7];then# 周日:级别0备份BACKUP_TYPE="INCREMENTAL LEVEL 0"echo"执行级别0增量备份..."else# 其他日子:级别1差异备份BACKUP_TYPE="INCREMENTAL LEVEL 1"echo"执行级别1增量备份..."firman target /<<EOF RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/backup/rman/%U'; BACKUP$BACKUP_TYPEDATABASE; BACKUP ARCHIVELOG ALL DELETE INPUT; DELETE NOPROMPT OBSOLETE; RELEASE CHANNEL ch1; } EOF

八、恢复场景演练

8.1 场景1:误删除表

-- 如果开启了回收站功能-- 查看回收站SELECTobject_name,original_name,type,droptimeFROMuser_recyclebin;-- 闪回删除的表FLASHBACKTABLEempTOBEFOREDROP;-- 如果未开启回收站或已清空回收站-- 使用RMAN进行时间点恢复(参见5.2节)

8.2 场景2:数据文件损坏

# 步骤1:将数据文件脱机sqlplus / as sysdba<<EOF ALTER DATABASE DATAFILE '/u01/oradata/testdb/users01.dbf' OFFLINE; EOF# 步骤2:使用RMAN还原数据文件rman target /<<EOF RESTORE DATAFILE '/u01/oradata/testdb/users01.dbf'; RECOVER DATAFILE '/u01/oradata/testdb/users01.dbf'; EOF# 步骤3:将数据文件联机sqlplus / as sysdba<<EOF ALTER DATABASE DATAFILE '/u01/oradata/testdb/users01.dbf' ONLINE; EOF

8.3 场景3:控制文件损坏

# 如果有控制文件多路复用,复制完好的控制文件覆盖损坏的--cp/u02/oradata/testdb/control02.ctl /u01/oradata/testdb/control01.ctl# 如果所有控制文件都损坏,需要使用RMAN还原rman target /<<EOF STARTUP FORCE NOMOUNT; RESTORE CONTROLFILE FROM AUTOBACKUP; ALTER DATABASE MOUNT; RECOVER DATABASE; ALTER DATABASE OPEN RESETLOGS; EOF

九、最佳实践

9.1 备份策略设计

  1. 生产环境必须使用归档模式
  2. RMAN备份为主,数据泵备份为辅
  3. 每日全备 + 归档日志备份
  4. 保留多份备份:本地 + 异地 + 磁带库
  5. 定期演练恢复:确保备份可用

9.2 备份监控

-- 查看RMAN备份历史SELECTsession_key,input_type,status,start_time,end_timeFROMv$rman_backup_job_detailsORDERBYstart_timeDESC;-- 查看备份集信息SELECTbs_key,backup_type,status,start_time,end_timeFROMv$backup_set_detailsORDERBYstart_timeDESC;

9.3 备份检查清单

# 1. 检查数据库是否在归档模式sqlplus / as sysdba<<EOF SELECT log_mode FROM v$database; EOF# 2. 检查RMAN备份是否成功grep"RMAN-"/backup/rman/log/*.log# 3. 检查备份集是否完整rman target /<<EOF CROSSCHECK BACKUP; DELETE EXPIRED BACKUP; EOF# 4. 检查回收站是否开启sqlplus / as sysdba<<EOF SHOW PARAMETER recyclebin; EOF

十、总结

Oracle备份与恢复的核心要点:

  1. 备份类型:冷备份(一致性)、热备份(归档模式下)、RMAN备份、数据泵备份
  2. RMAN备份:全备、增量备份、归档日志备份
  3. RMAN恢复:完全恢复、不完全恢复(时间点/SCN/日志序列号)
  4. 逻辑备份:EXPDP/IMPDP数据泵工具
  5. 恢复场景:误删表、数据文件损坏、控制文件损坏
  6. 最佳实践:归档模式、备份策略、定期演练、多地备份

上一篇【第24篇】Oracle数据字典与动态性能视图详解
下一篇明日更新,敬请期待


参考资料

  • 《Oracle 11g数据库管理员指南》— 刘宪军著
  • Oracle官方文档:Database Backup and Recovery User’s Guide
  • Oracle官方文档:Database Utilities - Data Pump Export/Import
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 2:14:21

promptpit:统一管理AI开发工具配置,解决配置碎片化难题

1. 项目概述与核心痛点 如果你和我一样&#xff0c;最近几个月被各种AI开发工具&#xff08;Claude Code、Cursor、GitHub Copilot Chat...&#xff09;的配置文件搞得焦头烂额&#xff0c;那今天这个工具绝对能让你眼前一亮。想象一下这个场景&#xff1a;你在项目A里为Claud…

作者头像 李华
网站建设 2026/5/13 2:13:48

双环路控制电容储能升压电路设计:用12W输入支撑80W脉冲负载

1. 项目概述与核心需求解析在嵌入式系统、工业控制或者一些便携式设备里&#xff0c;我们经常会遇到一个头疼的问题&#xff1a;主电源突然掉电了&#xff0c;但系统还有一些“临终遗言”必须说完。比如&#xff0c;一个数据采集设备正在往存储器里写关键数据&#xff0c;电源一…

作者头像 李华
网站建设 2026/5/13 2:05:59

PaperOrchestra:基于多智能体流水线的AI辅助学术论文自动化写作框架

1. 项目概述&#xff1a;一个为AI编码代理设计的自动化论文写作技能包 如果你和我一样&#xff0c;长期在Claude Code、Cursor或者Antigravity这类AI编码代理里做实验&#xff0c;那你肯定也遇到过这个经典难题&#xff1a;实验做了一大堆&#xff0c;数据、图表、代码都散落在…

作者头像 李华
网站建设 2026/5/13 2:03:08

开源大模型应用商店OpenGPTS:私有化部署与智能体平台搭建指南

1. 项目概述&#xff1a;当开源大模型遇上“应用商店”最近在折腾大语言模型本地部署的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;模型本身跑起来了&#xff0c;对话也流畅&#xff0c;但总感觉差点意思。就像你买了一台性能强悍的电脑&#xff0c;却只能用来打字和…

作者头像 李华