温馨提示×

centos下sqlplus恢复方法

小樊
34
2025-12-01 17:48:37
栏目: 云计算

CentOS 下使用 SQL*Plus 的恢复操作指南

一、准备与环境检查

  • 以具备 SYSDBA 权限的用户登录:执行 sqlplus / as sysdba
  • 检查环境变量:echo $ORACLE_HOMEecho $PATH,必要时在 ~/.bash_profile 中设置 ORACLE_HOMEORACLE_SIDPATH=$ORACLE_HOME/bin:$PATHsource 使其生效。
  • 确认实例状态:SELECT status FROM v$instance; 正常应为 OPEN,异常时可能为 MOUNTEDSTARTED
  • 查看告警与跟踪日志定位最近故障:SHOW PARAMETER background_dump_dest;SHOW PARAMETER user_dump_dest;,日志通常位于 $ORACLE_BASE/diag/rdbms/<sid>/trace/。这些检查有助于明确恢复路径(介质恢复、不完全恢复或仅逻辑导入)。

二、RMAN 物理恢复流程(推荐)

  • 场景A 控制文件丢失或损坏
    1. rman target / 连接;2) 启动到 NOMOUNTSTARTUP NOMOUNT;;3) 还原控制文件:RESTORE CONTROLFILE FROM '/path/controlfile.bkp';;4) 启动到 MOUNTALTER DATABASE MOUNT;;5) 恢复数据库:RECOVER DATABASE;;6) 以重置日志打开:ALTER DATABASE OPEN RESETLOGS;(若在线日志损坏/缺失)。
  • 场景B 数据文件丢失或损坏
    1. STARTUP MOUNT;;2) 还原受损数据文件:RESTORE DATAFILE <file#|'/path/file.dbf'>;;3) 应用日志:RECOVER DATAFILE <file#|'/path/file.dbf'>;;4) ALTER DATABASE OPEN;
  • 场景C 表空间级在线恢复(数据库保持 OPEN)
    1. 离线表空间:ALTER TABLESPACE <ts_name> OFFLINE IMMEDIATE;(或 OFFLINE NORMAL 若允许一致性);2) 还原该表空间的数据文件:RESTORE TABLESPACE <ts_name>;;3) 恢复:RECOVER TABLESPACE <ts_name>;;4) 上线:ALTER TABLESPACE <ts_name> ONLINE;
  • 场景D 不完全恢复(时间点/SCN/序列)
    1. 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;
  • 场景E 归档日志缺失
    • 若备份策略允许,可先从备份恢复归档:RMAN> RESTORE ARCHIVELOG FROM SEQUENCE <start_seq> UNTIL SEQUENCE <end_seq>; 再执行 RECOVER。若无法补齐所需日志,只能执行不完全恢复(会丢失部分事务)。

三、SQL*Plus 手工恢复(无 RMAN 或仅部分备份)

  • 数据库级恢复(多数数据文件丢失,数据库无法 OPEN)
    1. STARTUP MOUNT;;2) 使用操作系统拷贝将备份的数据文件还原至正确路径;3) RECOVER DATABASE;;4) ALTER DATABASE OPEN;
  • 表空间级恢复(数据库保持 OPEN)
    1. ALTER TABLESPACE <ts_name> OFFLINE IMMEDIATE;;2) OS 拷贝还原该表空间的数据文件;3) RECOVER TABLESPACE <ts_name>;;4) ALTER TABLESPACE <ts_name> ONLINE;
  • 数据文件级恢复(单个/少数文件)
    1. 可在 MOUNTOPEN 状态执行;2) RECOVER DATAFILE <file#|'/path/file.dbf'>;;3) 若文件在 OPEN 状态被离线,恢复后 ALTER DATABASE DATAFILE <file#> ONLINE;
  • 非归档模式限制与处理
    • 非归档模式下只能做“全备的完整还原”,还原后可能缺失联机重做日志;需在 MOUNT 状态对每个受损联机日志组执行:ALTER DATABASE CLEAR LOGFILE GROUP <n>;(RMAN 下该过程会自动完成)。

四、逻辑导入恢复(Data Pump)

  • 适用:仅有逻辑备份(如 expdp 导出的 .dmp 文件),或需要在新库/新实例中重建对象与数据。
  • 基本步骤
    1. 在目标库创建目录对象: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_HOMEPATH,或使用绝对路径 /u01/app/oracle/product/19c/dbhome_1/bin/sqlplus;必要时在 ~/.bash_profile 中导出变量并 source
  • ORA-01034: ORACLE not available:实例未启动,先 STARTUP NOMOUNTMOUNTOPEN;若介质损坏,按上文 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.oralistener.ora、实例 SID/SERVICE_NAME 与监听状态,必要时 lsnrctl status/start 并测试 tnsping <svc>

0