温馨提示×

Linux Oracle备份如何恢复

小樊
36
2025-12-24 09:58:00
栏目: 云计算

Linux 上 Oracle 备份恢复实操指南

一 恢复方式概览

  • RMAN 物理恢复:用于恢复数据文件、控制文件、归档日志、SPFILE,支持整库、表空间、数据文件级别恢复,可做时间点恢复异机恢复,适合生产环境。
  • Data Pump 逻辑恢复:使用 expdp/impdp 导入用户、模式、表、表空间或全库,适合迁移、部分对象恢复、跨平台/跨版本场景。
  • 冷备份:停库后拷贝数据文件、控制文件、联机重做日志、参数文件,再按原路径或新路径恢复,操作简单但停机时间长

二 RMAN 物理恢复步骤

  • 准备
    • 确认备份可用(含数据文件、归档日志、控制文件、SPFILE),安装同版本 Oracle 软件,创建必要目录,设置环境变量:ORACLE_SID、ORACLE_HOME、PATH
  • 异机或路径变更恢复
    • SPFILEPFILE 启动到 NOMOUNT:SQL> startup nomount(如使用 PFILE:startup pfile=‘/u01/app/oracle/product/…/dbs/initORCL.ora’)。
    • 恢复控制文件:RMAN> restore controlfile from ‘/backup/ctl_ORCL_20200311_19_1.bak’;
    • 装载数据库:RMAN> alter database mount;
    • 编目备份文件:RMAN> catalog start with ‘/u01/app/oracle/backup’;
    • 设置新路径并重命名数据文件/临时文件(示例):
      • RMAN> run { set newname for database to ‘/u01/app/oracle/oradata/DEMO/%U’; restore database; switch datafile all; switch tempfile all; }
    • 恢复数据库:RMAN> recover database;
    • 若恢复到不同目录/实例,重命名在线重做日志:
      • SQL> alter database rename file ‘/u01/app/oracle/oradata/ORCL/redo01.log’ to ‘/u01/app/oracle/oradata/DEMO/redo01.log’;(对 redo02/redo03 同理)
      • 必要时清空日志组:SQL> alter database clear logfile group 1;(对 group 2/3 同理)
    • 打开数据库:SQL> alter database open resetlogs;
  • 时间点恢复(不完全恢复)
    • RMAN> run { restore database; recover database until time “to_date(‘2025-12-24 10:00:00’,‘yyyy-mm-dd hh24:mi:ss’)”; }
    • SQL> alter database open resetlogs;
  • 仅恢复部分对象
    • 表空间:RMAN> restore tablespace users; RMAN> recover tablespace users; SQL> alter tablespace users online;
    • 数据文件:RMAN> restore datafile ‘/u01/…/users01.dbf’; RMAN> recover datafile ‘/u01/…/users01.dbf’; SQL> alter database datafile ‘/u01/…/users01.dbf’ online;
  • 常用备份命令(用于确认你手头备份是否齐全)
    • RMAN> backup database plus archivelog;
    • RMAN> backup current controlfile;
    • RMAN> backup spfile;

三 Data Pump 逻辑恢复步骤

  • 准备
    • 在目标库创建 Directory 对象并赋权:
      • SQL> create or replace directory backup_dir as ‘/opt/oracle/bak_dir’;
      • SQL> grant read,write on directory backup_dir to system;
    • .dmp 文件上传至该目录,并修正属主:chown -R oracle:oinstall /opt/oracle/bak_dir
  • 全库导入
    • impdp system/password@SID directory=backup_dir dumpfile=full_20241224.dmp logfile=impdp_full.log full=y
  • 按模式/表导入
    • 模式:impdp system/password@SID directory=backup_dir dumpfile=schema.dmp logfile=impdp_schema.log schemas=SCOTT
    • 表:impdp system/password@SID directory=backup_dir dumpfile=tab.dmp logfile=impdp_tab.log tables=SCOTT.EMP,SCOTT.DEPT
  • 常用选项
    • table_exists_action=replace/truncate/skip(已存在对象的处理策略)
    • 若导入时触发器导致业务冲突,可先禁用再启用:
      • alter table SCHEMA.TAB disable all triggers; … impdp … ; alter table SCHEMA.TAB enable all triggers;

四 常见问题与要点

  • 归档模式:RMAN 热备/时间点恢复通常要求数据库处于ARCHIVELOG 模式;必要时先 shutdown immediate → startup mount → alter database archivelog → alter database open。
  • 路径变更:异机恢复务必使用 set newname/switch datafile/switch tempfile,并在打开前 rename file 重做日志到新位置。
  • resetlogs:不完全恢复或异机恢复后使用 alter database open resetlogs 打开,之后尽快做一次全备
  • 备份完整性:定期做 catalog start with 编目、校验与恢复演练,确保备份可用。
  • 权限与目录:Data Pump 需正确创建 Directory 并赋权,导入前确认 .dmp 文件权限与属主正确。

五 快速命令清单

  • RMAN 整库恢复(异机示例)
    • startup nomount → restore controlfile from ‘/backup/ctl.bak’; → alter database mount; → catalog start with ‘/backup’; → run { set newname for database to ‘/u01/app/oracle/oradata/NEW/%U’; restore database; switch datafile all; switch tempfile all; } → recover database; → alter database rename file … → alter database open resetlogs;
  • RMAN 时间点恢复
    • run { restore database; recover database until time “to_date(‘2025-12-24 10:00:00’,‘yyyy-mm-dd hh24:mi:ss’)”; } → alter database open resetlogs;
  • Data Pump 全库导入
    • create or replace directory backup_dir as ‘/opt/oracle/bak_dir’; grant read,write on directory backup_dir to system; impdp system/password@SID directory=backup_dir dumpfile=full.dmp logfile=impdp.log full=y;

0