linux

Linux上Oracle如何备份与恢复

小樊
44
2025-10-22 23:03:46
栏目: 云计算

Linux环境下Oracle数据库备份与恢复指南

一、备份概述

Oracle数据库备份分为物理备份(直接复制数据库文件,如数据文件、控制文件、归档日志)和逻辑备份(导出数据库对象的结构与数据,如expdp/impdp)。物理备份是恢复的基础,逻辑备份适用于数据迁移或选择性恢复。

二、物理备份(使用RMAN)

RMAN(Recovery Manager)是Oracle官方推荐的物理备份工具,支持全备、增量备份、压缩备份等功能,且能自动管理备份文件。

1. 准备工作

2. 全量备份(包含数据文件、控制文件、归档日志)

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

3. 增量备份(仅备份自上次备份以来变化的数据)

rman target /
run {
  allocate channel ch1 type disk;
  backup incremental level 1 database;  -- 1级增量备份(基于最近的全备或1级增量备份)
  release channel ch1;
}

4. 自动化备份(通过crontab定时执行)

编辑crontab文件(每天凌晨2点执行全备):

crontab -e

添加以下内容:

0 2 * * * /bin/bash -c 'source /home/oracle/.bash_profile; rman target / <<EOF
run {
  allocate channel ch1 type disk;
  backup database plus archivelog;
  release channel ch1;
}
exit;
EOF'

三、物理恢复(使用RMAN)

恢复流程需根据故障类型调整,常见场景包括数据库损坏数据文件丢失误删除数据

1. 恢复前的准备

2. 完整恢复(恢复整个数据库)

rman target /
run {
  allocate channel ch1 type disk;
  restore database;  -- 恢复数据文件、控制文件
  recover database;  -- 应用归档日志,使数据库达到一致状态
  alter database open;  -- 打开数据库
  release channel ch1;
}

3. 恢复到指定时间点(解决误操作问题)

若需恢复到某个具体时间(如2025-10-20 18:00),需先查询该时间点的SCN(系统改变号):

sqlplus / as sysdba
select timestamp_to_scn(to_timestamp('2025-10-20 18:00:00', 'YYYY-MM-DD HH24:MI:SS')) from dual;

得到SCN后,执行时间点恢复:

rman target /
run {
  allocate channel ch1 type disk;
  restore database;
  recover database until scn 123456789;  -- 替换为查询到的SCN
  alter database open resetlogs;  -- 打开数据库(需重置日志,因为恢复过程中会生成新日志)
  release channel ch1;
}

4. 恢复单个数据文件(如users表空间数据文件丢失)

rman target /
run {
  allocate channel ch1 type disk;
  restore datafile '/u01/oracle/oradata/ORCL/users01.dbf';  -- 指定丢失的数据文件路径
  recover datafile '/u01/oracle/oradata/ORCL/users01.dbf';
  sql 'alter database datafile 4 online';  -- 将数据文件状态改为online(4为数据文件编号,可通过desc v$datafile查看)
  release channel ch1;
}

四、逻辑备份与恢复(使用expdp/impdp)

逻辑备份通过expdp(导出)和impdp(导入)工具实现,适用于选择性恢复(如恢复某个表、表空间)或跨数据库迁移

1. 准备工作

2. 全库导出

expdp system/password@ORCL directory=dpump_dir dumpfile=full_db.dmp logfile=expdp_full.log full=y

3. 全库导入

impdp system/password@ORCL directory=dpump_dir dumpfile=full_db.dmp logfile=impdp_full.log full=y

4. 选择性恢复(如恢复users表)

五、注意事项

0
看了该问题的人还看了