centos中sqlplus恢复数据技巧
导读:CentOS 下使用 SQL*Plus 的数据恢复技巧 一、快速判断与定位 登录数据库:使用具有 SYSDBA 权限的账户进入 SQL*Plus:sqlplus / as sysdba。 判断故障类型: 数据文件丢失或损坏:启动失败或告...
CentOS 下使用 SQL*Plus 的数据恢复技巧
一、快速判断与定位
- 登录数据库:使用具有 SYSDBA 权限的账户进入 SQL*Plus:
sqlplus / as sysdba。 - 判断故障类型:
- 数据文件丢失或损坏:启动失败或告警中出现 ORA-01157/ORA-01110;用以下查询确认:
- 需要恢复的文件:
select file#, error from v$recover_file; - 数据文件检查点:
select file#, checkpoint_change# from v$datafile; - 文件头检查点:
select file#, checkpoint_change# from v$datafile_header;
- 需要恢复的文件:
- 控制文件异常:启动到 mount 阶段报 ORA-00205;可用
show parameter control_files;确认控制文件位置与冗余。 - 误删数据文件但进程未退出:Linux 中文件被删除但句柄仍在,可用
ps -ef|grep ora_dbw找到 DBW 进程,进入/proc/< PID> /fd查找标记 (deleted) 的文件并拷贝回原路径。 - 归档/联机日志缺失:非归档模式只能还原到上次全备,打开时可能需要
ALTER DATABASE CLEAR LOGFILE GROUP < n> ;清理损坏联机日志。
- 数据文件丢失或损坏:启动失败或告警中出现 ORA-01157/ORA-01110;用以下查询确认:
二、SQL*Plus 手工介质恢复常用场景
- 场景A 全部或多数数据文件损坏(数据库需到 MOUNT)
- 用 OS 拷贝把备份的数据文件还原到正确位置;
- SQL*Plus 执行:
RECOVER DATABASE; - 打开数据库:
ALTER DATABASE OPEN;
- 场景B 非关键表空间损坏(数据库 OPEN 下在线恢复)
- 立即离线表空间:
ALTER TABLESPACE < ts_name> OFFLINE IMMEDIATE; - OS 拷贝该表空间的数据文件回原位置;
- SQL*Plus 执行:
RECOVER TABLESPACE < ts_name> ; - 上线表空间:
ALTER TABLESPACE < ts_name> ONLINE;
- 立即离线表空间:
- 场景C 单个或少数数据文件损坏
- 关键文件(如 SYSTEM/UNDO):在 MOUNT 下恢复
ALTER DATABASE DATAFILE < file#> OFFLINE;- OS 拷贝还原该数据文件;
RECOVER DATAFILE < file#> ;ALTER DATABASE DATAFILE < file#> ONLINE;ALTER DATABASE OPEN;
- 非关键文件:在 OPEN 下恢复
ALTER DATABASE DATAFILE < file#> OFFLINE;- OS 拷贝还原;
RECOVER DATAFILE < file#> ;ALTER DATABASE DATAFILE < file#> ONLINE;
- 关键文件(如 SYSTEM/UNDO):在 MOUNT 下恢复
- 场景D 使用备份控制文件进行完全恢复(所有控制文件损坏)
STARTUP NOMOUNT;- 用 RMAN 还原控制文件:
RESTORE CONTROLFILE FROM '< backup_path> ';(RMAN 操作) ALTER DATABASE MOUNT;- 执行不完全恢复:
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;- 先输入 AUTO 自动应用归档日志;
- 再输入 CANCEL 停止;
- 以重置日志打开:
ALTER DATABASE OPEN RESETLOGS;
- 场景E 误删数据文件但句柄未释放(应急取回)
- 找到 DBW 进程 PID:
ps -ef|grep ora_dbw; - 进入句柄目录:
cd /proc/< PID> /fd; - 查找被删文件(含 (deleted) 标记),拷贝回原数据文件路径;
- SQL*Plus:
RECOVER DATAFILE < file#> ;然后ALTER DATABASE OPEN;。
- 找到 DBW 进程 PID:
三、逻辑误操作恢复技巧
- 适用:误 DELETE/TRUNCATE/DROP 表等逻辑错误。
- 技巧1 闪回查询(依赖 UNDO_RETENTION):
- 基于 SCN:
CREATE TABLE scott.t_recover AS SELECT * FROM scott.t_delete AS OF SCN < scn> ; - 基于时间:
CREATE TABLE scott.t_recover AS SELECT * FROM scott.t_delete AS OF TIMESTAMP TO_TIMESTAMP('2025-01-01 12:00:00','YYYY-MM-DD HH24:MI:SS'); - 校验后将数据插回业务表。
- 基于 SCN:
- 技巧2 利用 RMAN Duplicate 到辅助库按 SCN/SEQUENCE 抽取数据,再导回生产库(适合跨库或保留现场取证)。
四、实用清单与注意事项
- 操作前先备份当前环境与文件;恢复过程中避免覆盖唯一的最新备份。
- 归档模式下恢复需保证备份后的 归档日志 与 当前联机重做日志 连续可用;非归档模式只能还原到上次全备,且可能需要
CLEAR LOGFILE。 - 控制文件多路镜像可快速替换损坏副本;若全部损坏,需走 RMAN 还原控制文件 + UNTIL CANCEL + RESETLOGS 流程。
- 关键数据文件(如 SYSTEM/UNDO)恢复务必在 MOUNT 阶段完成;非关键文件可在 OPEN 阶段在线恢复。
- 误删数据文件应急取回依赖进程句柄,成功后仍需执行介质恢复并尽快打开数据库。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos中sqlplus恢复数据技巧
本文地址: https://pptw.com/jishu/785624.html
