Linux 上 Oracle 备份实操指南
一 备份方式总览与选择
二 使用 RMAN 进行物理备份
ORACLE_HOME、ORACLE_SID、PATH。rman target /RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
BACKUP AS COMPRESSED BACKUPSET DATABASE FORMAT '/backup/rman/full_%d_%T_%U.bak';
BACKUP ARCHIVELOG ALL FORMAT '/backup/rman/arch_%d_%T_%U.bak' DELETE INPUT;
BACKUP SPFILE FORMAT '/backup/rman/spfile_%U_%T.bak';
BACKUP CURRENT CONTROLFILE FORMAT '/backup/rman/ctl_%U_%T.bak';
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
}
LIST BACKUP;REPORT OBSOLETE; 与清理:DELETE NOPROMPT OBSOLETE;CROSSCHECK BACKUP;、CROSSCHECK ARCHIVELOG ALL;CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/ctl_auto_%F';
REPORT OBSOLETE 与 DELETE NOPROMPT OBSOLETE 实现基于保留策略的自动清理。三 使用 Data Pump 进行逻辑备份
CREATE OR REPLACE DIRECTORY dpump_dir AS '/backup/dpump';
GRANT READ, WRITE ON DIRECTORY dpump_dir TO system;
GRANT EXP_FULL_DATABASE TO system; -- 全库导出所需
expdp system/password@SID DIRECTORY=dpump_dir \
DUMPFILE=full_%U.dmp LOGFILE=full_$(date +%F).log FULL=Y PARALLEL=4
expdp system/password@SID DIRECTORY=dpump_dir \
DUMPFILE=schema_$(date +%F).dmp LOGFILE=schema_exp.log SCHEMAS=hr,oe
impdp system/password@SID DIRECTORY=dpump_dir \
DUMPFILE=full_2026-01-05.dmp LOGFILE=full_imp.log FULL=Y
PARALLEL 提升导出/导入速度;%U 分片避免单文件过大;四 自动化与常见运维要点
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
BACKUP_DIR=/backup/rman
DATE=$(date +%F)
LOG=$BACKUP_DIR/rman_full_$DATE.log
mkdir -p $BACKUP_DIR
$ORACLE_HOME/bin/rman target / log=$LOG <<'EOF'
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
BACKUP AS COMPRESSED BACKUPSET DATABASE FORMAT '${BACKUP_DIR}/db_%d_%T_%U.bak';
BACKUP ARCHIVELOG ALL FORMAT '${BACKUP_DIR}/arch_%d_%T_%U.bak' DELETE INPUT;
BACKUP SPFILE FORMAT '${BACKUP_DIR}/spfile_%U_%T.bak';
BACKUP CURRENT CONTROLFILE FORMAT '${BACKUP_DIR}/ctl_%U_%T.bak';
CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED BACKUP;
REPORT OBSOLETE;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
}
EOF
# 可选:压缩与远端同步
# gzip $BACKUP_DIR/*.bak
# rsync -avz $BACKUP_DIR/ backup@remote:/backup/rman/
0 2 * * * /home/oracle/scripts/rman_full.sh >> /var/log/rman_full.log 2>&1
五 快速恢复示例
sqlplus / as sysdba
STARTUP MOUNT;
rman target /
RUN {
SET UNTIL TIME '2026-01-05 10:00:00';
RESTORE DATABASE;
RECOVER DATABASE;
}
ALTER DATABASE OPEN RESETLOGS;
impdp system/password@SID DIRECTORY=dpump_dir \
DUMPFILE=schema_2026-01-05.dmp LOGFILE=schema_imp.log SCHEMAS=hr,oe