温馨提示×

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

小樊
49
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

说明

  • backup database plus archivelog:备份数据库及归档日志(需数据库处于归档模式,可通过SQL> archive log list确认);
  • 日志文件会记录备份详情,便于排查问题;
  • 可通过mail命令发送通知(需安装mailutils包)。
方案二: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 {} \;

说明

  • directory=DATA_PUMP_DIR:需提前在Oracle中创建(SQL> create directory DATA_PUMP_DIR as '/backup/oracle/expdp';);
  • parallel=4:并行导出提高速度(根据服务器性能调整);
  • find命令:自动清理7天前的旧备份,节省存储空间。

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

说明

  • 0 2 * * *:表示每天凌晨2点执行;
  • * * * * *分别代表分钟、小时、日、月、星期(0-6,0为周日);
  • 可根据需求调整执行频率(如每小时、每周等)。

5. 验证备份与监控

  • 手动测试脚本:执行/home/oracle/scripts/rman_backup.sh,检查备份目录是否生成.dmp文件及日志文件;
  • 查看cron日志:通过grep CRON /var/log/syslog查看cron任务执行记录,确认定时任务是否正常运行;
  • 验证备份完整性:定期测试备份文件的恢复(如用rman target / restore database验证RMAN备份)。

注意事项

  • 归档模式:RMAN备份要求数据库处于归档模式,可通过SQL> alter system set log_archive_dest_1='location=/u01/archivelog';设置归档路径;
  • 存储空间:定期清理旧备份(如脚本中的find命令),避免磁盘空间耗尽;
  • 权限问题:确保Oracle用户对备份目录有读写权限(chown -R oracle:oinstall /backup/oracle);
  • 备份策略:根据业务需求制定合理的备份策略(如全量+增量、每周全量+每日增量),并测试恢复流程。

0