1. 首页 > Oracle教程 > 正文

数据库教程FGMT07‑Oracle数据库备份恢复与数据迁移

数据是业务系统最核心的资产,备份恢复是DBA岗位的底线能力。我是风哥,在大量生产项目实施中,硬件磁盘损坏、人为误删除数据、逻辑损坏等故障场景时有发生,一套完备的备份策略、熟练的恢复操作流程,是保障业务连续性的最后一道防线。风哥 itpux-com

本文基于Oracle19c单机非CDB数据库,硬件规格为**单节点64G内存、8CPU**,数据库实例与数据库名称`fgedudb`,业务操作用户`fgedu`,本地软件路径全部统一替换为`/fgedudb`。教程完整覆盖归档/非归档模式原理、冷备份、热备份、RMAN恢复管理器全套功能、完全恢复、不完全恢复、RMAN同机克隆、RMAN异机迁移、Data Pump(expdp/impdp)逻辑导入导出,配套大量可落地Shell、RMAN、SQL实战命令。区分物理备份与逻辑备份适用场景,讲解各类数据迁移方案选型,为容灾建设、数据库版本升级打下技术基础。

**内容大纲:**

1. Oracle备份恢复整体体系介绍,64G/8CPU实例基线参数说明
2. 理论部分:归档与非归档模式;冷备份热备份;物理备份、逻辑备份概念;RMAN核心组件;完全恢复、不完全恢复原理;RMAN克隆与数据迁移方案对比;Data Pump数据泵理论
3. 实战操作:归档模式切换;操作系统冷备份;RMAN配置、0级/增量备份;完全介质恢复;不完全恢复;RMAN同机克隆;RMAN异机恢复迁移;expdp/impdp多场景导出导入;备份巡检Shell脚本编写
4. 备份有效性校验、演练重要性、生产备份策略规划
5. 全文总结,备份恢复与数据迁移生产最佳实践

## 一、Oracle备份恢复与数据迁移基础理论

### 1.1 Oracle备份恢复整体体系

Oracle备份分为**物理备份**与**逻辑备份**两大体系。
物理备份直接复制数据库底层物理文件(数据文件、控制文件、重做日志、参数文件),用于介质故障(磁盘损坏、存储硬件故障)场景灾难恢复;逻辑备份读取数据库逻辑对象,导出表、用户、元数据,适合误操作恢复、跨版本迁移、部分对象迁移。风哥教程 113257174

– 物理备份分为:冷备份(脱机一致性备份)、热备份(联机非一致性备份,依赖归档模式)、RMAN恢复管理器备份(生产首选)。
– 逻辑备份:Data Pump(expdp/impdp数据泵,10g及以后官方推荐);传统exp/imp工具,19c虽兼容,性能差、功能受限,新项目禁止使用。

>
> 基线硬件规格64G内存、8CPU,实例`fgedudb`关键spfile基线参数:
>
>
> | 参数 | 参数值 | 说明 |
> | — | — | — |
> | memory_target | 48G | 实例总内存,预留16G内存给操作系统 |
> | processes | 2000 | 最大并发进程 |
> | undo_retention | 900 | undo保留时间,逻辑闪回依赖undo数据 |
> | parallel_max_servers | 16 | 并行进程上限,适配8CPU硬件,备份并行通道参考该数值 |
> | db_recovery_file_dest_size | 30G | FRA快速恢复区,存放备份、归档、控制文件自动备份 |

### 1.2 归档模式与非归档模式理论

1. **NOARCHIVELOG非归档模式**:联机重做日志循环覆盖,不会生成归档日志。仅支持冷备份;故障只能恢复至备份完成时间点,备份之后产生的数据全部丢失。**严禁用于生产核心业务,仅适用于测试库**。
2. **ARCHIVELOG归档模式**:联机日志发生切换时,将日志内容输出为归档日志文件;支持联机热备份,介质故障下可以实现**完全恢复,故障时间点零数据丢失**,所有生产业务库必须开启归档模式。

归档日志依赖磁盘存储空间,归档磁盘被占满会直接挂起所有DML业务操作,生产环境必须持续监控归档磁盘使用率,配置备份清理策略。

### 1.3 冷备份与热备份理论

1. **冷备份(脱机一致性备份)**:数据库执行`SHUTDOWN IMMEDIATE`干净关闭,所有数据文件处于一致性检查点SCN,操作系统拷贝全部物理文件。优点:操作简单,不需要特殊授权;缺点:必须停机,业务中断;仅在非归档模式可用。ASM存储环境下操作系统无法直接读取ASM磁盘文件,ASM环境不建议使用操作系统冷备份。网上搜索风哥教程可以学习全套数据库教程
2. **热备份(联机备份)**:数据库OPEN运行状态执行备份,前提必须开启归档模式。传统用户管理热备份需要执行`ALTER TABLESPACE … BEGIN BACKUP`;RMAN热备份自动处理检查点,不需要手动执行begin backup,生产环境优先选择RMAN。

### 1.4 RMAN恢复管理器核心理论

RMAN(Recovery Manager)是Oracle官方内置的物理备份工具,无需额外软件安装。风哥数据库教程 itpux-com

1. **备份集Backup Set**:RMAN专有格式,多个数据块打包为备份片;支持压缩、增量备份,是生产主流备份格式。
2. **镜像副本Image Copy**:数据文件完全原样拷贝,等同于操作系统cp;恢复速度快,但占用磁盘空间大。
3. **增量备份**
– 0级增量备份:全量基础备份,等同于全备份,备份所有使用过的数据块;
– 1级差异增量:备份自上一次0级或者1级备份之后发生变更的数据块;
– 1级累积增量:备份自上一次0级备份之后全部变更块。
4. **保留策略Retention Policy**:分为恢复窗口(保留可以恢复过去N天时间窗口)、冗余策略(保留N份备份副本);备份超过策略标记为obsolete(过时),可以执行删除。
5. **crosscheck交叉校验**:比对RMAN元数据记录和磁盘真实备份文件,文件丢失标记为expired过期。
6. **控制文件自动备份**:生产必须开启;数据库结构变更、备份完成自动备份控制文件;控制文件全部损坏场景恢复必需。
7. **restore与recover区分**:restore把备份文件还原到磁盘;recover应用归档日志、联机重做日志执行前滚,把数据库推进到目标时间点。
8. **完全恢复**:介质故障,拥有完整备份+全部归档+联机redo日志,恢复至故障发生时间点,零数据丢失,归档模式支持。
9. **不完全恢复**:归档日志缺失、人为误删重要业务数据,恢复到过去指定时间点/SCN;恢复完成后必须执行`ALTER DATABASE OPEN RESETLOGS`,重置数据库日志分支,**不完全恢复结束立刻执行全新全库备份**。

### 1.5 RMAN数据库克隆、数据迁移理论

| 迁移方案 | 适用场景 | 优点 | 缺点 |
| — | — | — | — |
| RMAN DUPLICATE同机克隆 | 同一服务器创建测试副本库 | 物理块级别复制,速度快,完整保留索引约束 | db_name需要修改,磁盘存储资源消耗大 |
| RMAN异机恢复迁移 | 同版本Oracle完整数据库迁移 | 物理迁移速度快,完整数据一致性 | 源与目标Oracle大版本必须保持一致 |
| Data Pump expdp/impdp逻辑迁移 | 对象级迁移、跨大版本迁移、部分schema迁移 | 支持跨版本,可只迁移部分业务对象 | 大库导出导入耗时久,索引约束需要重建 |

>
> RMAN DUPLICATE分为备份集方式复制、active database网络直接复制;active duplicate不需要本地保存备份集,通过网络直接从源库复制到目标auxiliary实例,适合机房网络带宽充足场景。

### 1.6 Data Pump(expdp/impdp)数据泵理论

expdp导出、impdp导入,Oracle10g之后替代传统exp/imp工具。

1. **DIRECTORY目录对象**:数据库逻辑对象映射操作系统真实路径,dump转储文件、日志文件存放操作系统目录,数据库用户需要授予directory读写权限。
2. 四种工作模式:FULL全库模式、SCHEMAS用户模式、TABLES表模式、TABLESPACES表空间模式。
3. 核心参数:PARALLEL并行度,受CPU资源限制,64G/8CPU环境并行一般设置4‑8;`REMAP_SCHEMA`用户映射;`REMAP_TABLESPACE`表空间映射;`CONTENT`控制导出元数据/数据/全部对象。>
> 重要提示:逻辑备份不能替代RMAN物理备份;逻辑备份适合迁移、误对象恢复,磁盘介质损坏场景,逻辑备份恢复速度远低于RMAN物理备份。

## 二、生产环境完整实战操作

>
> 说明:操作系统RHEL7,硬件规格64GB内存,8核CPU;数据库实例`fgedudb`,全部路径替换`/fgedudb`;oracle用户执行数据库操作,root负责操作系统目录;所有脚本务必先测试环境验证,生产执行前完成变更评审。

### 2.1 归档模式检查与切换实战

登录数据库

“`
su – oracle
export ORACLE_BASE=/fgedudb/app
export ORACLE_HOME=/fgedudb/app/product/19.0.0/dbhome_1
export ORACLE_SID=fgedudb
sqlplus / as sysdba
“`

查看当前归档模式

“`
SELECT name,log_mode,open_mode FROM v$database;
“`

如果当前为NOARCHIVELOG,切换为归档模式,需要停机进入mount阶段操作

“`
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
ALTER SYSTEM ARCHIVE LOG START;
SELECT name,log_mode FROM v$database;
“`

### 2.2 操作系统手工冷备份实战(仅NOARCHIVELOG或者停机维护窗口)

>
> 注意:ASM磁盘上文件操作系统cp无法直接访问,ASM环境禁止使用该方式,优先RMAN。
> 前提:数据库执行`SHUTDOWN IMMEDIATE`干净关闭;记录全部物理文件路径。

“`
SELECT name FROM v$datafile;
SELECT name FROM v$controlfile;
SELECT member FROM v$logfile;
SELECT name FROM v$tempfile;
SHOW PARAMETER spfile;
“`

操作系统创建冷备份存放目录

“`
mkdir -p /fgedudb/backup/cold_fgedudb
chown oracle:oinstall /fgedudb/backup/cold_fgedudb
“`

停机拷贝文件

“`
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EOF
cp -rp /fgedudb/app/product/19.0.0/dbhome_1/dbs/* /fgedudb/backup/cold_fgedudb
#恢复冷备份操作:停机,拷贝回原路径,执行startup
sqlplus / as sysdba <<EOF
STARTUP;
EOF
“`

### 2.3 RMAN基础配置实战

进入rman连接本地目标库

“`
rman target /
“`

查看当前全部RMAN配置

“`
SHOW ALL;
“`

生产基线RMAN配置(64G/8CPU,磁盘备份,恢复窗口14天)

“`
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/fgedudb/backup/rman_fgedudb/%F.bkp’;
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DEVICE TYPE DISK;
“`

创建备份存放操作系统目录

“`
mkdir -p /fgedudb/backup/rman_fgedudb
chown oracle:oinstall /fgedudb/backup/rman_fgedudb
chmod 770 /fgedudb/backup/rman_fgedudb
“`

### 2.4 RMAN 0级全量、增量备份实战

#### 2.4.1 0级增量全库备份,每周日执行,作为增量基础备份

“`
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT ‘/fgedudb/backup/rman_fgedudb/level0_%U.bkp’;
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK FORMAT ‘/fgedudb/backup/rman_fgedudb/level0_%U.bkp’;
BACKUP AS COMPRESSED BACKUPSET TAG ‘FULL_LEVEL0_FGEDUDB’
INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;
BACKUP CURRENT CONTROLFILE TAG ‘CTL_LEVEL0_FGEDUDB’ FORMAT ‘/fgedudb/backup/rman_fgedudb/ctl_%F.bkp’;
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}
“`

#### 2.4.2 1级差异增量备份,每日业务低峰期执行

“`
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT ‘/fgedudb/backup/rman_fgedudb/level1_%U.bkp’;
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK FORMAT ‘/fgedudb/backup/rman_fgedudb/level1_%U.bkp’;
BACKUP AS COMPRESSED BACKUPSET TAG ‘INC_LEVEL1_FGEDUDB’
INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}
“`

#### 2.4.3 RMAN备份交叉校验、清理过期过时备份

“`
CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
DELETE OBSOLETE;
DELETE EXPIRED BACKUP;
LIST BACKUP SUMMARY;
LIST CONTROLFILE BACKUP;
REPORT OBSOLETE;
“`

### 2.5 RMAN完全介质恢复实战(磁盘介质损坏,归档完整,无数据丢失)

场景:某个数据文件介质损坏,mount状态执行restore、recover

“`
rman target /
“`

“`
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN;
“`

单数据文件损坏,数据库保持open,仅将损坏数据文件offline后恢复

“`
ALTER DATABASE DATAFILE 5 OFFLINE;
RESTORE DATAFILE 5;
RECOVER DATAFILE 5;
ALTER DATABASE DATAFILE 5 ONLINE;
“`

### 2.6 RMAN不完全恢复实战(误删业务数据,恢复至过去时间点)

>
> 重要注意:不完全恢复完成必须open resetlogs,生成新数据库分支;恢复成功立刻重新执行一次全库备份。

“`
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RESTORE DATABASE;
#按时间点恢复示例,也可以使用UNTIL SCN
RECOVER DATABASE UNTIL TIME “TO_DATE(‘2026‑09‑05 14:30:00′,’yyyy‑mm‑dd hh24:mi:ss’)”;
ALTER DATABASE OPEN RESETLOGS;
“`

### 2.7 RMAN同机数据库克隆实战,源库fgedudb,克隆目标库fgedudb_clone

同服务器,源库fgedudb,克隆目标SID:`fgedudb_clone`。

1. 复制源库pfile,修改db_name、各类文件路径指向克隆目录

“`
cp /fgedudb/app/product/19.0.0/dbhome_1/dbs/initfgedudb.ora /fgedudb/app/product/19.0.0/dbhome_1/dbs/initfgedudb_clone.ora
export ORACLE_SID=fgedudb_clone
sqlplus / as sysdba <<EOF
STARTUP NOMOUNT PFILE=’/fgedudb/app/product/19.0.0/dbhome_1/dbs/initfgedudb_clone.ora’;
EOF
“`

2. rman连接源库target,auxiliary连接目标克隆实例

“`
export ORACLE_SID=fgedudb
rman target sys/Sys@Fgedu123@fgedudb auxiliary /
“`

“`
DUPLICATE DATABASE fgedudb TO fgedudb_clone
DB_FILE_NAME_CONVERT=(‘+DATA/fgedudb’,’+DATA/fgedudb_clone’)
LOGFILE
GROUP 1 (‘+DATA/fgedudb_clone/redo01.log’) SIZE 2048M,
GROUP 2 (‘+DATA/fgedudb_clone/redo02.log’) SIZE 2048M,
GROUP 3 (‘+DATA/fgedudb_clone/redo03.log’) SIZE 2048M;
“`

### 2.8 RMAN异机恢复迁移实战

>
> 前置条件:目标服务器安装**完全相同版本Oracle19c软件**;源库全部RMAN备份片、控制文件备份拷贝到目标服务器`/fgedudb/backup/rman_fgedudb`。
> 目标服务器操作:

“`
su – oracle
export ORACLE_BASE=/fgedudb/app
export ORACLE_HOME=/fgedudb/app/product/19.0.0/dbhome_1
export ORACLE_SID=fgedudb
rman target /
“`

“`
SET DBID=1567894321;
STARTUP NOMOUNT;
#从备份片恢复spfile
RESTORE SPFILE FROM ‘/fgedudb/backup/rman_fgedudb/<spfile备份文件名>.bkp’;
SHUTDOWN;
STARTUP NOMOUNT;
#恢复控制文件
RESTORE CONTROLFILE FROM ‘/fgedudb/backup/rman_fgedudb/<控制文件备份>.bkp’;
ALTER DATABASE MOUNT;
#注册磁盘上全部备份集
CATALOG START WITH ‘/fgedudb/backup/rman_fgedudb/’;
#重定向数据文件路径,如果存储路径发生变化
SET NEWNAME FOR DATABASE TO ‘+DATA/fgedudb’;
RESTORE DATABASE;
SWITCH DATAFILE ALL;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
“`

### 2.9 Data Pump expdp / impdp逻辑导入导出实战

操作系统创建dump存放目录

“`
mkdir -p /fgedudb/backup/dpump_fgedudb
chown oracle:oinstall /fgedudb/backup/dpump_fgedudb
chmod 770 /fgedudb/backup/dpump_fgedudb
“`

sqlplus创建数据库DIRECTORY目录对象,授权

“`
CREATE OR REPLACE DIRECTORY DUMP_FGEDUDB AS ‘/fgedudb/backup/dpump_fgedudb’;
GRANT READ,WRITE ON DIRECTORY DUMP_FGEDUDB TO fgedu;
GRANT READ,WRITE ON DIRECTORY DUMP_FGEDUDB TO system;
“`

#### 2.9.1 schema用户级别导出业务用户fgedu

“`
expdp system/Sys@Fgedu123@fgedudb \
DIRECTORY=DUMP_FGEDUDB \
DUMPFILE=schema_fgedu_%U.dmp \
LOGFILE=exp_schema_fgedu.log \
SCHEMAS=fgedu \
PARALLEL=4 \
COMPRESSION=ALL
“`

#### 2.9.2 指定表级别导出

“`
expdp system/Sys@Fgedu123@fgedudb \
DIRECTORY=DUMP_FGEDUDB \
DUMPFILE=table_fgedu.dmp \
LOGFILE=exp_table_fgedu.log \
TABLES=fgedu.fgedu_dept,fgedu.fgedu_emp \
PARALLEL=2
“`

#### 2.9.3 全库逻辑导出(适合中小型数据库)

“`
expdp system/Sys@Fgedu123@fgedudb \
DIRECTORY=DUMP_FGEDUDB \
DUMPFILE=full_fgedudb_%U.dmp \
LOGFILE=exp_full_fgedudb.log \
FULL=YES \
PARALLEL=4
“`

#### 2.9.4 impdp导入,REMAP_SCHEMA迁移到新用户fgedu_bak

“`
impdp system/Sys@Fgedu123@fgedudb \
DIRECTORY=DUMP_FGEDUDB \
DUMPFILE=schema_fgedu_%U.dmp \
LOGFILE=imp_schema_fgedu.log \
REMAP_SCHEMA=fgedu:fgedu_bak \
PARALLEL=4 \
TABLE_EXISTS_ACTION=SKIP
“`

#### 2.9.5 仅导入元数据,不导入业务数据

“`
impdp system/Sys@Fgedu123@fgedudb \
DIRECTORY=DUMP_FGEDUDB \
DUMPFILE=schema_fgedu_%U.dmp \
LOGFILE=imp_meta.log \
SCHEMAS=fgedu \
CONTENT=METADATA_ONLY
“`

### 2.10 备份巡检Shell脚本,保存为`/fgedudb/soft/rman_check_fgedudb.sh`

“`
#!/bin/bash
export ORACLE_BASE=/fgedudb/app
export ORACLE_HOME=/fgedudb/app/product/19.0.0/dbhome_1
export ORACLE_SID=fgedudb
export PATH=$ORACLE_HOME/bin:$PATH
echo “====================数据库归档模式检查====================”
sqlplus -S / as sysdba <<EOF
set linesize 140 pagesize 80
SELECT name,log_mode,open_mode FROM v\$database;
SELECT sequence#,first_time,next_time FROM v\$archived_log ORDER BY sequence# DESC FETCH FIRST 10 ROWS ONLY;
EOF

echo “====================RMAN备份清单校验====================”
rman target / log=/fgedudb/soft/rman_list.log <<EOF
LIST BACKUP SUMMARY;
CROSSCHECK BACKUP;
EOF
cat /fgedudb/soft/rman_list.log

echo “====================FRA快速恢复区使用率====================”
sqlplus -S / as sysdba <<EOF
set linesize 140 pagesize 80
SELECT file_type,percent_space_used,percent_space_reclaimable FROM v\$flash_recovery_area_usage;
EOF

echo “====================监听状态====================”
lsnrctl status
“`

赋予执行权限

“`
chmod +x /fgedudb/soft/rman_check_fgedudb.sh
./fgedudb/soft/rman_check_fgedudb.sh
“`

## 三、总结

**有备份不等于可以恢复,一份没有经过恢复演练的备份,不能算作有效备份。**我是风哥,在多年项目实施过程中,见过大量生产环境备份脚本每日正常输出日志,但真正故障发生时,才发现备份片损坏、归档缺失、保留策略配置错误,备份完全不可用。风哥 itpux-com

本文基于硬件规格**64G内存、8CPU**的Oracle19c单机实例,全部路径替换为`/fgedudb`,数据库实例`fgedudb`,业务用户`fgedu`。完整覆盖归档模式原理、冷备份热备份、RMAN物理备份、完全恢复、不完全恢复、RMAN同机克隆、异机迁移、Data Pump数据泵逻辑导入导出,配套备份巡检自动化脚本。

生产实践必须牢记以下核心关键点:

1. 生产业务库必须开启`ARCHIVELOG`归档模式,NOARCHIVELOG模式仅限测试环境;归档磁盘必须纳入监控告警;
2. RMAN生产务必开启`CONTROLFILE AUTOBACKUP`,合理配置备份恢复窗口保留策略,定期执行`crosscheck`校验备份介质有效性;
3. 严格区分restore还原文件与recover前滚恢复;不完全恢复执行`open resetlogs`之后,数据库开启全新日志分支,**必须立刻执行全新全库备份,旧备份不再适合该分支恢复**;网上搜索风哥教程可以学习全套数据库教程
4. RMAN适合磁盘介质灾难恢复;expdp/impdp逻辑工具适合对象迁移、跨版本迁移;逻辑备份**绝对不能替代RMAN物理备份**;
5. 迁移方案选型:同版本完整数据库迁移优先RMAN;跨版本、部分schema迁移优先Data Pump;
6. 定期做恢复演练是备份工作最重要环节,只做备份不做恢复演练,存在巨大业务风险;所有备份脚本纳入定时任务,配套巡检脚本监控归档、备份、FRA空间。风哥教程 113257174

备份恢复属于DBA底线能力,不能只复制脚本执行,要理解备份、还原、恢复整套完整逻辑。后续RAC集群备份恢复、ADG容灾环境备份、磁带库介质备份、跨字节序XTTS迁移都是建立在这套知识之上。运维人员不仅要会写备份脚本,更要模拟各类故障场景演练恢复流程,才可以从容应对真实生产的数据故障。风哥数据库教程 itpux-com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息