RMAN是Oracle官方提供的物理备份恢复工具,支持全量、增量及归档日志备份,是Oracle数据库恢复的核心工具。
rman target / log '/path/to/backup_log.log' <<EOF
run {
allocate channel ch1 type disk;
backup database plus archivelog; -- 备份数据库及归档日志
release channel ch1;
}
exit;
EOF
rman target / log '/path/to/restore_log.log' <<EOF
run {
allocate channel ch1 type disk;
restore database; -- 恢复数据文件、控制文件
recover database; -- 应用归档日志使数据库一致
alter database open resetlogs; -- 打开数据库(重置重做日志)
release channel ch1;
}
exit;
EOF
适用场景:数据库崩溃、数据文件损坏、归档日志丢失等物理层面故障。
Flashback技术通过Oracle内置的重做日志或闪回日志,快速恢复误删除、误更新数据,无需完整备份。
-- 1. 检查闪回日志可用时间范围
SELECT * FROM v$flashback_database_log;
-- 2. 执行闪回(将数据库回滚到指定时间)
FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2025-10-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS');
-- 3. 打开数据库(若闪回后需正常运行)
ALTER DATABASE OPEN;
-- 1. 查询误删除前的数据
SELECT * FROM employees AS OF TIMESTAMP TO_TIMESTAMP('2025-10-01 11:30:00', 'YYYY-MM-DD HH24:MI:SS');
-- 2. 恢复数据到原表(需临时表空间足够)
INSERT INTO employees SELECT * FROM employees AS OF TIMESTAMP TO_TIMESTAMP('2025-10-01 11:30:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE employee_id = 101; -- 指定条件恢复特定记录
适用场景:误删除表数据、误更新数据、数据库逻辑坏道等。
expdp/impdp是Oracle的逻辑备份恢复工具,通过导出/导入数据文件(DMP格式),适用于跨数据库迁移或逻辑损坏恢复。
expdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=expdp_full.log full=y
impdp system/password@ORCL directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=impdp_restore.log full=y
适用场景:逻辑坏道、表结构损坏、跨数据库迁移等。
数据恢复顾问是Oracle 11g及以上版本的内置工具,可自动诊断数据库故障并提供修复方案。
-- 1. 连接到目标数据库
CONNECT sys/password@ORCL AS SYSDBA;
-- 2. 启动数据恢复顾问
BEGIN
DBMS_RCVMAN.START_RECOVERY();
END;
/
-- 3. 查看故障详情
SELECT * FROM V$RECOVERY_ADVISOR;
-- 4. 执行修复(按向导选择修复方案)
EXEC DBMS_RCVMAN.REPAIR();
适用场景:数据库物理损坏、控制文件丢失、重做日志损坏等自动化修复。
若数据文件被误删除(如rm -rf操作),可通过文件句柄恢复(需文件未被覆盖)。
# 1. 找到Oracle数据库进程ID
ps -ef | grep pmon
# 2. 查看进程打开的文件句柄(替换PID为实际进程ID)
ls -l /proc/<PID>/fd | grep deleted
# 3. 拷贝句柄到新路径(替换FD编号和路径)
cp /proc/<PID>/fd/5 /u01/oradata/ORCL/system01.dbf
# 4. 修复权限
chown oracle:oinstall /u01/oradata/ORCL/system01.dbf
chmod 600 /u01/oradata/ORCL/system01.dbf
适用场景:数据文件被误删除、文件系统未覆盖。
以上方法覆盖了Oracle Linux环境下常见的数据恢复场景,可根据故障类型选择合适的方式。复杂故障建议联系Oracle技术支持协助处理。