温馨提示×

Ubuntu Oracle 数据库备份方法

小樊
47
2025-10-10 07:53:11
栏目: 云计算

Ubuntu系统下Oracle数据库常用备份方法及实践

一、RMAN(Recovery Manager)物理备份

RMAN是Oracle官方推荐的物理备份工具,支持全备份、增量备份、归档日志备份,适用于生产环境的高可靠性需求。

1. 基础备份命令

以Oracle用户身份登录Ubuntu,启动RMAN并连接目标数据库,执行全量备份(包含数据文件、控制文件、归档日志):

rman target /
run {
    allocate channel ch1 type disk;          # 分配磁盘通道
    backup database plus archivelog;         # 备份数据库及归档日志
    release channel ch1;                     # 释放通道
}
exit;

2. 自动化脚本示例

创建/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

3. 定时任务配置

通过crontab -e添加每日凌晨2点执行的定时任务:

0 2 * * * /bin/bash /home/oracle/scripts/rman_backup.sh

4. 注意事项

  • 执行前需确认数据库处于归档模式(查询archive log list,若未开启可通过alter database archivelog;开启);
  • 备份目录需设置为Oracle用户可写(chown -R oracle:oinstall /backup/oracle);
  • 定期清理旧备份(如保留30天内的文件,使用find $BACKUP_DIR -name "*.bak" -mtime +30 -exec rm -f {} \;)。

二、EXPDP/IMPDP逻辑备份

EXPDP(数据泵导出)与IMPDP(数据泵导入)是Oracle提供的逻辑备份工具,适用于跨平台迁移、表级/用户级备份,支持压缩与并行处理。

1. 前提条件:创建目录对象

以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;

2. 基础备份命令

  • 全量备份(指定用户)
    expdp scott/tiger@orcl schemas=scott directory=EXPDP_DIR dumpfile=scott_full.dmp logfile=scott_export.log compression=all
    
  • 增量备份(基于SCN或时间戳)
    expdp scott/tiger@orcl incremental level=1 directory=EXPDP_DIR dumpfile=scott_inc.dmp logfile=scott_incremental.log
    

3. 基础恢复命令

  • 全量恢复(覆盖现有数据)
    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
    

4. 自动化脚本示例

创建/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

5. 定时任务配置

通过crontab -e添加每日凌晨3点执行的定时任务:

0 3 * * * /bin/bash /home/oracle/scripts/expdp_backup.sh

6. 注意事项

  • 导入前需确认目标数据库中不存在同名用户/表(或使用table_exists_action=replace参数覆盖);
  • 逻辑备份文件较大时,可通过compression=all参数启用压缩(减少存储空间占用);
  • 定期验证备份文件的完整性(如尝试导入到测试库)。

三、文件系统级备份

通过Ubuntu系统自带的tar命令备份Oracle数据库的物理文件(数据文件、控制文件、重做日志文件、参数文件),适用于快速备份或迁移。

1. 备份步骤

  • 确认关键文件路径(通过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;
    
  • 执行备份(以Oracle用户身份):
    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  # 参数文件
    

2. 自动化与清理

  • 将上述命令写入脚本/home/oracle/scripts/fs_backup.sh,并通过crontab设置每日凌晨4点执行;
  • 清理7天前的备份文件:
    find /backup/oracle -name "fs_backup_*.tar.gz" -mtime +7 -exec rm -f {} \;
    

3. 注意事项

  • 备份前需将数据库置于挂载状态alter database mount;)或关闭状态shutdown immediate),避免文件损坏;
  • 恢复时需将备份文件复制到原路径,并通过startup mount启动数据库,再执行recover database完成恢复。

四、定时任务最佳实践

无论选择哪种备份方式,均需通过crontab实现自动化,以下是配置要点:

  1. 切换至Oracle用户(定时任务需以Oracle用户身份执行):
    su - oracle
    crontab -e
    
  2. 添加定时任务示例(每日凌晨2点执行RMAN备份、3点执行EXPDP备份):
    0 2 * * * /bin/bash /home/oracle/scripts/rman_backup.sh
    0 3 * * * /bin/bash /home/oracle/scripts/expdp_backup.sh
    
  3. 日志记录
    将脚本输出重定向到日志文件(如>> /home/oracle/scripts/backup.log 2>&1),便于后续排查问题。

五、恢复操作概述

  • RMAN恢复:若数据库无法启动,需先执行startup mount,再通过restore database恢复数据文件,recover database应用归档日志,最后alter database open打开数据库;
  • EXPDP恢复:使用impdp命令导入备份文件,若需覆盖现有数据,可添加table_exists_action=replace参数;
  • 文件系统恢复:将备份文件复制到原路径,启动数据库至挂载状态,执行恢复命令后打开数据库。

0