You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写远程备份Oracle 19c数据库的脚本并解决执行报错问题

解决Oracle 19c跨服务器RMAN自动备份问题

问题根源

你当前的脚本错误在于:执行rman target ...后进入了RMAN交互模式,后续的BACKUP命令被bash解释器执行,而bash不识别RMAN命令,因此报错“BACKUP command not found”。必须让RMAN以非交互式方式执行指定命令。

修正后的备份脚本

创建backup_script.sh,内容如下:

#!/bin/bash

# 显式设置Oracle环境变量(crontab默认不加载用户bashrc)
export ORACLE_HOME=/home/oracle/oracle_database_client
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

# 定义备份和日志目录,不存在则自动创建
BACKUP_DIR="/home/oracle/backup_oracle_process/backup_files"
LOG_DIR="/home/oracle/backup_oracle_process/logs"
mkdir -p $BACKUP_DIR $LOG_DIR

# 生成带时间戳的日志文件名
LOG_FILE="${LOG_DIR}/oracle_backup_$(date +%Y%m%d_%H%M%S).log"

# 非交互式执行RMAN备份命令
rman target sys/******@//x.x.x.a:1521/ORCL << EOF
RUN {
    BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG 
    FORMAT '${BACKUP_DIR}/%U';
    # 可选:备份完成后删除已备份的归档日志,节省源服务器空间
    DELETE ALL INPUT;
}
EXIT;
EOF

# 记录备份执行状态
if [ $? -eq 0 ]; then
    echo "$(date +%Y-%m-%d %H:%M:%S) 备份成功" >> $LOG_FILE
else
    echo "$(date +%Y-%m-%d %H:%M:%S) 备份失败" >> $LOG_FILE
    exit 1
fi

脚本优化说明

  • 使用<< EOF的here-doc语法,将RMAN命令作为输入直接传给rman进程,避免进入交互模式。
  • 显式配置所有必要环境变量,确保crontab执行时环境正确(crontab默认不加载用户的~/.bashrc)。
  • 自动创建备份和日志目录,避免因目录缺失导致备份失败。
  • 添加详细日志记录,方便后续排查备份状态。
  • 可选的DELETE ALL INPUT命令,可根据需求决定是否删除已备份的归档日志。

配置crontab实现每周自动备份

  1. 编辑当前用户的crontab规则:
crontab -e
  1. 添加每周日凌晨2点执行备份的规则(可根据需求调整时间):
0 2 * * 0 /home/oracle/backup_script.sh >> /home/oracle/backup_oracle_process/crontab_backup.log 2>&1
  • 时间格式说明:分 时 日 月 周,0 2 * * 0表示每周日凌晨2点执行。
  • >> ... 2>&1将crontab的执行输出和错误信息追加到日志文件,方便排查问题。

验证步骤

  1. 手动执行脚本,检查是否生成备份文件和日志:
./backup_script.sh
  1. 查看日志文件确认备份状态:
cat /home/oracle/backup_oracle_process/logs/oracle_backup_*.log
  1. 检查备份目录是否有生成的备份文件:
ls -l /home/oracle/backup_oracle_process/backup_files/

内容的提问来源于stack exchange,提问作者M_Gh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:46:03