Oracle11备份方案
备份方案(一)
1.1.备份脚本
#!/bin/bash # Oracle 11g 业务库备份脚本 # 配置部分 ORACLE_SID=orcl # 数据库实例名(按实际修改) BACKUP_DIR=/opt/oracle/backups # 备份存储目录 LOG_DIR=/opt/oracle/logs # 日志目录 KEEP_COPIES=7 # 保留备份份数 TIMESTAMP=$(date +%Y%m%d_%H%M%S) # 创建目录 mkdir -p ${BACKUP_DIR} || exit 1 mkdir -p ${LOG_DIR} || exit 1 # 日志文件 LOG_FILE="${LOG_DIR}/rman_backup_${TIMESTAMP}.log" # 开始备份记录 echo "[$(date +'%F %T')] 开始Oracle数据库备份" >> ${LOG_FILE} # RMAN备份命令 rman target / log=${LOG_FILE} append << EOF run { # 配置备份参数 CONFIGURE RETENTION POLICY TO REDUNDANCY ${KEEP_COPIES}; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${BACKUP_DIR}/ctrl_%F.ctl'; # 执行全库备份(包含归档日志) BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG FORMAT '${BACKUP_DIR}/full_%d_%T_%s.bkp'; # 删除过期备份 DELETE NOPROMPT OBSOLETE; # 交叉校验备份 CROSSCHECK BACKUP; DELETE NOPROMPT EXPIRED BACKUP; } EOF # 检查备份结果 if [ $? -eq 0 ]; then echo "[$(date +'%F %T')] 备份成功完成" >> ${LOG_FILE} else echo "[$(date +'%F %T')] 备份失败!错误码: $?" >> ${LOG_FILE} exit 1 fi
1.2.备份脚本
1.2.1业务库独立备份
使用%d格式化符自动包含数据库名(如full_ORCL_20240301.bkp)
每个备份集包含:
数据库全量数据文件
当前控制文件
归档日志(PLUS ARCHIVELOG)
1.2.2保留策略
CONFIGURE RETENTION POLICY TO REDUNDANCY 7;
1.2.3日志管理
每次备份生成独立日志文件(如rman_backup_20240301_143000.log)
日志包含:
备份开始/结束时间
备份文件详情
删除操作记录
1.3.恢复示例
1.3.1整库恢复
rman target / RUN { STARTUP MOUNT; RESTORE DATABASE; RECOVER DATABASE; ALTER DATABASE OPEN; }
1.3.2单表空间恢复
RUN { SQL 'ALTER TABLESPACE users OFFLINE IMMEDIATE'; RESTORE TABLESPACE users; RECOVER TABLESPACE users; SQL 'ALTER TABLESPACE users ONLINE'; }
1.4部署步骤
1.4.1保持脚本
保存为
/home/oracle/scripts/rman_backup.sh
1.4.2设置权限
chmod 750 /home/oracle/scripts/rman_backup.sh chown oracle:oinstall /home/oracle/scripts/rman_backup.sh
1.4.3配置定时任务
crontab -e # 每天凌晨1点执行备份 0 1 * * * /home/oracle/scripts/rman_backup.sh
1.4.4监控备份
# 查看最新备份 ls -lt ${BACKUP_DIR}/full_*.bkp | head -n 8 # 检查日志 tail -f ${LOG_DIR}/rman_backup_*.log
1.5注意事项
1.5.1归档模式必需
数据库必须运行在ARCHIVELOG模式才能使用此方案
1.5.2备份目录规划
建议备份目录与数据库存储使用不同物理磁盘
预留空间 = 数据库大小 * 20%
1.5.3定期验证备份
建议每月执行一次恢复测试
1.5.4异地备份
可通过RMAN复制备份集到其他服务器:
BACKUP BACKUPSET ALL DEVICE TYPE DISK FORMAT '/remote/backup/%U';
如果需要针对多租户容器数据库(CDB/PDB)的备份方案,或需要更细粒度的备份策略(如表空间级),可进一步扩展此脚本。
1.6策略对比
(oracle vs mysql)
1.7ARCHIVELOG模式
1.7.1检查当前模式
SELECT log_mode FROM v$database; -- 若显示 ARCHIVELOG 则已启用
1.7.2启用步骤
-- 关闭数据库 SHUTDOWN IMMEDIATE; -- 启动到 mount 状态 STARTUP MOUNT; -- 启用归档模式 ALTER DATABASE ARCHIVELOG; -- 打开数据库 ALTER DATABASE OPEN;
1.7.3配置归档路径
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/archivelogs' SCOPE=both;
1.7.4归档空间管理
归档日志会持续增长,需定期清理过期日志(通过 RMAN 命令或脚本)
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'sysdate-7'; -- 删除7天前的归档
1.7.5注意事项
性能影响:
启用 ARCHIVELOG 会增加 I/O 操作,建议将归档目录与数据库文件放在不同磁盘
备份策略:
必须定期备份归档日志,否则可能因日志丢失导致无法恢复数据库。