RMAN是Oracle官方推荐的备份恢复工具,支持物理备份(数据文件、控制文件、归档日志)和逻辑恢复,适用于数据库级故障(如介质损坏、误删除数据文件)。
基础恢复步骤:
rman target /
RUN {
ALLOCATE CHANNEL ch1 TYPE DISK;
RESTORE DATABASE; -- 还原数据文件、控制文件等
RECOVER DATABASE; -- 应用归档日志和重做日志
ALTER DATABASE OPEN RESETLOGS; -- 打开数据库(重置重做日志)
RELEASE CHANNEL ch1;
}
注意事项:
STARTUP MOUNT);INCREMENTAL FROM SCN <scn号>参数;Flashback是Oracle的“时间旅行”功能,适用于误操作(删除表、更新数据)或逻辑坏道,无需依赖物理备份。
查询过去某个时间点的数据并恢复:
-- 查询指定时间点的数据
SELECT * FROM table_name AS OF TIMESTAMP TO_TIMESTAMP('2025-09-20 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
-- 恢复数据到原表(覆盖当前数据)
INSERT INTO table_name SELECT * FROM table_name AS OF TIMESTAMP TO_TIMESTAMP('2025-09-20 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
将表恢复到指定时间点(保留表结构、索引、约束):
FLASHBACK TABLE table_name TO TIMESTAMP TO_TIMESTAMP('2025-09-20 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
需提前开启Flashback Database功能(ALTER DATABASE FLASHBACK ON),恢复整个数据库到指定时间点:
-- 检查Flashback日志可用时间范围
SELECT * FROM V$FLASHBACK_DATABASE_LOG;
-- 执行恢复
FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2025-09-20 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
-- 打开数据库
ALTER DATABASE OPEN;
注意事项:
ARCHIVELOG模式(ALTER DATABASE ARCHIVELOG);DB_RECOVERY_FILE_DEST参数);适用于逻辑备份恢复(如误删除表、schema),或跨数据库迁移数据。
恢复步骤:
expdp导出备份):impdp system/password@SID DIRECTORY=DATA_PUMP_DIR DUMPFILE=backupfile.dmp LOGFILE=import.log FULL=Y
DIRECTORY:Oracle目录对象(需提前创建,指向物理路径);FULL=Y:恢复整个数据库;若恢复单个schema,用SCHEMAS=schema_name;TABLE_EXISTS_ACTION=APPEND:若表已存在,追加数据(避免覆盖)。PARALLEL参数加速(如PARALLEL=4)。若数据文件被误删除(如rm命令),可通过文件句柄恢复(需立即操作,避免进程释放句柄):
# 查找Oracle数据文件进程的PID
ps -ef | grep pmon
# 替换<PID>为Oracle进程ID(如3763)
ls -l /proc/<PID>/fd | grep deleted
cp /proc/<PID>/fd/<FD号> /u01/app/oracle/oradata/ORCL/datafile_name.dbf
-- 将数据文件离线
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/datafile_name.dbf' OFFLINE;
-- 恢复文件
RMAN> RESTORE DATAFILE '/u01/app/oracle/oradata/ORCL/datafile_name.dbf';
-- 恢复数据库
RMAN> RECOVER DATABASE;
-- 将数据文件联机
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/datafile_name.dbf' ONLINE;
注意事项:
RMAN> VALIDATE DATAFILE)。若上述方法无法恢复(如备份丢失、日志损坏),可使用第三方工具(如Auto Oracle、DataNumen Oracle Recovery),支持从碎片化数据中恢复表、索引等对象。
操作步骤(以Auto Oracle为例):
RMAN> BACKUP DATABASE),避免二次破坏;SYSDBA或对应权限(如IMP_FULL_DATABASE);alert.log和trace文件定位问题(路径:$ORACLE_BASE/diag/rdbms/<SID>/<SID>/trace)。