Ubuntu Oracle数据库备份恢复实践
导读:Ubuntu 上 Oracle 数据库备份与恢复实践 一 环境准备与前提 以 oracle 系统用户操作,确保 ORACLE_SID、ORACLE_HOME 正确,监听已启动,归档日志已开启(生产强烈建议开启)。 准备备份存储目录并赋权,...
Ubuntu 上 Oracle 数据库备份与恢复实践
一 环境准备与前提
- 以 oracle 系统用户操作,确保 ORACLE_SID、ORACLE_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
- #!/bin/bash
- 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
- #!/bin/bash
- 定期校验与清理
- 校验: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 等策略,避免冲突。
- 闪回功能需提前启用(如闪回数据库、回收站等),且仅适用于支持闪回的对象与条件。
- 文件系统拷贝仅作补充手段,优先使用 RMAN 或 Data Pump;任何恢复建议在测试环境演练验证。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Oracle数据库备份恢复实践
本文地址: https://pptw.com/jishu/760254.html
