温馨提示×

Linux环境Oracle如何备份

小樊
52
2025-10-01 19:17:51
栏目: 云计算

Linux环境下Oracle数据库备份方法

一、逻辑备份(expdp/impdp)

逻辑备份通过Oracle Data Pump工具实现,将数据库对象(表、视图、存储过程等)导出为逻辑格式(.dmp文件),适用于跨平台迁移或选择性恢复。
常用命令示例

  • 全库逻辑备份expdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=full_backup.dmp logfile=expdp_full.log full=y
    directory:需提前创建的逻辑目录对象,对应Linux物理路径;full=y:表示全库备份)
  • 增量逻辑备份expdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=inc_backup.dmp logfile=expdp_inc.log incremental=y
  • 恢复逻辑备份impdp system/password@ORACLE_SID directory=DPUMP_DIR dumpfile=full_backup.dmp logfile=impdp_restore.log full=y

注意事项

  • 执行前需确保Oracle Data Pump目录对象已创建(create directory DPUMP_DIR as '/u01/app/oracle/dpump';);
  • 逻辑备份占用空间较大,恢复时间较长,适合小规模数据库或需要迁移的场景。

二、物理备份(RMAN)

RMAN(Recovery Manager)是Oracle推荐的物理备份工具,支持全量备份增量备份(Level 0/1)、归档日志备份,并能实现压缩、加密、增量合并等功能,是生产环境首选。

1. 基础备份命令

  • 全量备份(含归档日志)
    登录RMAN:rman target /
    执行命令:BACKUP DATABASE PLUS ARCHIVELOG;
    PLUS ARCHIVELOG:备份数据库后自动备份未归档的归档日志,确保备份一致性)
  • 增量备份(Level 1)
    BACKUP INCREMENTAL LEVEL 1 DATABASE;
    (Level 1增量备份基于最近的全量备份(Level 0)或增量备份(Level 1),仅备份变化的数据块)

2. 高级备份配置(脚本示例)

全量备份脚本(full_backup.sh)

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.10.0/db_home
export ORACLE_SID=orcl
export BACKUP_DIR=/data/ora_backup
LOG_FILE=$BACKUP_DIR/rman_full_$(date +%Y%m%d).log

su - oracle -c "$ORACLE_HOME/bin/rman target / <<EOF > $LOG_FILE 2>&1
RUN {
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;  -- 保留7天内的备份
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
    BACKUP DATABASE PLUS ARCHIVELOG FORMAT '$BACKUP_DIR/full_%d_%T_%U.bak';
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    BACKUP ARCHIVELOG ALL DELETE INPUT;  -- 备份并删除已备份的归档日志
    DELETE NOPROMPT OBSOLETE;  -- 删除过期备份
    RELEASE CHANNEL c1;
}
EOF"

if grep -q "Finished backup" $LOG_FILE; then
    echo "Full backup succeeded: $LOG_FILE"
else
    echo "Full backup failed. Check log: $LOG_FILE"
fi

增量备份脚本(inc_backup.sh)

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.10.0/db_home
export ORACLE_SID=orcl
export BACKUP_DIR=/data/ora_backup
LOG_FILE=$BACKUP_DIR/rman_inc_$(date +%Y%m%d).log

su - oracle -c "$ORACLE_HOME/bin/rman target / <<EOF > $LOG_FILE 2>&1
RUN {
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
    BACKUP INCREMENTAL LEVEL 1 DATABASE FORMAT '$BACKUP_DIR/inc_%d_%T_%U.bak';
    SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
    BACKUP ARCHIVELOG ALL DELETE INPUT;
    RELEASE CHANNEL c1;
}
EOF"

if grep -q "Finished backup" $LOG_FILE; then
    echo "Incremental backup succeeded: $LOG_FILE"
else
    echo "Incremental backup failed. Check log: $LOG_FILE"
fi

3. 自动化与维护

  • 定时任务:通过crontab -e添加定时任务,例如每天凌晨2点执行全量备份、8点执行增量备份:
    0 2 * * * /bin/bash /home/oracle/scripts/full_backup.sh
    0 8 * * * /bin/bash /home/oracle/scripts/inc_backup.sh
    
  • 保留策略:通过RMAN配置保留7天内的备份(CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;),自动删除过期备份(DELETE NOPROMPT OBSOLETE;)。

三、物理冷备份(dd命令)

冷备份是在数据库关闭状态下,直接复制数据文件、控制文件、重做日志文件的物理备份,适用于灾难恢复。
操作步骤

  1. 关闭数据库:sqlplus / as sysdbaSHUTDOWN IMMEDIATE;
  2. 复制文件:
    cp -r /u01/app/oracle/oradata/orcl /backup/orcl_cold_$(date +%Y%m%d)
    
  3. 启动数据库:STARTUP;

注意事项

  • 冷备份无法实现增量备份,恢复时需停机;
  • 需确保备份目录有足够空间,且备份文件与原文件权限一致。

四、备份策略建议

  • 全量备份:每周日凌晨执行1次(保留2次全备);
  • 增量备份:周一至周六凌晨各执行1次(Level 1增量);
  • 归档日志备份:每次增量备份后备份归档日志(避免归档日志占满磁盘);
  • 验证备份:每月随机选取1次备份进行恢复测试(RESTORE DATABASE; RECOVER DATABASE;)。

五、常见问题排查

  • 权限问题:确保执行备份的用户(如oracle)对备份目录有读写权限(chown -R oracle:oinstall /data/ora_backup);
  • 空间不足:通过df -h检查备份目录所在磁盘空间,及时清理过期备份;
  • 日志分析:若备份失败,查看RMAN日志(如rman_full_20250930.log)定位错误(如通道分配失败、文件无法访问)。

0