自动备份脚本需要访问Oracle的环境变量(如ORACLE_HOME、ORACLE_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使变量生效。
选择物理备份(RMAN)或逻辑备份(expdp),以下提供两种方案的脚本示例:
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是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天前的旧备份,节省存储空间。备份脚本需具备可执行权限,执行以下命令:
chmod +x /home/oracle/scripts/rman_backup.sh
chmod +x /home/oracle/scripts/expdp_backup.sh
使用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为周日);/home/oracle/scripts/rman_backup.sh,检查备份目录是否生成.dmp文件及日志文件;grep CRON /var/log/syslog查看cron任务执行记录,确认定时任务是否正常运行;rman target / restore database验证RMAN备份)。SQL> alter system set log_archive_dest_1='location=/u01/archivelog';设置归档路径;find命令),避免磁盘空间耗尽;chown -R oracle:oinstall /backup/oracle);