温馨提示×

centos中sqlplus恢复数据步骤

小樊
35
2025-12-15 13:04:53
栏目: 云计算

在 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 应用归档与联机重做日志,最后打开数据库。
  • 典型流程:
    1. 关闭数据库(如能正常关闭):shutdown immediate;
    2. 用备份拷贝回受损数据文件到原目录(保持 FILE_ID 与路径一致);
    3. 启动到 MOUNT:startup mount;
    4. 执行恢复:
      • 全库恢复:recover database;
      • 按表空间恢复:recover tablespace <ts_name>;
      • 按数据文件恢复:recover datafile <file# | ‘/path/file.dbf’>;
    5. 打开数据库: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 时该过程会自动完成)

三、场景二 误删数据文件后的应急恢复(文件句柄法)

  • 现象:数据文件被 rm 删除但数据库仍在运行,进程仍持有该文件句柄。
  • 处理步骤:
    1. 查找 DBWn 进程 PID:ps -ef | grep ora_dbw;
    2. 进入进程句柄目录:cd /proc//fd; 查找状态为 deleted 的文件句柄;
    3. 将句柄对应文件拷回原位置(保持原 FILE_ID 与路径):cp <fd_num> /u01/app/oradata//<file.dbf>;
    4. 回到数据库:sqlplus / as sysdba
      • 立即关闭:shutdown immediate;
      • 启动:startup(通常会进入需要恢复的提示状态);
      • 介质恢复:recover datafile <file#>;
      • 打开数据库:alter database open。

四、场景三 误删表或表数据(逻辑/闪回恢复)