CentOS 上 Oracle 数据恢复实用指南
一、先判断场景与准备
sqlplus / as sysdba → select status from v$instance;;archive log list;mkdir -p /oracledir && chown -R oracle:oinstall /oracledir。二、场景化恢复步骤
SELECT * FROM RECYCLEBIN WHERE original_name='YOUR_TABLE';FLASHBACK TABLE YOUR_TABLE TO BEFORE DROP;SELECT * FROM YOUR_TABLE AS OF TIMESTAMP TO_TIMESTAMP('2026-01-07 10:00:00','YYYY-MM-DD HH24:MI:SS');FLASHBACK TABLE YOUR_TABLE TO SCN <SCN>;(需启用 Flashback 且权限/空间足够)。ps -ef | grep ora_dbw;进入句柄目录:cd /proc/<PID>/fd;(deleted)),拷回原路径:cp <FD> /u01/app/oradata/ORCL/users01.dbf;shutdown immediate → startup(若提示具体文件异常再用下条)→ recover datafile <file#> → alter database open;。startup nomount; → 还原控制文件:RMAN> RESTORE CONTROLFILE FROM '/backup/ctl.bak'; → alter database mount;RMAN> RESTORE DATABASE;RMAN> RECOVER DATABASE; 或 RECOVER DATAFILE <n>;RMAN> ALTER DATABASE OPEN RESETLOGS;(若恢复到新时间线)。create pfile='/backup/pfile.ora' from spfile;,备份数据文件、归档日志、当前控制文件;pfile.ora、orapw<ORACLE_SID>;startup nomount pfile='/backup/pfile.ora'; → create spfile from pfile;RESTORE DATABASE; → RECOVER DATABASE; → ALTER DATABASE OPEN RESETLOGS;。create directory dpdir as '/oracledir';(确保 oracle:oinstall 权限);impdp system/<pwd>@<tns> directory=dpdir dumpfile=expdp_20260107.dmp logfile=impdp.log full=y | schemas=YOUR_SCHEMA。三、常用诊断 SQL 与要点
select file#, error, checkpoint_change# from v$recover_file;;select file#, checkpoint_change# from v$datafile_header;select name from v$archived_log;;select * from v$recovery_log;ALTER TABLESPACE <ts> OFFLINE IMMEDIATE; → 还原 → RECOVER TABLESPACE <ts>; → ONLINE;单个数据文件可在 OPEN 下先 OFFLINE 再 RECOVER DATAFILE <n>; → ONLINE。pfile 启动到 NOMOUNT 重建控制文件(复杂且风险高,建议 RMAN)。四、注意事项与最佳实践
db_name、control_files、db_recovery_file_dest 等参数一致或正确映射;必要时使用 RESETLOGS 开库。