Ubuntu上Oracle数据库的备份与恢复实践
导读:Ubuntu上Oracle数据库的备份与恢复实践 一 环境准备与前提 以oracle系统用户操作:执行su - oracle,确保ORACLE_SID、ORACLE_HOME、PATH等环境变量正确。 建议数据库运行在归档日志模式(ARC...
Ubuntu上Oracle数据库的备份与恢复实践
一 环境准备与前提
- 以oracle系统用户操作:执行
su - oracle,确保ORACLE_SID、ORACLE_HOME、PATH等环境变量正确。 - 建议数据库运行在归档日志模式(ARCHIVELOG),以支持时间点恢复与不完全恢复:
- 检查:
archive log list; - 启用:
shutdown immediate; startup mount; alter database archivelog; alter database open;
- 检查:
- 备份目录准备:创建本地备份目录并赋权(示例:
/u01/backup/rman、/u01/backup/dp),确保oracle:oinstall可读写。 - 逻辑备份需创建Data Pump目录对象并授权:
mkdir -p /u01/backup/dp chown oracle:oinstall /u01/backup/dp chmod 775 /u01/backup/dp sqlplus / as sysdba create directory dp_dir as '/u01/backup/dp'; grant read, write on directory dp_dir to system; - 建议开启控制文件自动备份,便于恢复时自动定位备份集:
rman target / configure controlfile autobackup on; configure controlfile autobackup format for device type disk to '/u01/backup/rman/ctl_%F';
二 物理备份 RMAN 实战
- 进入RMAN:
rman target / - 常用备份命令(按需组合):
- 完整数据库备份(含归档日志,压缩备份集):
backup as compressed backupset database plus archivelog delete input; - 增量备份(示例:差异增量,级别1):
backup incremental level 1 database plus archivelog delete input; - 归档日志备份:
backup archivelog all delete input; - 控制文件与SPFILE备份(若未开启自动备份):
backup current controlfile; backup spfile; - 查看备份:
list backup;
- 完整数据库备份(含归档日志,压缩备份集):
- 建议将备份写入快速磁盘(如本地SSD或高性能NFS),并定期做异地/离线拷贝。
三 物理恢复 RMAN 实战
- 场景A 完全恢复(介质故障但控制文件/数据文件/归档完整)
rman target / shutdown immediate; startup mount; restore database; recover database; alter database open; - 场景B 不完全恢复(时间点/SCN,需以resetlogs打开)
rman target / shutdown immediate; startup mount; restore database; recover database until time "to_date('2026-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')"; alter database open resetlogs; - 场景C 丢失控制文件(有自动备份时)
rman target / startup nomount; restore controlfile from autobackup; alter database mount; recover database; alter database open resetlogs; - 场景D 仅个别数据文件损坏(离线后恢复)
rman target / sqlplus / as sysdba alter database datafile < file#> offline immediate; exit restore datafile < file#> ; recover datafile < file#> ; sqlplus / as sysdba alter database datafile < file#> online; - 恢复完成后,建议执行校验:
list backup summary;、validate backupset < id> ;。
四 逻辑备份与恢复 Data Pump
- 全库导出(示例):
expdp system/oracle@ORCL directory=dp_dir \ dumpfile=full_$(date +%F).dmp logfile=full_$(date +%F).log full=y - 按用户导出:
expdp system/oracle@ORCL directory=dp_dir \ dumpfile=schema_$(date +%F).dmp logfile=schema_$(date +%F).log \ schemas=SCOTT - 导入全库:
impdp system/oracle@ORCL directory=dp_dir \ dumpfile=full_2026-01-05.dmp logfile=impdp_full.log full=y - 按用户导入(含重映射与表空间):
impdp system/oracle@ORCL directory=dp_dir \ dumpfile=schema_2026-01-05.dmp logfile=impdp_schema.log \ schemas=SCOTT remap_schema=SCOTT:SCOTT_NEW \ remap_tablespace=USERS:USERS_NEW - 提示:逻辑备份适合迁移/开发/部分对象恢复,不具备时间点恢复能力,且对停机时间较敏感。
五 自动化与运维建议
- 备份脚本示例(RMAN压缩全备 + 归档删除 + 保留策略)
#!/bin/bash export ORACLE_SID=ORCL export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH BACKUP_DIR=/u01/backup/rman LOG_FILE=$BACKUP_DIR/rman_backup_$(date +%F).log RETENTION_DAYS=7 mkdir -p $BACKUP_DIR rman target / < < 'EOF' > > $LOG_FILE 2> & 1 configure retention policy to recovery window of $RETENTION_DAYS days; backup as compressed backupset database plus archivelog delete input; backup current controlfile; delete noprompt obsolete; EOF # 清理过期备份文件(按文件系统时间) find $BACKUP_DIR -name "*.bkp" -mtime +$RETENTION_DAYS -delete - 定时任务(每天02:00执行):
chmod +x /u01/scripts/rman_backup.sh crontab -e 0 2 * * * /u01/scripts/rman_backup.sh - 监控与校验:
- 定期执行
list backup summary;与validate backupset; - 将RMAN日志接入Zabbix/Prometheus告警;
- 定期在测试环境演练恢复流程,验证备份可用性与RPO/RTO。
- 定期执行
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu上Oracle数据库的备份与恢复实践
本文地址: https://pptw.com/jishu/787162.html
