温馨提示×

Linux环境下Oracle如何备份

小樊
39
2025-11-22 21:18:05
栏目: 云计算

Linux环境下Oracle备份实操指南

一 备份方式总览

  • RMAN物理备份:Oracle官方备份恢复引擎,支持完全备份增量备份(Level 0/1/2)压缩备份集归档日志备份控制文件/SPFILE备份,适合需要**快速恢复与时间点恢复(PITR)**的生产库。
  • Data Pump逻辑备份:使用expdp/impdp导出/导入表、用户、全库等逻辑对象,便于迁移、开发/测试环境搭建部分对象恢复
  • 文件系统拷贝:对数据文件、控制文件、归档日志等进行冷备份(停库)或配合一致性快照进行备份,适合非核心库特定维护窗口
  • 第三方备份软件:如Veritas NetBackup、Commvault等,可与RMAN集成实现自动化与集中化管理

二 RMAN物理备份与自动化

  • 前提准备
    • 建议数据库处于归档日志模式(ARCHIVELOG),以支持联机热备时间点恢复
    • 规划备份目录(如:/backup/rman),并确保oracle用户对该目录有读写权限。
  • 常用命令
    • 全库备份(含归档日志,压缩备份集示例)
      rman target /
      RUN {
        ALLOCATE CHANNEL c1 TYPE DISK;
        ALLOCATE CHANNEL c2 TYPE DISK;
        BACKUP AS COMPRESSED BACKUPSET DATABASE FORMAT '/backup/rman/full_%d_%T_%s_%p.BKP' TAG 'FULL_L0';
        SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
        BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL FORMAT '/backup/rman/arch_%d_%T_%s_%p.BKP' DELETE INPUT;
        BACKUP CURRENT CONTROLFILE FORMAT '/backup/rman/ctl_%d_%T_%s_%p.CTL';
        BACKUP SPFILE FORMAT '/backup/rman/spfile_%d_%T_%s_%p.SPF';
        RELEASE CHANNEL c1;
        RELEASE CHANNEL c2;
      }
      
    • 增量备份(Level 1,日常运行)
      rman target /
      RUN {
        ALLOCATE CHANNEL c1 TYPE DISK;
        ALLOCATE CHANNEL c2 TYPE DISK;
        BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE FORMAT '/backup/rman/incr_l1_%d_%T_%s_%p.BKP' TAG 'INC_L1';
        SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
        BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL FORMAT '/backup/rman/arch_%d_%T_%s_%p.BKP' DELETE INPUT;
        BACKUP CURRENT CONTROLFILE FORMAT '/backup/rman/ctl_%d_%T_%s_%p.CTL';
        RELEASE CHANNEL c1;
        RELEASE CHANNEL c2;
      }
      
    • 备份集校验与过期清理
      rman target /
      RUN {
        CROSSCHECK BACKUP;
        CROSSCHECK ARCHIVELOG ALL;
        DELETE NOPROMPT OBSOLETE;
        DELETE NOPROMPT EXPIRED BACKUP;
        DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-1';
      }
      
  • 自动化脚本示例(Level 0 每周日 02:00,Level 1 其余每日 02:00)
    #!/bin/bash
    export ORACLE_SID=orcl
    export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
    export PATH=$ORACLE_HOME/bin:$PATH
    BACKUP_DIR=/backup/rman
    LOG_DIR=$BACKUP_DIR/logs
    mkdir -p $LOG_DIR
    TS=$(date +%F_%H%M%S)
    
    if [ $(date +%u) -eq 7 ]; then
      # Level 0
      $ORACLE_HOME/bin/rman target / log=$LOG_DIR/rman_l0_$TS.log <<'EOF'
      RUN {
        ALLOCATE CHANNEL c1 TYPE DISK;
        ALLOCATE CHANNEL c2 TYPE DISK;
        BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE FORMAT '${BACKUP_DIR}/full_l0_%d_%T_%s_%p.BKP' TAG 'FULL_L0';
        SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
        BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL FORMAT '${BACKUP_DIR}/arch_%d_%T_%s_%p.BKP' DELETE INPUT;
        BACKUP CURRENT CONTROLFILE FORMAT '${BACKUP_DIR}/ctl_%d_%T_%s_%p.CTL';
        BACKUP SPFILE FORMAT '${BACKUP_DIR}/spfile_%d_%T_%s_%p.SPF';
        RELEASE CHANNEL c1; RELEASE CHANNEL c2;
      }
      EOF
    else
      # Level 1
      $ORACLE_HOME/bin/rman target / log=$LOG_DIR/rman_l1_$TS.log <<'EOF'
      RUN {
        ALLOCATE CHANNEL c1 TYPE DISK;
        ALLOCATE CHANNEL c2 TYPE DISK;
        BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE FORMAT '${BACKUP_DIR}/incr_l1_%d_%T_%s_%p.BKP' TAG 'INC_L1';
        SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
        BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL FORMAT '${BACKUP_DIR}/arch_%d_%T_%s_%p.BKP' DELETE INPUT;
        BACKUP CURRENT CONTROLFILE FORMAT '${BACKUP_DIR}/ctl_%d_%T_%s_%p.CTL';
        RELEASE CHANNEL c1; RELEASE CHANNEL c2;
      }
      EOF
    fi
    
    # 清理15天前日志
    find $LOG_DIR -name "rman_*.log" -mtime +15 -delete
    
    • 加入定时任务(以oracle用户执行):
      crontab -e
      # 每周日 02:00 全量
      0 2 * * 0 /home/oracle/scripts/rman_backup.sh
      # 每日 02:00 增量
      0 2 * * 1-6 /home/oracle/scripts/rman_backup.sh
      
    • 提示:生产环境可按需调整通道数保留策略(CONFIGURE RETENTION POLICY)压缩选项。

三 Data Pump逻辑备份与自动化

  • 前提准备
    • 在数据库中创建目录对象并授权(示例目录:/backup/dpump):
      sqlplus / as sysdba
      CREATE OR REPLACE DIRECTORY dpump AS '/backup/dpump';
      GRANT READ, WRITE ON DIRECTORY dpump TO system;
      EXIT
      
  • 常用命令
    • 全库导出
      expdp system/password@orcl DIRECTORY=dpump DUMPFILE=full_%U.dmp LOGFILE=full_$(date +%F).log FULL=Y PARALLEL=4
      
    • 按用户导出
      expdp system/password@orcl DIRECTORY=dpump DUMPFILE=scott_%U.dmp LOGFILE=scott_$(date +%F).log SCHEMAS=SCOTT PARALLEL=2
      
    • 导入示例(全库)
      impdp system/password@orcl DIRECTORY=dpump DUMPFILE=full_01.dmp LOGFILE=imp_full_$(date +%F).log FULL=Y
      
    • 导入示例(按用户并迁移Schema)
      impdp system/password@orcl DIRECTORY=dpump DUMPFILE=scott.dmp LOGFILE=imp_scott.log \
        REMAP_SCHEMA=SCOTT:SCOTT_NEW TABLE_EXISTS_ACTION=TRUNCATE
      
  • 自动化脚本示例(每日 22:00 按用户导出,保留7天)
    #!/bin/bash
    export ORACLE_SID=orcl
    export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
    export PATH=$ORACLE_HOME/bin:$PATH
    DP_DIR=/backup/dpump
    TS=$(date +%F_%H%M%S)
    USER=SCOTT
    
    mkdir -p $DP_DIR
    $ORACLE_HOME/bin/expdp $USER/password@orcl DIRECTORY=dpump \
      DUMPFILE=${USER}_${TS}.dmp LOGFILE=${USER}_${TS}.log SCHEMAS=$USER PARALLEL=2
    
    # 清理7天前
    find $DP_DIR -name "${USER}_*.dmp" -mtime +7 -delete
    find $DP_DIR -name "${USER}_*.log" -mtime +7 -delete
    
    • 加入定时任务:
      crontab -e
      0 22 * * * /home/oracle/scripts/dpump_backup.sh
      
    • 提示:逻辑备份适合跨版本迁移、部分对象恢复开发/测试;大数据量场景建议合理设置PARALLELDUMPFILE分片

四 恢复要点与快速命令

  • RMAN恢复(示例:整库恢复到最近时间点)
    rman target /
    STARTUP NOMOUNT;
    RESTORE CONTROLFILE FROM '/backup/rman/ctl_ORCL_2025...CTL';
    ALTER DATABASE MOUNT;
    RESTORE DATABASE;
    RECOVER DATABASE;
    ALTER DATABASE OPEN RESETLOGS;
    
    • 仅恢复表空间/数据文件(示例):
      rman target /
      SQL 'ALTER DATABASE DATAFILE 5 OFFLINE';
      RESTORE DATAFILE 5;
      RECOVER DATAFILE 5;
      SQL 'ALTER DATABASE DATAFILE 5 ONLINE';
      
  • Data Pump恢复(示例:按用户导入)
    impdp system/password@orcl DIRECTORY=dpump DUMPFILE=scott_2025...dmp LOGFILE=imp_scott.log SCHEMAS=SCOTT
    
  • 验证建议
    • 定期执行备份校验:RMAN的CROSSCHECKRESTORE VALIDATE;Data Pump导入前可先做schema统计小样本校验

五 备份策略与运维建议

  • 策略组合
    • 生产库:以RMAN增量备份(L0+L1)+ 归档日志备份为主,配合控制文件/SPFILE备份与定期全量校验;关键业务建议配置**块更改跟踪(BCT)**提升增量效率。
    • 非核心/迁移场景:使用Data Pump用户/表空间定期导出。
  • 保留与清理
    • 通过RMAN的保留策略DELETE OBSOLETE/EXPIRED自动清理;文件系统备份按时间/数量保留。
  • 安全与合规
    • 备份文件异机/异地存放,限制访问权限;对生产账号采用最小权限口令/密钥管理。
  • 监控与演练
    • 备份成功率、耗时、容量进行监控与告警;定期恢复演练验证可用性与RPO/RTO目标。

0