温馨提示×

怎样备份Ubuntu Oracle数据库

小樊
43
2025-12-06 21:04:04
栏目: 云计算

Ubuntu 上备份 Oracle 数据库的实用方案

Ubuntu 上,常用且可靠的备份方式包括 RMAN 物理备份Data Pump 逻辑导出文件系统级拷贝。下面给出可直接落地的步骤与脚本,涵盖环境准备、备份、验证与自动化。


一、备份方式总览与选择

方式 适用场景 优点 局限
RMAN 物理备份 生产库、需要时间点恢复、最小化停机 支持全量/增量、可联机备份、恢复快 需数据库处于 归档模式,对存储与运维要求更高
Data Pump 逻辑导出 迁移/开发/部分对象恢复、跨平台 灵活按用户/表/模式导出,便于移植 停机时间取决于导出规模,非块级一致性
文件系统级拷贝 无法使用 RMAN 的应急场景 简单直接 需停库或保证一致性,恢复复杂、风险高

二、RMAN 物理备份步骤

    1. 准备与归档模式
    • oracle 用户登录:su - oracle
    • 检查归档:sqlplus / as sysdbaarchive log list;
    • 开启归档(如未开启):
      shutdown immediate;
      startup mount;
      alter database archivelog;
      alter database open;
      
    1. 执行备份(示例为全库+归档,含控制文件与 SPFILE)
    rman target /
    RMAN> run {
      allocate channel c1 type disk;
      allocate channel c2 type disk;
      backup filesperset 3
        database format '/oracle/backup/full_%d_%T_%s_%p';
      sql 'alter system archive log current';
      backup archivelog all
        format '/oracle/backup/arch_%d_%T_%s_%p' delete input;
      backup current controlfile
        format '/oracle/backup/ctl_%d_%T_%s_%p';
      backup spfile
        format '/oracle/backup/spfile_%d_%T_%s_%p';
    }
    
    1. 备份验证与清单
    RMAN> list backup;
    RMAN> restore database validate;
    
    1. 常用变体
    • 增量备份:BACKUP DATABASE INCREMENTAL LEVEL 1 PLUS ARCHIVELOG;
    • 仅归档日志:BACKUP ARCHIVELOG ALL DELETE INPUT;
    • 控制文件:BACKUP CURRENT CONTROLFILE;
      以上命令适用于 Ubuntu 上的 Oracle,RMAN 为官方物理备份工具,支持全量/增量与归档日志联动备份。

三、Data Pump 逻辑备份步骤

    1. 创建目录对象并授权(以 SYSDBA 执行)
    mkdir -p /data/exp_dir
    chmod 775 /data/exp_dir
    sqlplus / as sysdba
    SQL> create directory exp_dir as '/data/exp_dir';
    SQL> grant read, write on directory exp_dir to system;
    
    1. 全库导出
    expdp system/oracle@orcl \
      directory=exp_dir \
      dumpfile=full_backup.dmp \
      logfile=expdp_full.log \
      full=y
    
    1. 按用户/表导出示例
    expdp system/oracle@orcl \
      directory=exp_dir \
      dumpfile=scott.dmp \
      logfile=expdp_scott.log \
      schemas=scott
    
    expdp system/oracle@orcl \
      directory=exp_dir \
      dumpfile=emp_tab.dmp \
      logfile=expdp_emp.log \
      tables=scott.emp
    
    1. 导入简述
    impdp system/oracle@orcl \
      directory=exp_dir \
      dumpfile=full_backup.dmp \
      logfile=impdp_full.log \
      full=y
    
    impdp system/oracle@orcl \
      directory=exp_dir \
      dumpfile=scott.dmp \
      logfile=impdp_scott.log \
      schemas=scott
    

Data Pump 适合跨平台迁移与按对象恢复,命令语法在 Linux/Ubuntu 与 Windows 上基本一致。


四、自动化与保留策略

    1. RMAN 保留策略与过期清理
    rman target /
    RMAN> configure retention policy to recovery window of 7 days;
    RMAN> report obsolete;
    RMAN> delete noprompt obsolete;
    
    1. 自动删除过期归档(示例:保留近 1 天)
    rman target / nocatalog log=/tmp/rman_del_arch.log append <<'EOF'
    run {
      allocate channel for maintenance type disk;
      crosscheck archivelog all;
      delete noprompt archivelog until time 'sysdate-1';
    }
    EOF
    
    1. Shell 脚本示例(RMAN 全备 + 归档 + 清理)
    #!/bin/bash
    export ORACLE_SID=orcl
    export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
    export PATH=$ORACLE_HOME/bin:$PATH
    
    BACKUP_DIR=/oracle/backup
    LOG_DIR=/oracle/backup/logs
    mkdir -p $BACKUP_DIR $LOG_DIR
    
    rman target / nocatalog log=$LOG_DIR/rman_$(date +%F).log <<'EOF'
    run {
      allocate channel c1 type disk;
      allocate channel c2 type disk;
      backup filesperset 3
        database format '${BACKUP_DIR}/full_%d_%T_%s_%p';
      sql 'alter system archive log current';
      backup archivelog all
        format '${BACKUP_DIR}/arch_%d_%T_%s_%p' delete input;
      backup current controlfile
        format '${BACKUP_DIR}/ctl_%d_%T_%s_%p';
      backup spfile
        format '${BACKUP_DIR}/spfile_%d_%T_%s_%p';
    }
    EOF
    
    # 删除过期备份(按保留策略)
    rman target / nocatalog log=$LOG_DIR/rman_del_$(date +%F).log <<'EOF'
    run {
      allocate channel for maintenance type disk;
      crosscheck backup;
      crosscheck archivelog all;
      delete noprompt obsolete;
    }
    EOF
    
    1. 定时任务(以 oracle 用户)
    crontab -e
    # 每天 02:30 全备
    30 2 * * * /bin/bash /oracle/backup/rman_full.sh
    
    1. 注意事项
    • 脚本请使用 LF 换行(避免 Windows 编辑导致 cron 失败)
    • 在脚本中显式设置 ORACLE_SID/ORACLE_HOME/PATH
    • 备份目录磁盘空间与 保留天数 需提前规划
      以上自动化与保留策略示例可直接用于 Ubuntu 上的 RMAN 备份管理。

五、恢复要点与快速校验

  • RMAN 恢复(示例)
    rman target /
    RMAN> shutdown immediate;
    RMAN> startup mount;
    RMAN> restore database;
    RMAN> recover database;
    RMAN> alter database open;
    
    如控制文件/归档丢失,可先 RESTORE CONTROLFILE FROM '/path/ctl_*.bkp'; 再恢复。
  • Data Pump 恢复
    impdp system/oracle@orcl \
      directory=exp_dir \
      dumpfile=full_backup.dmp \
      logfile=impdp_full.log \
      full=y
    
  • 快速校验
    sqlplus / as sysdba
    SQL> select count(*) from dba_objects;
    

恢复前务必确认备份集完整可用,恢复过程中避免对原始数据造成二次破坏。

0