O Oracle DBA 运维知识库

备份恢复

按恢复目标选择 RMAN 或 Data Pump 路线,先检查材料和空间,再做恢复演练。

先选恢复路线

恢复路线:整库或时间点恢复使用 RMAN;对象迁移使用 Data Pump

目标所需材料常用工具说明
恢复整库或恢复到指定时间RMAN 备份、控制文件/恢复目录、所需归档日志RMAN按备份链和归档覆盖范围恢复数据文件并应用 redo
导入 schema 或表Data Pump dump 文件、目标库、目录对象impdp逻辑导入,不等同于整库灾备恢复
备库追日志或同步中断主备日志序列、备份和归档状态Data Guard / RMAN先确认缺失日志和空间;无法补齐时由 DBA 评估重建或增量同步

先明确恢复点(时间或 SCN)、目标库、允许停机时间、可用备份和归档范围。备份文件存在不代表恢复链完整,先核对备份可读性及日志覆盖。

恢复前检查

在目标库执行以下只读查询:

  • SELECT ... FROM v$database:确认数据库名称、打开模式和主备角色,避免连错库。
  • SELECT ... FROM v$datafile:汇总数据文件大小;不包含临时文件、归档和恢复所需额外空间。文件无法访问时 BYTES 可能为 0,故障后还需结合 RMAN 文件记录和故障前容量记录估算。
  • SELECT ... FROM v$recovery_file_dest:查看快速恢复区容量和已用空间,评估归档/FRA 是否有余量。
SELECT name, db_unique_name, open_mode, database_role
FROM   v$database;

SELECT ROUND(SUM(bytes) / POWER(1024, 3), 2) AS datafile_gb
FROM   v$datafile;

SELECT name,
       ROUND(space_limit / POWER(1024, 3), 2) AS fra_limit_gb,
       ROUND(space_used / POWER(1024, 3), 2) AS fra_used_gb
FROM   v$recovery_file_dest;

以下为 SQL*Plus 查询结果示意,数据为模拟值:

SQL 查询结果模拟图,数据库角色为 PRIMARY,数据文件和 FRA 容量为示例值

在数据库服务器上检查目标挂载点。把路径替换成实际目标目录:

  • df -h 查看文件系统容量、已用量和可用空间。
  • df -i 检查 inode 是否耗尽;空间有余量时 inode 仍可能先用完。
df -h /u02/oradata
df -i /u02/oradata

以下为 df 输出示意,容量和挂载点均为模拟值:

df 命令输出模拟图,显示文件系统容量和 inode 使用情况

将 /u02/oradata 替换为实际数据文件目标目录。RMAN 还原需要考虑数据文件、临时文件、归档/FRA、控制文件及运行期间的额外空间;文件总量不等于所需磁盘空间。目标库已有文件时,先确认映射和覆盖策略。

RMAN:检查备份与恢复

以具备相应权限的 Oracle 软件属主登录后执行:

  • export ORACLE_SID=ORCL:设置本次 shell 的实例标识;将示例 ORCL 替换为现场 SID。
  • rman target /:使用操作系统认证连接本机实例;执行账号需具备相应管理权限。
export ORACLE_SID=ORCL
rman target /

进入 RMAN 后逐条执行以下只读检查:

  • SHOW ALL:查看 RMAN 配置,例如备份保留策略和设备类型。
  • LIST BACKUP SUMMARY:列出备份概要,初步确认备份集及时间范围。
  • RESTORE DATABASE PREVIEW SUMMARY:预览 RMAN 为恢复数据库选择的备份,不实际还原数据文件。
SHOW ALL;
LIST BACKUP SUMMARY;
RESTORE DATABASE PREVIEW SUMMARY;

以下为 RMAN 预览输出示意,备份片名称和时间为模拟值:

RMAN 预览输出模拟图,展示可用于恢复的数据文件备份和归档日志

RESTORE DATABASE VALIDATE:读取选中的数据文件备份并检查其可读性,不实际还原文件;它不单独证明完整归档链和业务可恢复性。该操作可能产生较高 I/O,应在演练或已批准窗口运行。

RESTORE DATABASE VALIDATE;

以下物理恢复示例从实例已关闭、当前控制文件和备份可用的状态开始:

  • STARTUP MOUNT:将实例启动到挂载状态,为介质恢复做准备。
  • RESTORE DATABASE:从 RMAN 备份还原数据文件,会写入目标存储。
  • RECOVER DATABASE:应用增量备份和归档 redo,使数据文件恢复到一致状态。
STARTUP MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;

执行前必须确定目标时间/SCN、控制文件来源、数据文件路径、归档可用范围及实例状态。是否需要重命名/切换文件、恢复后是否 OPEN RESETLOGS,取决于数据库状态和恢复类型;按经审核的现场 runbook 执行。不要在未确认目标库和覆盖范围时运行 RESTORE、RECOVER。

全量、增量与块变更跟踪

  • Level 0 是增量备份基线,配合后续 Level 1 和所需 redo 完成恢复;普通 full backup 不能替代 Level 0 作为 Level 1 的父备份。
  • 块变更跟踪(BCT)帮助 RMAN 增量备份识别发生变化的数据块,主要减少增量备份扫描;它本身不会加速还原。是否启用由 DBA 结合版本、存储和备份策略决定。
  • 恢复速度主要受备份读取、网络传输、目标存储写入及 redo 应用能力约束。并行度应通过演练调整,盲目提高可能加重 I/O 竞争。

差异增量恢复链:还原 Level 0,应用后续 Level 1,再应用所需归档和联机 redo;普通 full backup 不是 Level 0 增量基线。

Data Pump:导入 schema 示例

先确认 dump 文件完整,目标 PDB 中已创建 APP 用户并具备所需建对象权限、表空间配额,以及 DP_DIR 目录对象的 READ/WRITE 权限。下面以 APP 导入自己的 schema 为例,连接别名 TARGET_PDB 指向目标 PDB 服务,再准备 restore.par:

参数作用
DIRECTORY=DP_DIR使用已创建并授权的数据库目录对象,不是操作系统路径。
DUMPFILE=app_%U.dmp指定 dump 文件模板;%U 对应 01、02 等编号,需与导出文件命名一致。
LOGFILE=app_import.log指定导入日志,供检查对象和错误。
SCHEMAS=APP指定导入 APP schema。
PARALLEL=4将活动执行进程的并行度上限设为 4,需按文件数量和资源测试调整。
DIRECTORY=DP_DIR
DUMPFILE=app_%U.dmp
LOGFILE=app_import.log
SCHEMAS=APP
PARALLEL=4

确认连接别名 TARGET_PDB、参数文件路径和目标库无误后执行导入。impdp 启动 Data Pump 导入并读取 restore.par,运行时按提示输入密码;该命令会写入目标库:

impdp APP@TARGET_PDB PARFILE=restore.par

以下为 Data Pump 导入日志示意,导入对象数和耗时为模拟值:

Data Pump 导入输出模拟图,展示作业启动、对象导入和作业完成信息

按提示输入密码,不要把密码写进命令行或参数文件。DP_DIR 是数据库目录对象,不是客户端本地目录;RAC 环境下 dump 文件目录须对相关实例可访问。PARALLEL 限制活动执行进程数,包括 worker 和并行 I/O 进程,不计空闲 worker 与并行协调进程;大于 1 需要 Enterprise Edition,单个表或分区使用并行查询进程导入还需要 DATAPUMP_IMP_FULL_DATABASE 角色。实际并行度还受对象类型、文件数量和资源限制。

场景示例:数据盘故障后的整库恢复

场景假设(均为模拟值): Oracle 19c 单实例 CDB,数据文件约 1 TB;数据盘故障导致数据库无法打开。控制文件、参数文件和所有所需联机 redo 日志均可用,备份位于未损坏的磁盘。RMAN 有 Level 0、后续 Level 1 和连续归档,尚未归档的尾部 redo 可从联机日志读取。目标是完全恢复到故障前最新状态。

模拟场景流程:检查备份链,RMAN 还原数据文件,应用增量和归档日志,打开并验收数据库

命令步骤

以下命令链按本场景假设编写:数据库运行在 ARCHIVELOG 模式,实例已关闭,控制文件和参数文件可用,数据文件恢复到原路径,RMAN 自动通道已配置。先修复或更换数据盘,确保原路径可写;将示例 SID ORCL 换成实际实例名。

  1. 连接目标实例

export ORACLE_SID=ORCL 设置本次 shell 的实例;rman target / 以操作系统认证连接本机数据库,账号需具备 SYSDBA 或 SYSBACKUP 权限。

export ORACLE_SID=ORCL
rman target /
  1. 挂载并检查备份

在 RMAN 提示符执行。STARTUP MOUNT 启动到挂载状态;SHOW ALL 查看备份设备等配置;LIST BACKUP SUMMARY 查看备份记录;PREVIEW 预览恢复计划;VALIDATE 实际读取备份检查可用性,会产生 I/O。

STARTUP MOUNT;
SHOW ALL;
LIST BACKUP SUMMARY;
RESTORE DATABASE PREVIEW SUMMARY;
RESTORE DATABASE VALIDATE;
  1. 还原数据文件并应用日志

确认目标路径、备份集及空间无误后再执行。RESTORE 会写入目标磁盘;RECOVER 自动应用 RMAN 所需的增量备份和归档日志。

RESTORE DATABASE;
RECOVER DATABASE;
  1. 打开数据库

完全恢复成功后,在 RMAN 提示符执行 EXIT 返回 shell;再启动 SQL*Plus:

EXIT
sqlplus / as sysdba

在 SQL*Plus 执行 ALTER DATABASE OPEN,将数据库打开供访问:

ALTER DATABASE OPEN;
  1. 检查恢复状态

查询 CDB 打开状态、数据文件头及 PDB 状态,再进行应用连接和关键业务读写验证。

SELECT name, open_mode, database_role
FROM   v$database;

SELECT file#, status, error, recover
FROM   v$datafile_header
ORDER BY file#;

SELECT con_id, name, open_mode, restricted
FROM   v$pdbs
ORDER BY con_id;

若业务 PDB 未打开,在 CDB 根容器执行以下命令;将 APP_PDB 换成上一步查到的业务 PDB 名称,不能对 PDB$SEED 执行此操作:

-- 打开指定业务 PDB,随后再次查询 V$PDBS 确认状态。
ALTER PLUGGABLE DATABASE APP_PDB OPEN;

以上步骤会修改目标数据库和存储,只能在确认目标实例、备份链、文件路径及维护窗口后执行。若实例并非关闭状态,不要重复执行 STARTUP MOUNT;若数据文件需改到新路径,还要规划 SET NEWNAME 和 SWITCH DATAFILE ALL。控制文件恢复、联机 redo 损坏、归档缺失或时间点恢复均需采用不同流程,不能直接套用本例。

结果记录(示例,不是时长承诺): 数据文件还原 3 小时 10 分、redo 恢复 50 分、业务验收 30 分;合计约 4 小时 30 分。真实耗时取决于备份压缩率、读取速度、目标存储写入、归档量和并行配置,应以本环境恢复演练为准。

适用边界: 如果控制文件或联机 redo 也损坏、归档日志缺失,或目标是恢复到误操作前的时间点,这套完全恢复步骤不适用;需要按控制文件恢复、可用日志范围或时间点恢复重新制定方案。

On this page