温馨提示×

Oracle数据库在Linux上如何备份策略

小樊
35
2025-11-30 18:29:05
栏目: 云计算

Linux上Oracle数据库备份策略

一 策略总览与取舍

  • 物理备份优先:使用RMAN进行Level 0 全量 + Level 1 增量,并配合归档日志备份,支持时间点恢复块级校验,适合生产库的高可靠与快速恢复。
  • 逻辑备份补充:使用Data Pump(expdp/impdp)导出表、用户、全库等对象,便于迁移、开发/测试回填、部分对象恢复,但不替代RMAN的物理恢复能力。
  • 高可用与灾备:对关键业务建议叠加Oracle Data Guard,通过重做传输与应用服务维护与生产一致的备用数据库,支持切换(无数据丢失)故障转移(主库不可用),显著降低停机时间。

二 推荐备份策略组合

  • 核心生产库(高RPO/RTO)
    • 备份方式:RMAN物理备份
    • 频率:每周Level 0,每日Level 1 增量;归档日志每15–30分钟备份一次
    • 保留:全备与增量按恢复窗口7–14天保留;归档日志保留≥增量保留期+1天
    • 关键配置:开启控制文件自动备份,使用FRA(快速恢复区)或明确磁盘路径;定期CROSSCHECKDELETE OBSOLETE
    • 目标:支持时间点恢复块介质恢复,满足快速RTO
  • 一般业务库(容量/成本优先)
    • 备份方式:RMAN物理备份
    • 频率:每周Level 0,每日Level 1;归档日志每小时备份
    • 保留:恢复窗口7天
    • 目标:在成本可控下保证可恢复性
  • 迁移/开发/测试与对象级恢复
    • 备份方式:Data Pump(expdp/impdp)
    • 频率:按业务节奏(如每日/每周)导出关键用户/表空间/全库
    • 目标:快速对象级恢复环境搭建,不用于灾难恢复的主路径
  • 高可用/灾备层
    • 方案:部署物理备用库(Data Guard)
    • 作用:实时接收重做,支持只读查询角色切换/故障转移,作为RMAN备份之外的零数据丢失防线与演练/切换平台

三 RMAN实施步骤与脚本示例

  • 前提
    • 数据库置于归档日志模式(ARCHIVELOG);规划备份目录(如**/backup/rman**),并赋权给oracle:oinstall;建议开启FRA或明确磁盘路径。
  • 关键RMAN配置(示例)
    • 设置保留策略为7天恢复窗口
    • 开启控制文件自动备份,并设定命名格式
    • 配置并行通道(示例为2通道)
    • 定期CROSSCHECK与清理过期/废弃备份
  • 备份脚本示例(每日增量 + 归档日志,含校验与清理)
    • 保存为:/home/oracle/bin/rman_daily.sh
    • 赋权:chmod 755 /home/oracle/bin/rman_daily.sh
    • 说明:脚本先切归档,再做增量备份,随后做归档日志备份过期校验删除废弃/过期归档
    • 定时:crontab 每日 02:00 执行(示例)
  • 执行与校验
    • 手动执行:/home/oracle/bin/rman_daily.sh
    • 校验备份:RMAN> LIST BACKUP SUMMARY;RMAN> REPORT OBSOLETE;RMAN> VALIDATE BACKUPSET
  • 参考脚本
    #!/bin/bash
    export ORACLE_SID=orcl
    export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
    export PATH=$ORACLE_HOME/bin:$PATH
    export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
    
    BACKUP_DIR="/backup/rman"
    LOG_DIR="$BACKUP_DIR/log"
    mkdir -p "$BACKUP_DIR" "$LOG_DIR"
    LOG="$LOG_DIR/rman_daily_$(date +%F_%H%M%S).log"
    
    rman target / nocatalog log=$LOG <<'EOF'
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${BACKUP_DIR}/control_%F';
    CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
    
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '${BACKUP_DIR}/incr_%d_%T_%U';
    ALLOCATE CHANNEL c2 DEVICE TYPE DISK FORMAT '${BACKUP_DIR}/incr_%d_%T_%U';
    
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    
    BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG DELETE INPUT;
    
    RELEASE CHANNEL c1;
    RELEASE CHANNEL c2;
    
    ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;
    CROSSCHECK BACKUP;
    DELETE NOPROMPT OBSOLETE;
    DELETE NOPROMPT EXPIRED BACKUP;
    DELETE NOPROMPT ARCHIVELOG UNTIL TIME "SYSDATE - 7";
    EXIT
    EOF
    
    # crontab -e
    0 2 * * * /home/oracle/bin/rman_daily.sh >> /backup/rman/log/rman_cron.log 2>&1
    

四 Data Pump逻辑备份补充

  • 适用场景:对象级恢复、跨库迁移、开发/测试环境快速回填
  • 目录对象与权限
    • SQL> CREATE OR REPLACE DIRECTORY dpump AS ‘/opt/oracle/dpump’;
    • SQL> GRANT READ, WRITE ON DIRECTORY dpump TO system;
  • 导出示例(按用户)
    • expdp system/password@orcl DIRECTORY=dpump DUMPFILE=user01_$(date +%F).dmp LOGFILE=user01_$(date +%F).log SCHEMAS=user01
  • 导入示例
    • impdp system/password@orcl DIRECTORY=dpump DUMPFILE=user01_2025-09-01.dmp LOGFILE=impdp_user01.log REMAP_SCHEMA=user01:user01_bak TABLE_EXISTS_ACTION=TRUNCATE
  • 保留与清理:按保留策略定期删除N天前的.dmp与.log,或迁移至对象存储/异地

五 恢复要点与演练

  • RMAN恢复流程(示例)
    • 完全恢复(介质故障后):RMAN> STARTUP MOUNT; RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE; RMAN> ALTER DATABASE OPEN;
    • 时间点恢复(PITR):RMAN> STARTUP MOUNT; RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE UNTIL TIME ‘2025-09-01 12:00:00’; RMAN> ALTER DATABASE OPEN RESETLOGS;
    • 仅控制文件/SPFILE丢失:RMAN> STARTUP NOMOUNT; RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP; RMAN> ALTER DATABASE MOUNT; RMAN> RECOVER DATABASE; RMAN> ALTER DATABASE OPEN RESETLOGS;
  • 演练与验证
    • 定期在非生产环境进行还原演练,验证备份可用性恢复时间恢复点目标(RPO);对加密备份确保密钥库已打开;对CDB/PDB按相应语法(RESTORE PLUGGABLE DATABASE/RESTORE DATABASE ROOT)执行。

0