Oracle数据库备份需遵循**“3-2-1备份规则”(保留3个数据副本,存储在2种不同介质,其中1份异地存放),并结合物理备份**(直接复制数据库文件)与逻辑备份(导出数据库对象/数据)的组合方式,确保数据完整性与可恢复性。物理备份是基础,逻辑备份用于补充(如跨平台迁移、对象级恢复)。
冷备份(Cold Backup)
热备份(Hot Backup)
增量备份(Incremental Backup)
逻辑备份(Logical Backup)
expdp/impdp,高性能)、传统exp/imp(兼容旧版本)。使用RMAN(Recovery Manager)
RMAN是Oracle官方推荐的物理备份工具,支持压缩备份(减少存储空间)、块变更跟踪(加快增量备份速度)、备份保留策略(自动删除过期备份)。
# 全库备份(含归档日志)
rman target / <<EOF
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE disk;
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;
RELEASE CHANNEL ch1;
}
EOF
Shell脚本+定时任务(crontab)
编写Shell脚本整合RMAN/expdp命令,通过crontab设置定时执行(如每天凌晨2点执行全量备份,每小时执行增量备份)。
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/u01/backup/oracle"
LOG_FILE="$BACKUP_DIR/full_backup_$DATE.log"
# 加载Oracle环境变量
source /home/oracle/.bash_profile
# 执行RMAN全量备份
rman target / <<EOF > $LOG_FILE 2>&1
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE disk;
BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
RELEASE CHANNEL ch1;
}
EOF
# 压缩备份文件
tar -zcvf "$BACKUP_DIR/full_backup_$DATE.tar.gz" -C $BACKUP_DIR $(ls $BACKUP_DIR | grep -E 'full_backup_[0-9]{8}\.log$')
# 删除7天前的备份
find $BACKUP_DIR -type f -name "full_backup_*.tar.gz" -mtime +7 -exec rm -f {} \;
crontab -e
# 添加以下内容
0 2 * * * /u01/scripts/oracle_full_backup.sh
Oracle Enterprise Manager(OEM)调度
通过OEM图形界面配置备份计划,支持自动备份(全量/增量/累积)、备份策略优化(跳过未修改的只读数据文件)、保留策略设置(如保留31天备份)。
开启归档日志模式
归档日志记录所有数据变更,是热备份与时间点恢复的基础。
-- 关闭数据库
SHUTDOWN IMMEDIATE;
-- 启动到挂载状态
STARTUP MOUNT;
-- 开启归档日志模式
ALTER DATABASE ARCHIVELOG;
-- 打开数据库
ALTER DATABASE OPEN;
-- 确认归档状态
ARCHIVE LOG LIST;
配置闪回恢复区(Flash Recovery Area, FRA)
FRA是Oracle统一的恢复文件存储位置(包括备份文件、归档日志、闪回日志),可自动管理空间(当空间不足时,删除最旧的备份文件)。
-- 设置FRA目录(需提前创建目录)
ALTER SYSTEM SET db_recovery_file_dest = '/u01/flash_recovery_area' SCOPE=BOTH;
-- 设置FRA大小(如100GB)
ALTER SYSTEM SET db_recovery_file_dest_size = 100G SCOPE=BOTH;
-- 启用自动备份控制文件
ALTER SYSTEM SET control_file_record_keep_time = 31 SCOPE=BOTH;
备份保留策略
通过RMAN或OEM设置备份保留时间(如保留31天),自动删除过期备份,节省存储空间。
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 31 DAYS;
监控备份作业
/u01/backup/oracle/full_backup_20251021.log)。dba_scheduler_jobs视图,查看自动备份作业状态。测试备份恢复
定期执行恢复测试(如从最近的全量备份+增量备份恢复数据库),验证备份的有效性。
-- 关闭数据库
SHUTDOWN IMMEDIATE;
-- 启动到挂载状态
STARTUP MOUNT;
-- 恢复数据库
RESTORE DATABASE;
RECOVER DATABASE;
-- 打开数据库(若使用归档日志)
ALTER DATABASE OPEN RESETLOGS;
清理旧备份
通过脚本或RMAN自动删除过期备份(如保留31天的备份),防止备份文件占用过多存储空间。
DELETE NOPROMPT OBSOLETE;
通过以上策略,可在Ubuntu环境下为Oracle数据库构建可靠、高效、自动化的备份体系,满足不同业务场景的数据保护需求。