如何进行Linux Oracle备份
导读:Linux 上 Oracle 备份实操指南 一 备份方式总览与选择 物理备份:使用 RMAN(Recovery Manager)对数据文件、控制文件、归档日志进行块级备份,支持完全备份与增量备份,可在线执行(热备),恢复速度快,适合生产库...
Linux 上 Oracle 备份实操指南
一 备份方式总览与选择
- 物理备份:使用 RMAN(Recovery Manager)对数据文件、控制文件、归档日志进行块级备份,支持完全备份与增量备份,可在线执行(热备),恢复速度快,适合生产库的核心保护。
- 逻辑备份:使用 **Data Pump(expdp/impdp)**导出表、用户、表空间或全库为逻辑文件,便于迁移与部分恢复,适合开发/测试、结构迁移与定点回滚。
- 文件系统拷贝:在停机窗口对 数据文件、控制文件、SPFILE、归档日志做一致性拷贝(冷备),实现简单但要求停库,适合非核心或允许短停的场景。
- 建议组合:生产库以 RMAN 热备为主,配合 Data Pump 定期逻辑导出;关键系统可叠加 Data Guard 做零/低 RPO 的异地容灾。
二 使用 RMAN 进行物理备份
- 前提准备
- 以 oracle 用户操作,设置环境变量:
ORACLE_HOME、ORACLE_SID、PATH。 - 建议数据库处于 归档模式(ARCHIVELOG),便于在线备份与时间点恢复。
- 规划备份目录(本地磁盘或 NFS),确保充足空间与权限。
- 以 oracle 用户操作,设置环境变量:
- 常用 RMAN 备份命令
- 连接 RMAN:
rman target / - 全库+归档日志(压缩备份集示例):
RUN { ALLOCATE CHANNEL c1 DEVICE TYPE DISK; ALLOCATE CHANNEL c2 DEVICE TYPE DISK; BACKUP AS COMPRESSED BACKUPSET DATABASE FORMAT '/backup/rman/full_%d_%T_%U.bak'; BACKUP ARCHIVELOG ALL FORMAT '/backup/rman/arch_%d_%T_%U.bak' DELETE INPUT; BACKUP SPFILE FORMAT '/backup/rman/spfile_%U_%T.bak'; BACKUP CURRENT CONTROLFILE FORMAT '/backup/rman/ctl_%U_%T.bak'; RELEASE CHANNEL c1; RELEASE CHANNEL c2; } - 常用维护:
- 列出备份:
LIST BACKUP; - 标记过期:
REPORT OBSOLETE;与清理:DELETE NOPROMPT OBSOLETE; - 校验一致性:
CROSSCHECK BACKUP;、CROSSCHECK ARCHIVELOG ALL;
- 列出备份:
- 连接 RMAN:
- 自动化与保留策略
- 在 RMAN 中配置控制文件自动备份与格式:
CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/ctl_auto_%F'; - 结合
REPORT OBSOLETE与DELETE NOPROMPT OBSOLETE实现基于保留策略的自动清理。
- 在 RMAN 中配置控制文件自动备份与格式:
三 使用 Data Pump 进行逻辑备份
- 前提准备
- 创建数据库目录对象并赋权(指向服务器本地目录):
CREATE OR REPLACE DIRECTORY dpump_dir AS '/backup/dpump'; GRANT READ, WRITE ON DIRECTORY dpump_dir TO system; GRANT EXP_FULL_DATABASE TO system; -- 全库导出所需
- 创建数据库目录对象并赋权(指向服务器本地目录):
- 常用导出/导入
- 全库导出:
expdp system/password@SID DIRECTORY=dpump_dir \ DUMPFILE=full_%U.dmp LOGFILE=full_$(date +%F).log FULL=Y PARALLEL=4 - 按用户导出:
expdp system/password@SID DIRECTORY=dpump_dir \ DUMPFILE=schema_$(date +%F).dmp LOGFILE=schema_exp.log SCHEMAS=hr,oe - 导入示例:
impdp system/password@SID DIRECTORY=dpump_dir \ DUMPFILE=full_2026-01-05.dmp LOGFILE=full_imp.log FULL=Y
- 全库导出:
- 性能与可用性建议
- 通过
PARALLEL提升导出/导入速度; - 使用
%U分片避免单文件过大; - 导出前检查 磁盘空间 与 网络稳定性;
- 重要导出文件及时异地复制与校验。
- 通过
四 自动化与常见运维要点
- Shell 自动化示例(RMAN 每日全备 + 归档清理)
#!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH BACKUP_DIR=/backup/rman DATE=$(date +%F) LOG=$BACKUP_DIR/rman_full_$DATE.log mkdir -p $BACKUP_DIR $ORACLE_HOME/bin/rman target / log=$LOG < < 'EOF' RUN { ALLOCATE CHANNEL c1 DEVICE TYPE DISK; ALLOCATE CHANNEL c2 DEVICE TYPE DISK; BACKUP AS COMPRESSED BACKUPSET DATABASE FORMAT '${ BACKUP_DIR} /db_%d_%T_%U.bak'; BACKUP ARCHIVELOG ALL FORMAT '${ BACKUP_DIR} /arch_%d_%T_%U.bak' DELETE INPUT; BACKUP SPFILE FORMAT '${ BACKUP_DIR} /spfile_%U_%T.bak'; BACKUP CURRENT CONTROLFILE FORMAT '${ BACKUP_DIR} /ctl_%U_%T.bak'; CROSSCHECK BACKUP; CROSSCHECK ARCHIVELOG ALL; DELETE NOPROMPT EXPIRED BACKUP; REPORT OBSOLETE; DELETE NOPROMPT OBSOLETE; RELEASE CHANNEL c1; RELEASE CHANNEL c2; } EOF # 可选:压缩与远端同步 # gzip $BACKUP_DIR/*.bak # rsync -avz $BACKUP_DIR/ backup@remote:/backup/rman/- 定时任务(每天 02:00 执行):
0 2 * * * /home/oracle/scripts/rman_full.sh > > /var/log/rman_full.log 2> & 1
- 定时任务(每天 02:00 执行):
- 常见要点
- 备份期间关注 I/O 与空间,避免磁盘写满导致备份失败;
- 定期做 恢复演练 与 备份校验(LIST/REPORT/CROSSCHECK);
- 对关键库建议将备份复制到远程/云端,并与监控系统集成。
五 快速恢复示例
- RMAN 不完全恢复(时间点恢复,PITR)
- 启动到 mount:
sqlplus / as sysdba STARTUP MOUNT; - RMAN 恢复至指定时间:
rman target / RUN { SET UNTIL TIME '2026-01-05 10:00:00'; RESTORE DATABASE; RECOVER DATABASE; } - 打开数据库:
ALTER DATABASE OPEN RESETLOGS;
- 启动到 mount:
- Data Pump 导入恢复(按用户/全库)
impdp system/password@SID DIRECTORY=dpump_dir \ DUMPFILE=schema_2026-01-05.dmp LOGFILE=schema_imp.log SCHEMAS=hr,oe - 提示
- 恢复前先做好当前环境备份;
- 归档日志缺失可能导致无法前滚到目标时间点;
- 生产恢复建议在维护窗口并先演练。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何进行Linux Oracle备份
本文地址: https://pptw.com/jishu/786805.html
