CentOS 下使用 SQL*Plus 的恢复操作指南
一、准备与环境检查
sqlplus / as sysdba。echo $ORACLE_HOME、echo $PATH,必要时在 ~/.bash_profile 中设置 ORACLE_HOME、ORACLE_SID、PATH=$ORACLE_HOME/bin:$PATH 并 source 使其生效。SELECT status FROM v$instance; 正常应为 OPEN,异常时可能为 MOUNTED 或 STARTED。SHOW PARAMETER background_dump_dest;、SHOW PARAMETER user_dump_dest;,日志通常位于 $ORACLE_BASE/diag/rdbms/<sid>/trace/。这些检查有助于明确恢复路径(介质恢复、不完全恢复或仅逻辑导入)。二、RMAN 物理恢复流程(推荐)
rman target / 连接;2) 启动到 NOMOUNT:STARTUP NOMOUNT;;3) 还原控制文件:RESTORE CONTROLFILE FROM '/path/controlfile.bkp';;4) 启动到 MOUNT:ALTER DATABASE MOUNT;;5) 恢复数据库:RECOVER DATABASE;;6) 以重置日志打开:ALTER DATABASE OPEN RESETLOGS;(若在线日志损坏/缺失)。STARTUP MOUNT;;2) 还原受损数据文件:RESTORE DATAFILE <file#|'/path/file.dbf'>;;3) 应用日志:RECOVER DATAFILE <file#|'/path/file.dbf'>;;4) ALTER DATABASE OPEN;。ALTER TABLESPACE <ts_name> OFFLINE IMMEDIATE;(或 OFFLINE NORMAL 若允许一致性);2) 还原该表空间的数据文件:RESTORE TABLESPACE <ts_name>;;3) 恢复:RECOVER TABLESPACE <ts_name>;;4) 上线:ALTER TABLESPACE <ts_name> ONLINE;。STARTUP MOUNT;;2) 指定恢复目标:RECOVER DATABASE UNTIL TIME '2025-12-01 10:00:00'; 或 UNTIL SCN <scn> 或 UNTIL SEQUENCE <seq> THREAD <thread#>;3) 打开数据库:ALTER DATABASE OPEN RESETLOGS;。RMAN> RESTORE ARCHIVELOG FROM SEQUENCE <start_seq> UNTIL SEQUENCE <end_seq>; 再执行 RECOVER。若无法补齐所需日志,只能执行不完全恢复(会丢失部分事务)。三、SQL*Plus 手工恢复(无 RMAN 或仅部分备份)
STARTUP MOUNT;;2) 使用操作系统拷贝将备份的数据文件还原至正确路径;3) RECOVER DATABASE;;4) ALTER DATABASE OPEN;。ALTER TABLESPACE <ts_name> OFFLINE IMMEDIATE;;2) OS 拷贝还原该表空间的数据文件;3) RECOVER TABLESPACE <ts_name>;;4) ALTER TABLESPACE <ts_name> ONLINE;。RECOVER DATAFILE <file#|'/path/file.dbf'>;;3) 若文件在 OPEN 状态被离线,恢复后 ALTER DATABASE DATAFILE <file#> ONLINE;。ALTER DATABASE CLEAR LOGFILE GROUP <n>;(RMAN 下该过程会自动完成)。四、逻辑导入恢复(Data Pump)
CREATE OR REPLACE DIRECTORY dumpdir AS '/oracledir';(确保 Oracle 用户对目录有读写权限);2) 使用 impdp 导入:impdp system/<pwd>@<tns> DIRECTORY=dumpdir DUMPFILE=xxx.dmp LOGFILE=imp.log [SCHEMAS=<schema>] [TABLESPACES=<ts>] [REMAP_SCHEMA=src:dst] [REMAP_TABLESPACE=src_ts:dst_ts];3) 导入完成后校验对象与数据一致性。五、常见报错与快速排查
sqlplus: command not found:检查 ORACLE_HOME、PATH,或使用绝对路径 /u01/app/oracle/product/19c/dbhome_1/bin/sqlplus;必要时在 ~/.bash_profile 中导出变量并 source。ORA-01034: ORACLE not available:实例未启动,先 STARTUP NOMOUNT → MOUNT → OPEN;若介质损坏,按上文 RMAN/手工流程恢复后再打开。ORA-00214: control file version ... inconsistent:控制文件版本不一致,保留最新控制文件并重新 STARTUP MOUNT 后恢复/打开。ORA-01157/01116: cannot identify/lock data file:数据文件缺失或不可访问,先还原对应数据文件再 RECOVER,随后 ALTER DATABASE OPEN。TNS:listener does not currently know of SID/service:检查 tnsnames.ora、listener.ora、实例 SID/SERVICE_NAME 与监听状态,必要时 lsnrctl status/start 并测试 tnsping <svc>。