Ubuntu 上 Oracle 数据恢复实用指南
一、先判断场景与准备
二、RMAN 物理恢复步骤(有 RMAN 备份时)
su - oraclerman target /RMAN> list backup; 或 RMAN> validate backup;SQL> shutdown immediate; SQL> startup mount;RMAN> restore database;RMAN> recover database;SQL> alter database open;SQL> select file#, name from v$datafile;RMAN> restore datafile <file#>; RMAN> recover datafile <file#>;RMAN> restore controlfile from '/path/controlfile.bkp';SQL> startup mount; RMAN> recover database; SQL> alter database open resetlogs;RMAN> restore archivelog from '/path/arch/';RMAN> recover database;三、Data Pump 逻辑恢复(有 expdp 备份时)
SQL> create directory exp_dir as '/data/exp_dir';SQL> grant read, write on directory exp_dir to system;impdp system/password@SID dumpfile=db_backup.dmp full=y directory=exp_dir logfile=impdp_full.logimpdp system/password@SID directory=exp_dir dumpfile=expdp.dmp fromuser=scott touser=scott logfile=impdp_scott.logimpdp ... tables=EMP,DEPT tablespaces=USERS logfile=impdp_tab.logremap_schema、remap_tablespace、table_exists_action=replace/truncate/skip、parallel 等可按需选择。四、闪回与日志挖掘(无需全量恢复的优先选项)
SELECT * FROM schema.tbl AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '30' MINUTE);FLASHBACK TABLE schema.tbl TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '30' MINUTE);(需启用行移动:ALTER TABLE schema.tbl ENABLE ROW MOVEMENT;)SQL> flashback database to timestamp to_timestamp('2025-04-01 10:00:00','YYYY-MM-DD HH24:MI:SS');SQL> alter database open resetlogs;V$LOGMNR_CONTENTS 定位 DML/DDL,按业务重建或补救数据。五、无法启动或数据字典损坏时的离线抽取
unload dictlist user、list table <schema>unload table <schema>.<table>scan extent 后 unload table ...