ubuntu

Oracle在Ubuntu上如何实现自动备份

小樊
51
2025-10-12 09:36:53
栏目: 云计算

Oracle在Ubuntu上实现自动备份的步骤

1. 准备工作:配置Oracle环境变量

自动备份脚本需要访问Oracle的环境变量(如ORACLE_HOMEORACLE_SID),需先为Oracle用户(通常为oracle)配置这些变量。
编辑Oracle用户的~/.bash_profile文件(或~/.bashrc),添加以下内容(根据实际安装路径调整):

export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1  # Oracle安装目录
export ORACLE_SID=orcl                                   # 数据库实例名
export PATH=$ORACLE_HOME/bin:$PATH                       # 将Oracle bin目录加入PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8                # 设置字符集(可选)

保存后执行source ~/.bash_profile使变量生效。

2. 编写自动备份脚本

选择物理备份(RMAN)逻辑备份(expdp),以下提供两种方案的脚本示例:

方案一:RMAN物理备份(推荐)

RMAN是Oracle官方推荐的物理备份工具,支持全量、增量备份及归档日志备份,恢复可靠性高。
创建脚本/home/oracle/scripts/rman_backup.sh,内容如下:

#!/bin/bash
# 设置备份目录(需提前创建并授权)
BACKUP_DIR=/backup/oracle
mkdir -p $BACKUP_DIR
chown -R oracle:oinstall $BACKUP_DIR
chmod 700 $BACKUP_DIR

# 加载Oracle环境变量
source /home/oracle/.bash_profile

# 生成带日期的备份文件名
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="$BACKUP_DIR/rman_backup_$DATE.log"
DUMP_FILE="$BACKUP_DIR/full_backup_$DATE.dmp"

# 执行RMAN备份(全量+归档日志)
rman target / <<EOF >> $LOG_FILE 2>&1
run {
    allocate channel ch1 type disk;
    backup database plus archivelog format '$BACKUP_DIR/full_%U.dmp';
    release channel ch1;
}
exit;
EOF

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "RMAN备份成功,日志文件:$LOG_FILE" | mail -s "Oracle RMAN Backup Success" admin@example.com  # 可选:发送邮件通知
else
    echo "RMAN备份失败,请检查日志:$LOG_FILE" | mail -s "Oracle RMAN Backup Failed" admin@example.com  # 可选:发送邮件通知
fi

说明

方案二:expdp逻辑备份

expdp是Oracle的逻辑备份工具,适合导出特定schema或表,备份文件为二进制格式(.dmp)。
创建脚本/home/oracle/scripts/expdp_backup.sh,内容如下:

#!/bin/bash
# 设置备份目录(需提前在Oracle中创建DIRECTORY对象)
BACKUP_DIR=/backup/oracle/expdp
mkdir -p $BACKUP_DIR
chown -R oracle:oinstall $BACKUP_DIR
chmod 700 $BACKUP_DIR

# 加载Oracle环境变量
source /home/oracle/.bash_profile

# 生成带日期的备份文件名
DATE=$(date +%Y%m%d)
DUMP_FILE="$BACKUP_DIR/expdp_$DATE.dmp"
LOG_FILE="$BACKUP_DIR/expdp_$DATE.log"

# 执行expdp备份(全库导出)
expdp system/password@orcl schemas=SCOTT directory=DATA_PUMP_DIR dumpfile=$DUMP_FILE logfile=$LOG_FILE parallel=4

# 清理7天前的旧备份(避免占用过多空间)
find $BACKUP_DIR -name "expdp_*.dmp" -mtime +7 -exec rm -f {} \;
find $BACKUP_DIR -name "expdp_*.log" -mtime +7 -exec rm -f {} \;

说明

3. 设置脚本执行权限

备份脚本需具备可执行权限,执行以下命令:

chmod +x /home/oracle/scripts/rman_backup.sh
chmod +x /home/oracle/scripts/expdp_backup.sh

4. 配置cron定时任务

使用crontab设置定时任务,让脚本定期自动执行。
编辑Oracle用户的cron表:

crontab -e

添加以下内容(以每天凌晨2点执行RMAN备份为例):

# 每天凌晨2点执行RMAN备份
0 2 * * * /home/oracle/scripts/rman_backup.sh

# 每周六凌晨3点执行expdp逻辑备份(可选)
0 3 * * 6 /home/oracle/scripts/expdp_backup.sh

说明

5. 验证备份与监控

注意事项

0
看了该问题的人还看了