centos中sqlplus恢复数据步骤
导读:在 CentOS 上使用 SQL*Plus 恢复 Oracle 数据的实用步骤 一、准备与环境检查 以具备 SYSDBA 权限的账户登录数据库:sqlplus / as sysdba。 确认数据库是否处于 归档模式(归档丢失将限制恢复能力...
在 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 < ts_name> ;
- 按数据文件恢复:recover datafile < file# | ‘/path/file.dbf’> ;
- 打开数据库:alter database open;
- 常见子场景要点:
- 非关键表空间可在 OPEN 下脱机恢复:
- alter tablespace offline immediate;
- 拷回文件后:recover tablespace ;
- alter tablespace online;
- 关键文件(如 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 < fd_num> /u01/app/oradata//< file.dbf> ;
- 回到数据库:sqlplus / as sysdba
- 立即关闭:shutdown immediate;
- 启动:startup(通常会进入需要恢复的提示状态);
- 介质恢复:recover datafile < file#> ;
- 打开数据库: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 ;
- 提交:commit;
- 说明:若表结构也被改动,优先用 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=< schema.table> logfile=.log;
- 重映射用户:remap_schema=:;
- 已存在对象处理:table_exists_action=truncate|replace|skip。
- 以 SYSDBA 登录 sqlplus,创建 DIRECTORY 对象并赋权:
- 或先建表再灌数:create table
- 恢复到表:
- 获取删除前的 SCN(或时间转 SCN):
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos中sqlplus恢复数据步骤
本文地址: https://pptw.com/jishu/772172.html
