阅读量:1
在 CentOS 上使用 SQL*Plus 恢复 Oracle 数据的实用步骤
一、准备与环境检查
- 以具备 SYSDBA 权限的账户登录数据库:sqlplus / as sysdba。
- 确认数据库是否处于 归档模式(归档丢失将限制恢复能力):
- 查看:archive log list;
- 开启(需在 MOUNT 状态):alter database archivelog;
- 预估恢复范围与所需日志:
- 查询需恢复的数据文件:select file#, error from v$recover_file;
- 查看数据文件与控制文件头部 SCN:select file#, checkpoint_change# from v$datafile; 与 select file#, checkpoint_change# from v$datafile_header;
- 查看恢复所需归档/重做日志:select * from v$recovery_log; 与 select * from v$archived_log。
二、场景一 介质故障的数据文件恢复(手工 SQL*Plus 方式)
- 原则:先用 OS 拷贝把受损数据文件还原到正确位置,再用 SQL*Plus 执行 recover 应用归档与联机重做日志,最后打开数据库。
- 典型流程:
- 关闭数据库(如能正常关闭):shutdown immediate;
- 用备份拷贝回受损数据文件到原目录(保持 FILE_ID 与路径一致);
- 启动到 MOUNT:startup mount;
- 执行恢复:
- 全库恢复:recover database;
- 按表空间恢复:recover tablespace
; - 按数据文件恢复:recover datafile
;
- 打开数据库:alter database open;
- 常见子场景要点:
- 非关键表空间可在 OPEN 下脱机恢复:
- alter tablespace
offline immediate; - 拷回文件后:recover tablespace
; - alter tablespace
online;
- alter tablespace
- 关键文件(如 SYSTEM、UNDO)需在 MOUNT 下恢复;非关键文件也可在 OPEN 下先 offline 再 recover 后 online。
- 非归档模式仅能做“全备的完整还原”,还原后可能缺失联机日志,需在 MOUNT 下执行:alter database clear logfile group
;(使用 RMAN 时该过程会自动完成)
- 非关键表空间可在 OPEN 下脱机恢复:
三、场景二 误删数据文件后的应急恢复(文件句柄法)
- 现象:数据文件被 rm 删除但数据库仍在运行,进程仍持有该文件句柄。
- 处理步骤:
- 查找 DBWn 进程 PID:ps -ef | grep ora_dbw;
- 进入进程句柄目录:cd /proc/
/fd; 查找状态为 deleted 的文件句柄; - 将句柄对应文件拷回原位置(保持原 FILE_ID 与路径):cp
/u01/app/oradata/ / ; - 回到数据库:sqlplus / as sysdba
- 立即关闭:shutdown immediate;
- 启动:startup(通常会进入需要恢复的提示状态);
- 介质恢复:recover datafile
; - 打开数据库:alter database open。
四、场景三 误删表或表数据(逻辑/闪回恢复)
- 闪回查询到指定 SCN 并插入回表:
- 获取删除前的 SCN(或时间转 SCN):
- 当前 SCN:select dbms_flashback.get_system_change_number from dual;
- 时间转 SCN:select timestamp_to_scn(to_timestamp(‘2025-12-15 10:00:00’,‘YYYY-MM-DD HH24:MI:SS’)) from dual;
- 校验时间点数据:select count(*) from
as of scn
; - 恢复到表:
- 整表回灌:insert into
select * from
as of scn
; - 或先建表再灌数:create table
_bak as select * from
as of scn
;
- 整表回灌:insert into
- 提交:commit;
- 获取删除前的 SCN(或时间转 SCN):
- 说明:若表结构也被改动,优先用 RMAN 或 Data Pump 逻辑备份恢复;闪回查询依赖 UNDO 保留时长。
五、场景四 使用 Data Pump 的逻辑备份恢复(impdp)
- 适用:有按用户/表导出的 .dmp 文件,做用户/表级恢复或迁移。
- 基本步骤:
- 以 SYSDBA 登录 sqlplus,创建 DIRECTORY 对象并赋权:
- create or replace directory bak_dir as ‘/opt/oracle/bak_dir’;
- grant read, write on directory bak_dir to
;
- 执行导入(示例):
- 全量导入用户:impdp
/ @ directory=bak_dir dumpfile= .dmp logfile= .log; - 指定表:impdp
/ @ directory=bak_dir dumpfile= .dmp tables= logfile= .log; - 重映射用户:remap_schema=
: ; - 已存在对象处理:table_exists_action=truncate|replace|skip。
- 全量导入用户:impdp
- 以 SYSDBA 登录 sqlplus,创建 DIRECTORY 对象并赋权:
以上就是关于“centos中sqlplus恢复数据步骤”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm