centos下sqlplus恢复方法
导读:CentOS 下使用 SQL*Plus 的恢复操作指南 一、准备与环境检查 以具备 SYSDBA 权限的用户登录:执行 sqlplus / as sysdba。 检查环境变量:echo $ORACLE_HOME、echo $PATH,必要...
CentOS 下使用 SQL*Plus 的恢复操作指南
一、准备与环境检查
- 以具备 SYSDBA 权限的用户登录:执行
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 物理恢复流程(推荐)
- 场景A 控制文件丢失或损坏
- 以
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;(若在线日志损坏/缺失)。
- 以
- 场景B 数据文件丢失或损坏
STARTUP MOUNT;;2) 还原受损数据文件:RESTORE DATAFILE < file#|'/path/file.dbf'> ;;3) 应用日志:RECOVER DATAFILE < file#|'/path/file.dbf'> ;;4)ALTER DATABASE OPEN;。
- 场景C 表空间级在线恢复(数据库保持 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;。
- 离线表空间:
- 场景D 不完全恢复(时间点/SCN/序列)
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)
STARTUP MOUNT;;2) 使用操作系统拷贝将备份的数据文件还原至正确路径;3)RECOVER DATABASE;;4)ALTER DATABASE OPEN;。
- 表空间级恢复(数据库保持 OPEN)
ALTER TABLESPACE < ts_name> OFFLINE IMMEDIATE;;2) OS 拷贝还原该表空间的数据文件;3)RECOVER TABLESPACE < ts_name> ;;4)ALTER TABLESPACE < ts_name> ONLINE;。
- 数据文件级恢复(单个/少数文件)
- 可在 MOUNT 或 OPEN 状态执行;2)
RECOVER DATAFILE < file#|'/path/file.dbf'> ;;3) 若文件在 OPEN 状态被离线,恢复后ALTER DATABASE DATAFILE < file#> ONLINE;。
- 可在 MOUNT 或 OPEN 状态执行;2)
- 非归档模式限制与处理
- 非归档模式下只能做“全备的完整还原”,还原后可能缺失联机重做日志;需在 MOUNT 状态对每个受损联机日志组执行:
ALTER DATABASE CLEAR LOGFILE GROUP < n> ;(RMAN 下该过程会自动完成)。
- 非归档模式下只能做“全备的完整还原”,还原后可能缺失联机重做日志;需在 MOUNT 状态对每个受损联机日志组执行:
四、逻辑导入恢复(Data Pump)
- 适用:仅有逻辑备份(如 expdp 导出的 .dmp 文件),或需要在新库/新实例中重建对象与数据。
- 基本步骤
- 在目标库创建目录对象:
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>。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos下sqlplus恢复方法
本文地址: https://pptw.com/jishu/760846.html
