RMAN是Oracle官方推荐的物理备份恢复工具,支持全量备份、增量备份及归档日志恢复,适用于数据库级故障(如数据文件损坏、数据库崩溃)。
全量恢复(数据库完全损坏):
rman target /;RUN {
ALLOCATE CHANNEL ch1 TYPE DISK;
RESTORE DATABASE; -- 恢复所有数据文件
RECOVER DATABASE; -- 应用归档日志和重做日志
ALTER DATABASE OPEN RESETLOGS; -- 重置日志序列(需重建控制文件时使用)
RELEASE CHANNEL ch1;
}
SELECT * FROM v$database;确认数据库状态为OPEN。恢复单个数据文件:
若仅某个数据文件损坏(如system01.dbf),可针对性恢复:
RUN {
RESTORE DATAFILE '/u01/oradata/ORCL/system01.dbf'; -- 指定数据文件路径
RECOVER DATAFILE '/u01/oradata/ORCL/system01.dbf';
ALTER DATABASE OPEN;
}
Flashback是Oracle的“时间机器”功能,通过闪回日志或恢复点快速回退数据库到指定时间点,适用于误删除数据、误更新表、逻辑坏道等场景(需提前开启ARCHIVELOG模式和闪回恢复区)。
恢复到指定时间点:
若数据库因误操作(如批量删除数据)损坏,可闪回至故障前时间点:
-- 1. 检查闪回日志可用时间范围
SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;
-- 2. 执行闪回(将数据库回退至2025-10-20 14:30:00)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2025-10-20 14:30:00', 'YYYY-MM-DD HH24:MI:SS');
ALTER DATABASE OPEN RESETLOGS;
恢复单个表到过去状态:
若某表(如employees)被误删除或更新,可使用FLASHBACK TABLE:
-- 1. 开启表的行移动(若未开启)
ALTER TABLE employees ENABLE ROW MOVEMENT;
-- 2. 闪回表至指定时间点(如2025-10-19 10:00:00)
FLASHBACK TABLE employees TO TIMESTAMP TO_TIMESTAMP('2025-10-19 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
expdp(数据泵导出)和impdp(数据泵导入)是Oracle的逻辑备份恢复工具,通过导出/导入数据对象(表、表空间、整个数据库)实现恢复,适用于逻辑坏道、表结构损坏、跨数据库迁移等场景。
导出备份:
导出整个数据库(需SYSDBA权限):
expdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=full_db.dmp logfile=full_export.log full=y
导出单个表(如employees表):
expdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=employees.dmp logfile=emp_export.log tables=employees
导入恢复:
恢复整个数据库:
impdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=full_db.dmp logfile=full_import.log full=y
恢复单个表(覆盖现有表需加REPLACE参数):
impdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=employees.dmp logfile=emp_import.log tables=employees replace
若数据文件被误删除(如rm -rf操作),可通过以下步骤恢复:
/proc文件系统找到数据文件的句柄:# 1. 查找数据库写入进程的PID
ps -ef | grep dbwriter
# 2. 查看该进程打开的文件句柄
ls -l /proc/<PID>/fd | grep deleted
# 示例输出:lrwx------ 1 oracle oracle 64 Oct 25 10:00 5 -> /u01/oradata/ORCL/system01.dbf (deleted)
cp /proc/<PID>/fd/5 /u01/oradata/ORCL/system01.dbf
RECOVER DATAFILE '/u01/oradata/ORCL/system01.dbf';
ALTER DATABASE OPEN;
以上方法覆盖了Linux环境下Oracle数据库的常见恢复场景,可根据故障类型选择合适的方式。