首页主机资讯centos中sqlplus恢复数据步骤

centos中sqlplus恢复数据步骤

时间2025-12-15 22:59:04发布访客分类主机资讯浏览854
导读:在 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 应用归档与联机重做日志,最后打开数据库。
  • 典型流程:
    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。

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

  • 闪回查询到指定 SCN 并插入回表:
    1. 获取删除前的 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;
    2. 校验时间点数据:select count(*) from as of scn ;
    3. 恢复到表:
      • 整表回灌:insert into
    4. select * from
      as of scn ;
    5. 或先建表再灌数:create table
    6. _bak as select * from
      as of scn ;
    7. 提交:commit;
    8. 说明:若表结构也被改动,优先用 RMANData Pump 逻辑备份恢复;闪回查询依赖 UNDO 保留时长。
    9. 五、场景四 使用 Data Pump 的逻辑备份恢复(impdp)

      • 适用:有按用户/表导出的 .dmp 文件,做用户/表级恢复或迁移。
      • 基本步骤:
        1. SYSDBA 登录 sqlplus,创建 DIRECTORY 对象并赋权:
          • create or replace directory bak_dir as ‘/opt/oracle/bak_dir’;
          • grant read, write on directory bak_dir to ;
        2. 执行导入(示例):
          • 全量导入用户: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。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: centos中sqlplus恢复数据步骤
本文地址: https://pptw.com/jishu/772172.html
centos里sqlplus查询语句优化技巧 centos中sqlplus环境配置步骤

游客 回复需填写必要信息