Ubuntu系统下Oracle数据库常用备份方法及实践
RMAN是Oracle官方推荐的物理备份工具,支持全备份、增量备份、归档日志备份,适用于生产环境的高可靠性需求。
以Oracle用户身份登录Ubuntu,启动RMAN并连接目标数据库,执行全量备份(包含数据文件、控制文件、归档日志):
rman target /
run {
allocate channel ch1 type disk; # 分配磁盘通道
backup database plus archivelog; # 备份数据库及归档日志
release channel ch1; # 释放通道
}
exit;
创建/home/oracle/scripts/rman_backup.sh,内容如下:
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
# 定义备份目录(需提前创建并授权)
BACKUP_DIR=/backup/oracle/rman
LOG_FILE=$BACKUP_DIR/rman_backup_$(date +%Y%m%d).log
# 执行RMAN备份
rman target / <<EOF >> $LOG_FILE 2>&1
run {
allocate channel ch1 type disk;
backup database plus archivelog format '$BACKUP_DIR/full_%U.bak';
release channel ch1;
}
exit;
EOF
通过crontab -e添加每日凌晨2点执行的定时任务:
0 2 * * * /bin/bash /home/oracle/scripts/rman_backup.sh
archive log list,若未开启可通过alter database archivelog;开启);chown -R oracle:oinstall /backup/oracle);find $BACKUP_DIR -name "*.bak" -mtime +30 -exec rm -f {} \;)。EXPDP(数据泵导出)与IMPDP(数据泵导入)是Oracle提供的逻辑备份工具,适用于跨平台迁移、表级/用户级备份,支持压缩与并行处理。
以SYSDBA身份登录SQL*Plus,创建逻辑备份目录并授权:
-- 创建物理目录(Ubuntu系统)
sudo mkdir -p /backup/oracle/expdp
sudo chown oracle:oinstall /backup/oracle/expdp
-- 创建目录对象并授权
sqlplus / as sysdba
CREATE DIRECTORY EXPDP_DIR AS '/backup/oracle/expdp';
GRANT READ, WRITE ON DIRECTORY EXPDP_DIR TO scott; -- 授权给需要备份的用户(如scott)
EXIT;
expdp scott/tiger@orcl schemas=scott directory=EXPDP_DIR dumpfile=scott_full.dmp logfile=scott_export.log compression=all
expdp scott/tiger@orcl incremental level=1 directory=EXPDP_DIR dumpfile=scott_inc.dmp logfile=scott_incremental.log
impdp scott/tiger@orcl schemas=scott directory=EXPDP_DIR dumpfile=scott_full.dmp logfile=scott_import.log
impdp scott/tiger@orcl tables=employees directory=EXPDP_DIR dumpfile=scott_full.dmp logfile=scott_table_restore.log
创建/home/oracle/scripts/expdp_backup.sh,内容如下:
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
# 定义备份目录与文件名
BACKUP_DIR=/backup/oracle/expdp
DATE=$(date +%Y%m%d)
DUMPFILE=scott_full_$DATE.dmp
LOGFILE=scott_export_$DATE.log
# 执行导出
expdp scott/tiger@orcl schemas=scott directory=EXPDP_DIR dumpfile=$DUMPFILE logfile=$LOGFILE compression=all
通过crontab -e添加每日凌晨3点执行的定时任务:
0 3 * * * /bin/bash /home/oracle/scripts/expdp_backup.sh
table_exists_action=replace参数覆盖);compression=all参数启用压缩(减少存储空间占用);通过Ubuntu系统自带的tar命令备份Oracle数据库的物理文件(数据文件、控制文件、重做日志文件、参数文件),适用于快速备份或迁移。
sqlplus / as sysdba执行以下命令):SHOW PARAMETER CONTROL_FILES; -- 控制文件路径
SHOW PARAMETER DB_CREATE_FILE_DEST; -- 数据文件默认路径
SHOW PARAMETER LOG_ARCHIVE_DEST_1; -- 归档日志路径
SHOW PARAMETER SPFILE; -- 参数文件路径(如spfileorcl.ora)
EXIT;
tar -czvf /backup/oracle/fs_backup_$(date +%Y%m%d).tar.gz \
/u01/app/oracle/oradata/orcl/*.dbf \ # 数据文件
/u01/app/oracle/oradata/orcl/*.ctl \ # 控制文件
/u01/app/oracle/fast_recovery_area/ORCL/archivelog/*.arc \ # 归档日志
/u01/app/oracle/product/19c/dbs/spfileorcl.ora # 参数文件
/home/oracle/scripts/fs_backup.sh,并通过crontab设置每日凌晨4点执行;find /backup/oracle -name "fs_backup_*.tar.gz" -mtime +7 -exec rm -f {} \;
alter database mount;)或关闭状态(shutdown immediate),避免文件损坏;startup mount启动数据库,再执行recover database完成恢复。无论选择哪种备份方式,均需通过crontab实现自动化,以下是配置要点:
su - oracle
crontab -e
0 2 * * * /bin/bash /home/oracle/scripts/rman_backup.sh
0 3 * * * /bin/bash /home/oracle/scripts/expdp_backup.sh
>> /home/oracle/scripts/backup.log 2>&1),便于后续排查问题。startup mount,再通过restore database恢复数据文件,recover database应用归档日志,最后alter database open打开数据库;impdp命令导入备份文件,若需覆盖现有数据,可添加table_exists_action=replace参数;