拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Oracle expdp 全量 + 增量备份 impdp 恢复 Shell 脚本模板

目录1、备份脚本 expdp_backup.sh使用2、恢复脚本 impdp_restore.sh完整恢复实操示例3、生产注意点4、累积增量版本CUMULATIVE环境前提已创建 DIRECTORY示例名DUMP_DIR操作系统用户对目录有读写权限数据库用户拥有EXP_FULL_DATABASE、IMP_FULL_DATABASE权限备份文件命名规则full_${date}.dmp、incr_${date}.dmp日志和 dmp 放同一目录必须维护备份清单记录备份顺序恢复严格按时间顺序1、备份脚本 expdp_backup.sh#!/bin/bash ######################################################## # Oracle expdp 全量/增量备份脚本 # 使用方式 # 首次全量sh expdp_backup.sh full # 后续增量sh expdp_backup.sh incr ######################################################## # 数据库连接信息 ORACLE_SIDORCL DB_USER/ as sysdba DUMP_DIRDUMP_DIR BACKUP_DIR/u01/oracle/dump DATE$(date %Y%m%d_%H%M%S) export ORACLE_SID${ORACLE_SID} export NLS_LANGAMERICAN_AMERICA.ZHS16GBK BACKUP_TYPE$1 if [ ${BACKUP_TYPE}x ! fullx ] [ ${BACKUP_TYPE}x ! incrx ];then echo 用法$0 [full|incr] echo 示例 echo 初次全量备份: sh $0 full echo 后续增量备份: sh $0 incr exit 1 fi if [ ${BACKUP_TYPE} full ];then DUMP_FILEfull_${DATE}.dmp LOG_FILEfull_${DATE}.log echo 执行全量备份 ${DUMP_FILE} expdp ${DB_USER} directory${DUMP_DIR} dumpfile${DUMP_FILE} logfile${LOG_FILE} fully else DUMP_FILEincr_${DATE}.dmp LOG_FILEincr_${DATE}.log echo 执行增量备份 ${DUMP_FILE} expdp ${DB_USER} directory${DUMP_DIR} dumpfile${DUMP_FILE} logfile${LOG_FILE} fully INCREMENTALy fi #记录备份清单恢复时以此为准 echo ${DATE},${BACKUP_TYPE},${DUMP_FILE} ${BACKUP_DIR}/backup_list.txt echo 备份完成dmp:${DUMP_FILE}, log:${LOG_FILE}使用#第一次执行全量 sh expdp_backup.sh full #后续定时执行增量可以配置crontab sh expdp_backup.sh incrcrontab 示例每日凌晨 2 点做增量0 2 * * * /bin/bash /u01/oracle/scripts/expdp_backup.sh incr /u01/oracle/dump/cron_backup.log 21backup_list.txt示例内容20260806_020000,full,full_20260806_020000.dmp 20260807_020000,incr,incr_20260807_020000.dmp 20260808_020000,incr,incr_20260808_020000.dmp2、恢复脚本 impdp_restore.sh⚠️重要必须严格按照 backup_list.txt 里备份时间顺序执行先全量再逐个增量不能跳过。 整库恢复建议目标库实例已建好表空间提前创建清空业务用户。#!/bin/bash ######################################################## # expdp dmp恢复脚本 # 参数1:dmp文件名参数2:是否增量[yes|no] # 示例 # sh impdp_restore.sh full_20260806_020000.dmp no # sh impdp_restore.sh incr_20260807_020000.dmp yes # sh impdp_restore.sh incr_20260808_020000.dmp yes ######################################################## ORACLE_SIDORCL DB_USER/ as sysdba DUMP_DIRDUMP_DIR DUMP_FILE$1 IS_INCREMENTAL$2 DATE$(date %Y%m%d_%H%M%S) LOG_FILEimp_${DUMP_FILE%.dmp}_${DATE}.log export ORACLE_SID${ORACLE_SID} export NLS_LANGAMERICAN_AMERICA.ZHS16GBK if [ $# -ne 2 ];then echo 用法: $0 dmp文件名 yes|no echo 全量恢复示例: $0 full_xxx.dmp no echo 增量恢复示例: $0 incr_xxx.dmp yes exit 1 fi IMP_CMDimpdp ${DB_USER} directory${DUMP_DIR} dumpfile${DUMP_FILE} logfile${LOG_FILE} fully if [ ${IS_INCREMENTAL}x yesx ];then IMP_CMD${IMP_CMD} INCREMENTALy fi echo 开始导入 ${DUMP_FILE}, INCREMENTAL${IS_INCREMENTAL} echo 执行命令${IMP_CMD} ${IMP_CMD} if [ $? -eq 0 ];then echo 导入 ${DUMP_FILE} SUCCESS else echo 导入 ${DUMP_FILE} FAILED请查看日志 ${LOG_FILE} exit 1 fi完整恢复实操示例#1.恢复基础全量 sh impdp_restore.sh full_20260806_020000.dmp no #2.恢复第1个增量 sh impdp_restore.sh incr_20260807_020000.dmp yes #3.恢复第2个最新增量 sh impdp_restore.sh incr_20260808_020000.dmp yes3、生产注意点不要跳过中间增量 dmp必须链式顺序导入中间任意一个 dmp 损坏恢复链断裂只能恢复到上一个完好备份。如果业务对象存在可增加参数TABLE_EXISTS_ACTIONTRUNCATE根据业务取舍。expdp 逻辑增量不支持精确时间点恢复只能恢复备份完成时刻需要时间点恢复建议 RMAN 归档。备份的 dmp 文件定期异地拷贝磁盘损坏会全部丢失。定期做恢复演练验证备份可用。4、累积增量版本CUMULATIVE累积增量每次导出自上次全量以来全部变更只保留一份累积增量恢复全量→一份 cum 增量即可。 备份脚本只需把备份类型 incr 分支参数改为CUMULATIVEy。expdp ${DB_USER} directory${DUMP_DIR} dumpfile${DUMP_FILE} logfile${LOG_FILE} fully CUMULATIVEy恢复同样INCREMENTALy。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门