Oracle数据备份在Ubuntu上如何实现
导读:在 Ubuntu 上备份 Oracle 的两种常用方案 RMAN 物理备份:面向生产环境的热备/增量备份,支持归档日志、控制文件与备份校验,恢复粒度细、速度快,适合有归档模式与恢复目录的部署。 Data Pump 逻辑备份(expdp/i...
在 Ubuntu 上备份 Oracle 的两种常用方案
- RMAN 物理备份:面向生产环境的热备/增量备份,支持归档日志、控制文件与备份校验,恢复粒度细、速度快,适合有归档模式与恢复目录的部署。
- Data Pump 逻辑备份(expdp/impdp):导出表、用户、全库等逻辑对象,便于跨平台迁移与选择性恢复,对停机不敏感,适合开发/测试与部分生产场景。
RMAN 物理备份步骤
- 准备与归档模式
- 以 sysdba 登录数据库,确认归档状态:
SQL> archive log list; - 若未启用归档,按如下方式开启(会短暂停库):
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
- 以 sysdba 登录数据库,确认归档状态:
- 连接 RMAN 并执行备份(示例为连接到本机实例)
- 连接目标库:
$ rman target / - 常用备份命令:
- 全库 + 归档日志:backup database plus archivelog;
- 增量备份:backup incremental level 1;
- 仅归档日志:backup archivelog all;
- 控制文件:backup current controlfile;
- 连接目标库:
- 备份校验与清单查看
- 查看备份:list backup;
- 校验可用性:restore database validate;
- 说明
- 建议配置 FRA(快速恢复区) 与(可选)恢复目录,便于管理与保留策略控制。
- 物理备份适合需要时间点恢复与最小停机的生产库。
Data Pump 逻辑备份步骤
- 创建操作系统目录并赋权
- $ mkdir -p /data/exp_dir
- $ chmod -R 775 /data/exp_dir
- 在数据库中创建 DIRECTORY 对象并授权
- SQL> create directory test_dir as ‘/data/exp_dir’;
- SQL> grant read, write on directory test_dir to system;
- 执行导出
- 全库导出:
$ expdp system/oracle directory=test_dir dumpfile=full_backup.dmp logfile=expdp_full.log full=y - 按用户导出:
$ expdp system/oracle directory=test_dir dumpfile=schema.dmp logfile=expdp_schema.log schemas=SCOTT - 按表导出:
$ expdp system/oracle directory=test_dir dumpfile=tab.dmp logfile=expdp_tab.log tables=SCOTT.EMP
- 全库导出:
- 导入简述(如需恢复/迁移)
- 全库导入:impdp system/oracle directory=test_dir dumpfile=full_backup.dmp logfile=impdp_full.log full=y
- 按方案/表导入:使用 impdp 的 schemas/tables 等参数定向恢复。
- 说明
- 逻辑备份文件位于操作系统目录(如 /data/exp_dir),请确保磁盘空间充足与权限正确。
自动化与保留策略
- 准备脚本与日志目录(示例)
- $ mkdir -p /var/db_backups/oracle
- $ chown oracle:oinstall /var/db_backups/oracle
- 示例脚本 backup_oracle.sh(Data Pump 按用户导出,保留 7 天)
- 要点:在脚本中显式设置 ORACLE_HOME、ORACLE_SID、PATH,避免 cron 环境缺失变量。
- 示例:
#!/bin/bash
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export ORACLE_SID=ORCLCDB
export PATH=$ORACLE_HOME/bin:$PATH
BACKUP_ROOT=“/var/db_backups/oracle”
KEEP_DAYS=7
DATE_STR=$(date +%Y%m%d)
DUMP_FILE=“oracle_${ DATE_STR} .dmp”
LOG_FILE=“oracle_${ DATE_STR} .log”
ORACLE_USER=“system”
ORACLE_PASS=“YourPassword”
ORACLE_DIR=“TEST_DIR”
mkdir -p “$BACKUP_ROOT”
$ORACLE_HOME/bin/expdp ${ ORACLE_USER} /${ ORACLE_PASS} @//localhost:1521/${ ORACLE_SID} \ SCHEMAS=SCOTT \ DIRECTORY=${ ORACLE_DIR} \ DUMPFILE=${ DUMP_FILE} \ LOGFILE=${ LOG_FILE}清理旧备份
find “$BACKUP_ROOT” -name “oracle_.dmp" -mtime +${ KEEP_DAYS} -delete
find “$BACKUP_ROOT” -name "oracle_.log” -mtime +${ KEEP_DAYS} -delete
- 赋权与定时任务
- $ chmod +x /usr/local/bin/backup_oracle.sh
- 以 oracle 用户添加 cron(示例:每天 03:00 执行)
$ crontab -u oracle -e
0 3 * * * /usr/local/bin/backup_oracle.sh > > /var/db_backups/oracle/backup.log 2> & 1
- 说明
- 若使用 RMAN,可将脚本中的 expdp 替换为 RMAN 命令块,并在 cron 中调用 rman 脚本;务必在脚本开头加载 Oracle 环境变量。
恢复要点与注意事项
- RMAN 恢复
- 数据文件丢失:RMAN> restore database; 然后 RMAN> recover database;
- 仅个别数据文件:RMAN> restore datafile < file_id> ; RMAN> recover datafile < file_id> ;
- 不完全恢复(基于时间/SCN):RMAN> run { set until time ‘2026-01-01 12:00:00’; restore database; recover database; }
- Data Pump 恢复
- 全库:impdp system/oracle directory=TEST_DIR dumpfile=full_backup.dmp full=y logfile=impdp_full.log
- 按方案/表:使用 schemas/tables 参数定向导入。
- 关键注意事项
- 生产库优先使用 RMAN 并启用 归档日志;定期做备份校验与恢复演练。
- 逻辑备份适合迁移/部分恢复,对大数据量与高并发场景恢复速度不如 RMAN。
- 备份文件请异地/离线保存,并监控磁盘空间与保留策略;脚本务必设置 ORACLE_HOME、ORACLE_SID、PATH 等环境变量,避免 cron 执行失败。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Oracle数据备份在Ubuntu上如何实现
本文地址: https://pptw.com/jishu/787168.html
