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 操作,建议将归档目录与数据库文件放在不同磁盘

备份策略:

必须定期备份归档日志,否则可能因日志丢失导致无法恢复数据库。

 

posted @ 2025-03-26 22:55  李文学  阅读(126)  评论(0)    收藏  举报