温馨提示×

Ubuntu Oracle备份与恢复技巧

小樊
39
2025-12-10 20:17:17
栏目: 云计算

Ubuntu 上 Oracle 备份与恢复实用技巧

一 备份策略与准备

  • 明确目标:区分物理备份(RMAN)逻辑备份(Data Pump)。物理备份适合整机/多文件恢复与时间点恢复;逻辑备份适合按用户/表/模式迁移细粒度恢复
  • 归档模式:生产环境建议开启ARCHIVELOG,为时间点恢复增量备份打基础。
  • 目录对象:Data Pump 需创建DIRECTORY对象并授权读写,指向磁盘上可写目录。
  • 备份保留:RMAN 建议配置保留策略控制文件自动备份,避免备份链断裂。
  • 校验与演练:定期执行LIST BACKUPRESTORE … VALIDATE,并在非生产环境演练恢复流程
  • 安全与隔离:备份文件与数据库文件分盘/分目录,设置权限 770、定期异地/离线拷贝。

二 物理备份 RMAN 常用命令

  • 归档模式检查与开启
    sqlplus / as sysdba
    ARCHIVE LOG LIST;
    SHUTDOWN IMMEDIATE;
    STARTUP MOUNT;
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
    
  • 全量备份(含归档)
    rman target /
    BACKUP DATABASE PLUS ARCHIVELOG;
    
  • 增量与差异
    -- 累积增量(自上次0级或1级以来变化)
    BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;
    -- 差异增量(自上次同级以来变化)
    BACKUP DIFFERENTIAL LEVEL 1 DATABASE PLUS ARCHIVELOG;
    
  • 归档日志、控制文件与参数文件
    BACKUP ARCHIVELOG ALL;
    BACKUP CURRENT CONTROLFILE;
    BACKUP SPFILE;
    
  • 备份集校验与清单
    LIST BACKUP;
    RESTORE DATABASE VALIDATE;
    
  • 备份命名与保留(示例)
    CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/plm_backup/physical_backup/%d_full_%s_%p_%t';
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    

以上命令覆盖全量/增量/差异归档日志控制文件/SPFILE校验/清单等核心场景。

三 物理恢复 RMAN 常用流程

  • 实例异常但数据文件完好(介质恢复)
    rman target /
    STARTUP MOUNT;
    RESTORE DATABASE;
    RECOVER DATABASE;
    ALTER DATABASE OPEN;
    
  • 控制文件或 SPFILE 丢失
    -- 从自动备份恢复控制文件
    STARTUP NOMOUNT;
    RESTORE CONTROLFILE FROM AUTOBACKUP;
    ALTER DATABASE MOUNT;
    RECOVER DATABASE;
    ALTER DATABASE OPEN RESETLOGS;
    
    -- 或指定备份文件
    RESTORE CONTROLFILE FROM '/path/controlfile.bkp';
    
  • 仅个别数据文件损坏
    rman target /
    SQL 'ALTER DATABASE DATAFILE ''/u01/app/oracle/oradata/ORCL/system01.dbf'' OFFLINE';
    RESTORE DATAFILE '/u01/app/oracle/oradata/ORCL/system01.dbf';
    RECOVER DATAFILE '/u01/app/oracle/oradata/ORCL/system01.dbf';
    SQL 'ALTER DATABASE DATAFILE ''/u01/app/oracle/oradata/ORCL/system01.dbf'' ONLINE';
    
  • 归档日志缺失或需指定路径
    RESTORE ARCHIVELOG FROM '/backup/arch/';
    
  • 恢复后校验
    SELECT COUNT(*) FROM dba_objects;
    

以上流程覆盖整库恢复控制文件/SPFILE 恢复单数据文件恢复归档日志恢复等常见场景。

四 逻辑备份与恢复 Data Pump

  • 准备目录对象
    mkdir -p /data/exp_dir
    chmod 775 /data/exp_dir
    chown oracle:oinstall /data/exp_dir
    
    sqlplus / as sysdba
    CREATE DIRECTORY dpump_dir AS '/data/exp_dir';
    GRANT READ, WRITE ON DIRECTORY dpump_dir TO system;
    
  • 全库导出
    expdp system/oracle@ORCL DIRECTORY=dpump_dir DUMPFILE=full_%U.dmp LOGFILE=expdp_full.log FULL=Y PARALLEL=4
    
  • 按模式/表导出
    expdp system/oracle@ORCL DIRECTORY=dpump_dir DUMPFILE=scott.dmp LOGFILE=expdp_scott.log SCHEMAS=SCOTT
    expdp system/oracle@ORCL DIRECTORY=dpump_dir DUMPFILE=emp.dmp LOGFILE=expdp_emp.log TABLES=SCOTT.EMP
    
  • 全库导入
    impdp system/oracle@ORCL DIRECTORY=dpump_dir DUMPFILE=full_%U.dmp LOGFILE=impdp_full.log FULL=Y PARALLEL=4
    
  • 模式/表导入与映射
    impdp system/oracle@ORCL DIRECTORY=dpump_dir DUMPFILE=scott.dmp LOGFILE=impdp_scott.log SCHEMAS=SCOTT REMAP_SCHEMA=SCOTT:SCOTT_NEW
    impdp system/oracle@ORCL DIRECTORY=dpump_dir DUMPFILE=emp.dmp LOGFILE=impdp_emp.log TABLES=SCOTT.EMP REMAP_TABLESPACE=USERS:USERS_NEW
    
  • 常用选项:PARALLEL 提升吞吐,REMAP_SCHEMA/REMAP_TABLESPACE 用于迁移与合并环境。
    以上步骤覆盖目录创建全库/按对象导出导入映射等核心用法。

五 误删与时间点恢复技巧

  • 闪回查询 Flashback Query(无需停机,需开启闪回相关配置)
    -- 查询30分钟前的数据
    SELECT * FROM scott.emp AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '30' MINUTE);
    
  • 闪回数据库 Flashback Database(需事先启用)
    -- 将库闪回到指定时间点
    FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2025-04-01 00:00:00','YYYY-MM-DD HH24:MI:SS');
    ALTER DATABASE OPEN RESETLOGS;
    
  • LogMiner 挖掘日志(分析 DML/DDL 历史,辅助恢复)
    -- 基本流程:添加日志文件、启动挖掘、查询 V$LOGMNR_CONTENTS
    EXEC DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '/u01/app/oracle/fast_recovery_area/ORCL/archivelog/...', OPTIONS => DBMS_LOGMNR.NEW);
    EXEC DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
    SELECT * FROM V$LOGMNR_CONTENTS WHERE SEG_NAME='EMP' AND SEG_OWNER='SCOTT';
    EXEC DBMS_LOGMNR.END_LOGMNR;
    
  • 极端损坏的应急工具 ODU(Oracle Database Unloader)
    -- 场景:库无法启动但 SYSTEM 字典基本可用
    unload dict
    list user
    list table scott
    unload table scott.emp
    

以上方法覆盖行级回退库级时间点回退日志挖掘/文件级卸载等应急手段。

0