Linux上Oracle如何备份与恢复
导读:Linux环境下Oracle数据库备份与恢复指南 一、备份概述 Oracle数据库备份分为物理备份(直接复制数据库文件,如数据文件、控制文件、归档日志)和逻辑备份(导出数据库对象的结构与数据,如expdp/impdp)。物理备份是恢复的基础...
Linux环境下Oracle数据库备份与恢复指南
一、备份概述
Oracle数据库备份分为物理备份(直接复制数据库文件,如数据文件、控制文件、归档日志)和逻辑备份(导出数据库对象的结构与数据,如expdp/impdp)。物理备份是恢复的基础,逻辑备份适用于数据迁移或选择性恢复。
二、物理备份(使用RMAN)
RMAN(Recovery Manager)是Oracle官方推荐的物理备份工具,支持全备、增量备份、压缩备份等功能,且能自动管理备份文件。
1. 准备工作
- 确认数据库处于归档模式(归档模式允许恢复到指定时间点,是生产环境的必备配置):
sqlplus / as sysdba archive log list; -- 检查是否为归档模式 shutdown immediate; -- 关闭数据库 startup mount; -- 启动到mount状态 alter database archivelog; -- 开启归档模式 alter database open; -- 打开数据库 - 创建备份目录并授权:
mkdir -p /u01/oracle/backup chown -R oracle:oinstall /u01/oracle/backup
2. 全量备份(包含数据文件、控制文件、归档日志)
rman target /
run {
allocate channel ch1 type disk;
-- 分配磁盘通道
backup database plus archivelog;
-- 备份数据库及归档日志
release channel ch1;
-- 释放通道
}
- 优化命令:指定备份路径(避免默认路径空间不足)并启用控制文件自动备份:
configure channel device type disk format '/u01/oracle/backup/%U'; -- 设置备份文件格式(%U为唯一标识符) configure controlfile autobackup on; -- 开启控制文件自动备份
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. 恢复前的准备
- 确认备份文件完整(可通过
rman target / list backup;查看备份集)。 - 将数据库启动到mount状态(恢复过程中需挂载数据库):
sqlplus / as sysdba shutdown immediate; startup mount;
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. 准备工作
- 确认DIRECTORY对象存在(用于存储导出文件):
sqlplus / as sysdba create directory dpump_dir as '/u01/oracle/dump'; grant read, write on directory dpump_dir to system; -- 授权用户访问目录
2. 全库导出
expdp system/password@ORCL directory=dpump_dir dumpfile=full_db.dmp logfile=expdp_full.log full=y
- 参数说明:
full=y表示全库导出,dumpfile指定导出文件名,logfile指定日志文件名。
3. 全库导入
impdp system/password@ORCL directory=dpump_dir dumpfile=full_db.dmp logfile=impdp_full.log full=y
4. 选择性恢复(如恢复users表)
- 导出特定表:
expdp system/password@ORCL directory=dpump_dir dumpfile=users_table.dmp logfile=expdp_users.log tables=users - 导入特定表:
impdp system/password@ORCL directory=dpump_dir dumpfile=users_table.dmp logfile=impdp_users.log tables=users
五、注意事项
- 备份验证:定期执行
rman target / list backup;检查备份集完整性,或通过restore database validate;模拟恢复过程。 - 保留策略:通过
configure retention policy to recovery window of 7 days;设置保留7天的备份(自动删除过期备份)。 - 灾难恢复:结合Oracle Data Guard实现异地容灾(主库故障时快速切换到备用库),提升业务连续性。
- 日志管理:归档日志目录(如
/u01/oracle/archive)需有足够空间,避免因空间不足导致数据库无法归档。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux上Oracle如何备份与恢复
本文地址: https://pptw.com/jishu/733426.html
