
目錄1、備份腳本 expdp_backup.sh使用2、恢復腳本 impdp_restore.sh完整恢復實操示例3、生產(chǎn)注意點4、累積增量版本CUMULATIVE環(huán)境前提已創(chuàng)建 DIRECTORY示例名DUMP_DIR操作系統(tǒng)用戶對目錄有讀寫權限數(shù)據(jù)庫用戶擁有EXP_FULL_DATABASE、IMP_FULL_DATABASE權限備份文件命名規(guī)則full_${date}.dmp、incr_${date}.dmp日志和 dmp 放同一目錄必須維護備份清單記錄備份順序恢復嚴格按時間順序1、備份腳本 expdp_backup.sh#!/bin/bash ######################################################## # Oracle expdp 全量/增量備份腳本 # 使用方式 # 首次全量sh expdp_backup.sh full # 后續(xù)增量sh expdp_backup.sh incr ######################################################## # 數(shù)據(jù)庫連接信息 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 后續(xù)增量備份: sh $0 incr exit 1 fi if [ ${BACKUP_TYPE} full ];then DUMP_FILEfull_${DATE}.dmp LOG_FILEfull_${DATE}.log echo 執(zhí)行全量備份 ${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 執(zhí)行增量備份 ${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}使用#第一次執(zhí)行全量 sh expdp_backup.sh full #后續(xù)定時執(zhí)行增量可以配置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示例內(nèi)容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 里備份時間順序執(zhí)行先全量再逐個增量不能跳過。 整庫恢復建議目標庫實例已建好表空間提前創(chuàng)建清空業(yè)務用戶。#!/bin/bash ######################################################## # expdp dmp恢復腳本 # 參數(shù)1:dmp文件名參數(shù)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 執(zhí)行命令${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、生產(chǎn)注意點不要跳過中間增量 dmp必須鏈式順序?qū)胫虚g任意一個 dmp 損壞恢復鏈斷裂只能恢復到上一個完好備份。如果業(yè)務對象存在可增加參數(shù)TABLE_EXISTS_ACTIONTRUNCATE根據(jù)業(yè)務取舍。expdp 邏輯增量不支持精確時間點恢復只能恢復備份完成時刻需要時間點恢復建議 RMAN 歸檔。備份的 dmp 文件定期異地拷貝磁盤損壞會全部丟失。定期做恢復演練驗證備份可用。4、累積增量版本CUMULATIVE累積增量每次導出自上次全量以來全部變更只保留一份累積增量恢復全量→一份 cum 增量即可。 備份腳本只需把備份類型 incr 分支參數(shù)改為CUMULATIVEy。expdp ${DB_USER} directory${DUMP_DIR} dumpfile${DUMP_FILE} logfile${LOG_FILE} fully CUMULATIVEy恢復同樣INCREMENTALy。