微信网站建设开发,网站做全景图预览,开网站做一个交易所怎么做,电子商务网站的定义本文创作时间#xff1a;2026年 02月 25日 星期三 08:54:21 CST稳、清晰、好复用、好排障、策略更保守。每天1 点做 RMAN备份异地传输#xff0c;5 点做归档清理#xff0c;分离职责#xff0c;方便排障。✅1、rman_simple.sh#xff08;RMAN备份 异地传输#xff09;模…本文创作时间2026年 02月 25日 星期三 08:54:21 CST稳、清晰、好复用、好排障、策略更保守。每天1 点做 RMAN备份异地传输5 点做归档清理分离职责方便排障。✅1、rman_simple.shRMAN备份 异地传输模板版逻辑不变增强注释#!/bin/bash # # Oracle RMAN 备份 异地传输脚本生产可用模板 # 说明 # - 备份内容全库 归档 控制文件 spfile # - 本地先落地到中转目录按时间建子目录 # - 再传输到异地服务器 # - 异地保留 N 天本地中转保留若干天本地日志保留若干天 # 复用到其他 Oracle 服务器时 # 只改“可配置区”变量见下方核心逻辑不要动 # set -euo pipefail # set -euo pipefail 说明 # -e 任意关键命令失败立即退出防止误报成功 # -u 使用未定义变量时报错防止变量写错 # -o pipefail 管道中任一命令失败即失败 # # 可配置区迁移到新库时重点修改 # # [必改] Oracle 实例名示例yjxt2 # 注意这是实例名ORACLE_SID不是 DB_NAME # RAC 环境下请指定你要执行备份的那个实例 SID例如 yjxt1 / yjxt2 export ORACLE_SIDyjxt2 # [必改] Oracle 软件安装目录ORACLE_HOME # 常见示例 # /u01/app/oracle/product/19.3.0/db # /u01/app/oracle/product/19c/dbhome_1 export ORACLE_HOME/u01/app/oracle/product/19.3.0/db # [通常不改] PATH 追加 ORACLE_HOME/bin export PATH$ORACLE_HOME/bin:$PATH # [可不改] 日期格式日志中显示更清晰 export NLS_DATE_FORMATYYYYMMDDHH24MISS # 本地中转与日志目录 # [按需改] 本地中转根目录脚本会在下面按时间建子目录 # 建议单独目录避免混放其他文件 STAGE_BASE/home/oracle_backup/rman_stage # [按需改] 本地日志目录 LOGDIR/home/oracle_backup/log # 异地服务器与目录你确认该目录只放 RMAN 文件 # [必改] 异地备份服务器 IP/主机名 REMOTE_HOST异地备份服务器 IP # [必改] 异地备份目录建议该目录只放本脚本传输的 RMAN 文件 # 注意当前逻辑是“平铺传输文件到此目录”不是按日期建远端子目录 REMOTE_DIR/home/XXXX_oracle # [按需改] 异地文件保留天数单位天 # 会在远端执行 find -mtime N 删除旧文件 REMOTE_RETENTION_DAYS14 # [按需改] 本地中转保留策略当前是 1偏紧约保留近2天用于观察空间 # 如果以后要改回“近3天”把下面 find 里的 -mtime 1 改成 2 # 保留说明写在脚本末尾实际清理命令处 # # 运行时变量通常不改 # DATE$(date %Y%m%d_%H%M%S) # 本次运行的本地中转目录例如 /home/oracle_backup/rman_stage/20260225_010001 STAGE${STAGE_BASE}/${DATE} # 创建本次中转目录和日志目录 mkdir -p $STAGE $LOGDIR # 本次日志文件按实例名时间命名 LOG$LOGDIR/rman_${ORACLE_SID}_${DATE}.log # 将后续标准输出/错误统一写入日志 exec $LOG 21 echo $(date %F %T) START rman_simple.sh echo USER$(id -un) HOST$(hostname) # 退出时记录返回码rc0 表示成功非0表示失败 trap echo $(date %F %T) EXIT rc$? EXIT # 低优先级有 ionice 就用 # 目的尽量降低对业务 IO/CPU 的影响 if command -v ionice /dev/null 21; then NICEionice -c2 -n7 nice -n 15 else NICEnice -n 15 fi # # RMAN 备份全库 归档 控制文件 spfile单通道 # 说明 # - 单通道资源占用更稳速度相对慢一些 # - archive log current先切换当前日志确保最近归档被纳入备份 # - archivelog all not backed up 1 times只备份尚未备份过1次的归档 # $NICE rman target / EOF_RMAN run{ allocate channel c1 device type disk; # [通常不改] 触发日志切换生成新的归档便于纳入本次备份 sql alter system archive log current; # [通常不改] 全库备份 # 输出到本次运行目录 \$STAGE 下 backup database format ${STAGE}/database_%d_%T_%U.bkp; # [通常不改] 归档日志备份只备份未备份过1次的归档 backup archivelog all not backed up 1 times format ${STAGE}/archivelog_%d_%T_%s_%U.arc; # [通常不改] 当前控制文件备份 backup current controlfile format ${STAGE}/controlfile_%d_%T_%U.ctl; # [通常不改] spfile 备份 backup spfile format ${STAGE}/spfile_%d_%T_%U.spf; release channel c1; } exit; EOF_RMAN # 传输到异地要求 oracle - root 免密 # [前置条件] 需提前配置 SSH 免密 # oracle 用户 - rootREMOTE_HOST # [通常不改] 先确保异地目录存在 $NICE ssh -o BatchModeyes -o ConnectTimeout10 root${REMOTE_HOST} mkdir -p $REMOTE_DIR # [通常不改] 仅传输本次运行目录下的文件不会重复传历史子目录 $NICE scp -o BatchModeyes -o ConnectTimeout10 $STAGE/* root${REMOTE_HOST}:${REMOTE_DIR}/ # 异地保留14天按日期删除旧文件目录只放 RMAN 文件 # [按需改] 修改 REMOTE_RETENTION_DAYS 即可无需改命令逻辑 # 注意这里失败不会让主流程失败|| true避免“清理失败影响备份成功” $NICE ssh -o BatchModeyes -o ConnectTimeout10 root${REMOTE_HOST} \ find $REMOTE_DIR -type f -mtime $REMOTE_RETENTION_DAYS -delete || true echo OK: RMAN backup transfer done at $(date) # 本地中转保留按运行子目录清理 # [按需改] 当前 -mtime 1约保留近2天你现在用于观察空间占用 # 如果要改为“近3天”这里改成 -mtime 2 # 如果要更久自行上调如 3 约近4天 # 注意这里是“直接删除整个子目录”rm -rf 目录 find $STAGE_BASE -mindepth 1 -maxdepth 1 -type d -mtime 1 -exec rm -rf {} \; 2/dev/null || true # 本地日志保留14天 # [按需改] 如果日志保留周期要调整改 14 find $LOGDIR -type f -name rman_${ORACLE_SID}_*.log -mtime 14 -delete2、arch_cleanup.sh归档日志清理模板版逻辑不变增强注释#!/bin/bash # # Oracle 归档日志清理脚本生产可用模板 # 说明 # - 先 CROSSCHECK 最近一段时间归档记录 # - 删除 EXPIRED 归档记录仅清RMAN仓库记录不一定释放ASM空间 # - 删除满足条件的旧归档日志文件已备份至少1次到磁盘 # # 复用到其他 Oracle 服务器时 # 只改“可配置区”变量和 RMAN_BLOCK 中保留策略参数 # 核心逻辑不建议改 # set -euo pipefail # # 可配置区迁移到新库时重点修改 # # [必改] Oracle 实例名ORACLE_SID # RAC 环境下请选择要执行清理的实例 SID如 yjxt1 / yjxt2 export ORACLE_SIDyjxt2 # [必改] Oracle 软件目录ORACLE_HOME export ORACLE_HOME/u01/app/oracle/product/19.3.0/db # [通常不改] export PATH$ORACLE_HOME/bin:$PATH # [按需改] 脚本目录用于存放日志 BASE/home/oracle/rman LOGDIR$BASE/log mkdir -p $LOGDIR # [通常不改] 日志文件命名 LOG$LOGDIR/arch_cleanup_$(date %F_%H%M%S).log echo $(date %F %T) START archivelog cleanup | tee -a $LOG echo ORACLE_SID$ORACLE_SID ORACLE_HOME$ORACLE_HOME | tee -a $LOG # # RMAN 清理策略按需改参数不改结构 # # 当前策略说明 # 1) CROSSCHECK ARCHIVELOG FROM TIME SYSDATE-14 # - 对最近14天归档做对账校验记录与实际文件 # 2) DELETE NOPROMPT EXPIRED ARCHIVELOG ALL # - 删除 EXPIRED 的归档记录通常不释放实际文件空间 # 3) DELETE ... COMPLETED BEFORE SYSDATE-7 BACKED UP 1 TIMES TO DISK # - 删除 7 天前且已备份至少1次到磁盘的归档日志 # # 迁移到新库时常改项按实际策略调整 # - SYSDATE-14 - CROSSCHECK 窗口例如 20 # - SYSDATE-7 - 归档保留天数例如 3 / 7 / 14 # - BACKED UP 1 TIMES TO DISK - 已备份次数要求通常保持1 RMAN_BLOCK$(cat RMAN RUN{ CROSSCHECK ARCHIVELOG FROM TIME SYSDATE-14; DELETE NOPROMPT EXPIRED ARCHIVELOG ALL; DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE SYSDATE-7 BACKED UP 1 TIMES TO DISK; } RMAN ) # 低优先级执行尽量降低对业务影响 # [通常不改] 使用 msglog $LOG append 将 RMAN 详细输出写入同一日志文件 if command -v ionice /dev/null 21; then ionice -c2 -n7 nice -n 15 rman target / msglog $LOG append $RMAN_BLOCK else nice -n 15 rman target / msglog $LOG append $RMAN_BLOCK fi echo $(date %F %T) END archivelog cleanup | tee -a $LOG # 本地日志保留30天 # [按需改] 如需缩短/延长日志保留天数调整 30 find $LOGDIR -type f -name arch_cleanup_*.log -mtime 30 -delete3、给你一份“复用时只改这些地方”的速查表非常实用3.1.rman_simple.sh迁移到新库时必看必改项ORACLE_SIDORACLE_HOMEREMOTE_HOSTREMOTE_DIR按需改项STAGE_BASE本地中转目录LOGDIR本地日志目录REMOTE_RETENTION_DAYS本地中转保留天数-mtime 1 / 7本地日志保留天数-mtime 14通常不改项建议保持set -euo pipefailarchive log currentbackup databasebackup archivelog all not backed up 1 timesbackup current controlfilebackup spfilescp $STAGE/* ...当前是平铺传输3.2.arch_cleanup.sh迁移到新库时必看必改项ORACLE_SIDORACLE_HOME按需改项策略SYSDATE-14crosscheck窗口SYSDATE-7归档保留天数BACKED UP 1 TIMES TO DISK一般保留 1不建议随便改日志保留天数-mtime 30通常不改项建议保持DELETE NOPROMPT EXPIRED ARCHIVELOG ALLionice nicemsglog $LOG append4、定时任务crontab配置建议保留这种结构你当前这两条很合理0 1 * * * /home/oracle_backup/rman_simple.sh /dev/null 21 0 5 * * * /home/oracle/rman/arch_cleanup.sh /dev/null 21说明以后复用时也照这个思路先备份1点后清理5点给备份和清理留出缓冲时间避免“边备份边删归档”5、精简注释版脚本复制张贴修改使用5.1rman_simple.shRMAN备份 异地传输#!/bin/bash set -euo pipefail # [改] 实例与环境 export ORACLE_SIDyjxt2 export ORACLE_HOME/u01/app/oracle/product/19.3.0/db export PATH$ORACLE_HOME/bin:$PATH export NLS_DATE_FORMATYYYYMMDDHH24MISS # [改] 本地中转/日志目录 STAGE_BASE/home/oracle_backup/rman_stage LOGDIR/home/oracle_backup/log # [改] 异地服务器/目录/保留天数 REMOTE_HOST异地服务器IP REMOTE_DIR/home/XXXX_oracle REMOTE_RETENTION_DAYS14 DATE$(date %Y%m%d_%H%M%S) STAGE${STAGE_BASE}/${DATE} mkdir -p $STAGE $LOGDIR LOG$LOGDIR/rman_${ORACLE_SID}_${DATE}.log exec $LOG 21 echo $(date %F %T) START rman_simple.sh echo USER$(id -un) HOST$(hostname) trap echo $(date %F %T) EXIT rc$? EXIT # 低优先级执行 if command -v ionice /dev/null 21; then NICEionice -c2 -n7 nice -n 15 else NICEnice -n 15 fi # RMAN 备份全库 归档 控制文件 spfile $NICE rman target / EOF_RMAN run{ allocate channel c1 device type disk; sql alter system archive log current; backup database format ${STAGE}/database_%d_%T_%U.bkp; backup archivelog all not backed up 1 times format ${STAGE}/archivelog_%d_%T_%s_%U.arc; backup current controlfile format ${STAGE}/controlfile_%d_%T_%U.ctl; backup spfile format ${STAGE}/spfile_%d_%T_%U.spf; release channel c1; } exit; EOF_RMAN # 传输到异地需 oracle - root 免密 $NICE ssh -o BatchModeyes -o ConnectTimeout10 root${REMOTE_HOST} mkdir -p $REMOTE_DIR $NICE scp -o BatchModeyes -o ConnectTimeout10 $STAGE/* root${REMOTE_HOST}:${REMOTE_DIR}/ # 异地保留天数清理失败不影响主流程 $NICE ssh -o BatchModeyes -o ConnectTimeout10 root${REMOTE_HOST} \ find $REMOTE_DIR -type f -mtime $REMOTE_RETENTION_DAYS -delete || true echo OK: RMAN backup transfer done at $(date) # [改] 本地中转保留天数当前 1偏紧约保留近2天如要近7天把-mtime 1 改 6 find $STAGE_BASE -mindepth 1 -maxdepth 1 -type d -mtime 1 -exec rm -rf {} \; 2/dev/null || true # [改] 本地日志保留天数当前14天 find $LOGDIR -type f -name rman_${ORACLE_SID}_*.log -mtime 14 -delete5.2arch_cleanup.sh归档日志清理#!/bin/bash set -euo pipefail # [改] 实例与环境 export ORACLE_SIDyjxt2 export ORACLE_HOME/u01/app/oracle/product/19.3.0/db export PATH$ORACLE_HOME/bin:$PATH # [改] 脚本目录/日志目录 BASE/home/oracle/rman LOGDIR$BASE/log mkdir -p $LOGDIR LOG$LOGDIR/arch_cleanup_$(date %F_%H%M%S).log echo $(date %F %T) START archivelog cleanup | tee -a $LOG echo ORACLE_SID$ORACLE_SID ORACLE_HOME$ORACLE_HOME | tee -a $LOG # [改] 清理策略 # CROSSCHECK窗口14天删除7天前且已备份1次到磁盘的归档 RMAN_BLOCK$(cat RMAN RUN{ CROSSCHECK ARCHIVELOG FROM TIME SYSDATE-14; DELETE NOPROMPT EXPIRED ARCHIVELOG ALL; DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE SYSDATE-7 BACKED UP 1 TIMES TO DISK; } RMAN ) # 低优先级执行 if command -v ionice /dev/null 21; then ionice -c2 -n7 nice -n 15 rman target / msglog $LOG append $RMAN_BLOCK else nice -n 15 rman target / msglog $LOG append $RMAN_BLOCK fi echo $(date %F %T) END archivelog cleanup | tee -a $LOG # [改] 清理日志保留天数当前30天 find $LOGDIR -type f -name arch_cleanup_*.log -mtime 30 -delete