首页主机资讯Ubuntu Oracle数据库备份恢复实践

Ubuntu Oracle数据库备份恢复实践

时间2025-12-01 17:02:04发布访客分类主机资讯浏览1250
导读:Ubuntu 上 Oracle 数据库备份与恢复实践 一 环境准备与前提 以 oracle 系统用户操作,确保 ORACLE_SID、ORACLE_HOME 正确,监听已启动,归档日志已开启(生产强烈建议开启)。 准备备份存储目录并赋权,...

Ubuntu 上 Oracle 数据库备份与恢复实践

一 环境准备与前提

  • oracle 系统用户操作,确保 ORACLE_SIDORACLE_HOME 正确,监听已启动,归档日志已开启(生产强烈建议开启)。
  • 准备备份存储目录并赋权,例如:/data/backup/rman/data/backup/dpump,权限 775,属主 oracle:oinstall
  • 为 Data Pump 创建 Oracle Directory 并授权业务用户读写;RMAN 备份建议写入 FRA(Fast Recovery Area) 或明确的磁盘路径,便于管理与恢复。

二 备份策略与常用命令

  • 物理备份 RMAN(推荐用于生产)
    • 归档模式检查与开启
      • 检查:SQL> archive log list;
      • 开启:SQL> shutdown immediate; → SQL> startup mount; → SQL> alter database archivelog; → SQL> alter database open;
    • 常用备份
      • 全库+归档:RMAN> backup database plus archivelog;
      • 增量 L1:RMAN> backup incremental level 1 database plus archivelog;
      • 仅归档:RMAN> backup archivelog all delete input;
      • 控制文件/SPFILE:RMAN> backup current controlfile; RMAN> backup spfile;
      • 备份校验:RMAN> validate backup; 或 RMAN> restore database validate;
  • 逻辑备份 Data Pump(适合迁移、部分对象恢复)
    • 创建目录并授权
      • mkdir -p /data/backup/dpump & & chmod 775 /data/backup/dpump & & chown oracle:oinstall /data/backup/dpump
      • SQL> create directory dpump_dir as ‘/data/backup/dpump’;
      • SQL> grant read, write on directory dpump_dir to system, your_app_user;
    • 全库导出
      • 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 tables=scott.emp,scott.dept
      • expdp system/oracle@orcl directory=dpump_dir dumpfile=app.dmp logfile=expdp_app.log schemas=app_user
  • 文件系统级备份(配合停机窗口或只读表空间)
    • 一致性快照/停机后拷贝:tar czvf oradata_$(date +%F).tgz /u01/app/oracle/oradata/ORCL
    • 注意:热备份需表空间只读或使用 RMAN,直接拷贝运行中的数据文件风险高。

三 恢复场景与步骤

  • RMAN 完全恢复(数据文件丢失、磁盘损坏等)
    • 场景:实例异常或数据文件损坏,有可用 RMAN 备份与归档日志
    • 步骤
      • SQL> shutdown immediate; (若实例异常可跳过)
      • SQL> startup mount;
      • RMAN> restore database;
      • RMAN> recover database;
      • SQL> alter database open;
  • RMAN 不完全恢复(时间点/SCN/序列恢复)
    • 时间点恢复示例
      • SQL> startup mount;
      • RMAN> restore database until time “to_date(‘2025-11-30 18:00:00’,‘YYYY-MM-DD HH24:MI:SS’)”;
      • RMAN> recover database until time “to_date(‘2025-11-30 18:00:00’,‘YYYY-MM-DD HH24:MI:SS’)”;
      • SQL> alter database open resetlogs;
    • 基于 SCN/序列:将 until time 替换为 until scn=xxxx 或 until sequence=xxx thread=1
  • 仅控制文件/SPFILE 丢失
    • RMAN> restore current controlfile from ‘/backup/ctl_20251130.bkp’;
    • 或 RMAN> restore spfile from ‘/backup/spfile_20251130.bkp’;
    • SQL> startup nomount; → 恢复控制文件后 mount → restore/recover → open
  • Data Pump 逻辑恢复
    • 全库导入: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=app.dmp logfile=impdp_app.log schemas=app_user
    • 重映射(跨库/改用户):remap_schema=src_user:dst_user remap_tablespace=src_ts:dst_ts
  • 细粒度时间点恢复(无需整库回退)
    • 闪回查询(误删少量数据):SELECT * FROM schema.tbl AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL ‘30’ MINUTE);
    • 闪回表:FLASHBACK TABLE schema.tbl TO TIMESTAMP (SYSTIMESTAMP - INTERVAL ‘30’ MINUTE);
    • 闪回数据库(需事先启用且具备闪回日志):FLASHBACK DATABASE TO TIMESTAMP (TO_DATE(‘2025-11-30 18:00:00’,‘YYYY-MM-DD HH24:MI:SS’));

四 自动化与校验

  • RMAN 脚本示例(/data/backup/scripts/rman_full.sh)
    • #!/bin/bash
      • export ORACLE_SID=ORCL
      • rman target / < < ‘EOF’
      • backup as compressed backupset database plus archivelog delete input;
      • backup current controlfile;
      • backup spfile;
      • validate backup;
      • EOF
  • Data Pump 脚本示例(/data/backup/scripts/dpump_full.sh)
    • #!/bin/bash
      • export ORACLE_SID=ORCL
      • expdp system/oracle@orcl directory=dpump_dir
        dumpfile=full_$(date +%F_%H%M%S).dmp
        logfile=expdp_full_$(date +%F_%H%M%S).log
        full=y parallel=4
  • 定期校验与清理
    • 校验:RMAN> list backup summary; RMAN> validate backup;
    • 归档日志保留策略:RMAN> configure retention policy to recovery window of 7 days;
    • 过期备份清理:RMAN> delete noprompt expired backup; RMAN> delete noprompt obsolete;
  • 建议将脚本纳入 crontab(oracle 用户),并落盘保存 日志校验结果

五 注意事项与常见问题

  • 归档模式是 RMAN 增量/时间点恢复的前提;生产环境务必开启并监控归档空间使用。
  • 恢复前先做好当前状态备份(如当前控制文件、参数文件、告警日志),避免二次损坏。
  • 使用 resetlogs 打开数据库后,尽快做一次全备,作为后续恢复基线。
  • Data Pump 导入前清理目标对象或采用 TABLE_EXISTS_ACTION=REPLACE/SKIP/TRUNCATE 等策略,避免冲突。
  • 闪回功能需提前启用(如闪回数据库、回收站等),且仅适用于支持闪回的对象与条件。
  • 文件系统拷贝仅作补充手段,优先使用 RMANData Pump;任何恢复建议在测试环境演练验证。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Oracle数据库备份恢复实践
本文地址: https://pptw.com/jishu/760254.html
Ubuntu Oracle数据库网络配置指南 Oracle在Ubuntu上的兼容性问题探讨

游客 回复需填写必要信息