undo表空间recover状态的(无备份)故障处理

2023-10-27

故障概述

今天项目上其他公司的运维人员找我说某数据库好像归档满了,并且他直接rman删了3天前的所有归档,然后发现二节点是宕机的,启动二节点数据库后发现2节点undo数据文件需要recover,这个数据库没有备份。(万幸的是,需要recover的只是2节点undo数据文件)。
切记:!!!!归档日志没有备份的情况下,在删除归档日志之前一定要确认是否存在需要使用归档日志recover的数据文件!!!!!否则只有丢数据了!!!

进入正题:
故障原因:
UNDOTBS2表空间上还有active状态的事务(未提交),二节点由于归档目录满了导致数据库宕机,然后Oracle会将undo表空间下的记录着active未提交的段都标志为NEEDS RECOVERY。
处理思路:
1、有备份的情况下,直接备份恢复就可以了。
2、如果没有备份,可以用新建的UNDO替代损坏的UNDO,那么损坏UNDO上的未提交事务也将不得不丢弃。当然NEEDS RECOVERY的回滚段需要先进行处理。

故障处理

检查需要recover的数据文件:

SQL> select file#,status,name from v$datafile where status ='RECOVER';

     FILE# STATUS
---------- ---------------------
NAME
---------------------------------------------------

         5 RECOVER
+XXXX/XXXX/datafile/undotbs2.267.795022137



1  rows selected

先创建一个新的undo表空间

SQL> create undo tablespace UNDOTBS02 datafile size 10g autoextend on next 2g;

Tablespace created.

查看当前节点(2节点)的表空间,还是需要recover的undotbs2。

SQL> show parameter undo

NAME                TYPE         VALUE
------------------- ------------ --------------------
undo_management      string      AUTO
undo_retention       integer     900
undo_tablespace      string      UNDOTBS2

用新创建的undotbs02替换之前的undotbs2

SQL> alter system set undo_tablespace='UNDOTBS02' scope=both;

System altered.

在删除之前的undo表空间的时候报错ora-01548

SQL> alter database datafile 5 offline;

Database altered.

SQL> drop tablespace UNDOTBS2 including contents and datafiles;
drop tablespace UNDOTBS2 including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU11_3993685818$' found, terminate dropping tablespace

这个ora-01538的报错说是回滚段中还有活动的事务。
检查回滚段状态:

SQL> select segment_name,status,tablespace_name from dba_rollback_segs where status not in ('ONLINE','OFFLINE') and tablespace_name='UNDOTBS2';

SEGMENT_NAME                   STATUS               TABLESPACE_NAME
------------------------------ ------------------ -----------------------------
_SYSSMU11_3993685818$          NEEDS RECOVERY       UNDOTBS2
_SYSSMU12_3786484004$          NEEDS RECOVERY       UNDOTBS2
_SYSSMU13_4206247907$          NEEDS RECOVERY       UNDOTBS2
_SYSSMU14_3550840220$          NEEDS RECOVERY       UNDOTBS2
_SYSSMU15_1667460038$          NEEDS RECOVERY       UNDOTBS2
_SYSSMU16_102810502$           NEEDS RECOVERY       UNDOTBS2
_SYSSMU17_4197495598$          NEEDS RECOVERY       UNDOTBS2
_SYSSMU18_2803337290$          NEEDS RECOVERY       UNDOTBS2
_SYSSMU19_2100581483$          NEEDS RECOVERY       UNDOTBS2
_SYSSMU20_3702784048$          NEEDS RECOVERY       UNDOTBS2

10 rows selected.

试图将这些回滚段置于offline,然后drop掉。

SQL> alter rollback segment  "_SYSSMU11_3993685818$"  offline; 

Rollback segment altered.

SQL> alter rollback segment  "_SYSSMU12_3786484004$"  offline; 

Rollback segment altered.

SQL> alter rollback segment  "_SYSSMU13_4206247907$"  offline; 

Rollback segment altered.

SQL> alter rollback segment  "_SYSSMU14_3550840220$"  offline; 

Rollback segment altered.

SQL> alter rollback segment  "_SYSSMU15_1667460038$"  offline; 

Rollback segment altered.

SQL> alter rollback segment  "_SYSSMU16_102810502$"  offline;  

Rollback segment altered.

SQL> alter rollback segment  "_SYSSMU17_4197495598$"  offline; 

Rollback segment altered.

SQL> alter rollback segment  "_SYSSMU18_2803337290$"  offline;

Rollback segment altered.

SQL> alter rollback segment  "_SYSSMU19_2100581483$"  offline; 

Rollback segment altered.

SQL> alter rollback segment  "_SYSSMU20_3702784048$"  offline;

Rollback segment altered.

drop回滚段时报错ORA-30025:

SQL> drop rollback segment "_SYSSMU11_3993685818$"; 
drop rollback segment "_SYSSMU11_3993685818$"
*
ERROR at line 1:
ORA-30025: DROP segment '_SYSSMU11_3993685818$' (in undo tablespace) not allowed

将_smu_debug_mode设置成4。这里4代表可以在UNDO自动管理(SMU)下能够进行一些手工的回滚段管理模式下的操作(RBU)

SQL>  alter system set"_smu_debug_mode" = 4;

System altered.

使用一下两个隐含参数_OFFLINE_ROLLBACK_SEGMENTS和_CORRUPTED_ROLLBACK_SEGMENTS,将NEEDS RECOVERY的回滚段添加至这两个隐含参数列表并编辑添加至pfile中:

vi init.ora
...
_OFFLINE_ROLLBACK_SEGMENTS=(_SYSSMU11_3993685818$,_SYSSMU12_3786484004$,_SYSSMU13_4206247907$,_SYSSMU14_3550840220$,_SYSSMU15_1667460038$,_SYSSMU16_102810502$,_SYSSMU17_4197495598$,_SYSSMU18_2803337290$,_SYSSMU19_2100581483$,_SYSSMU20_3702784048$)
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU11_3993685818$,_SYSSMU12_3786484004$,_SYSSMU13_4206247907$,_SYSSMU14_3550840220$,_SYSSMU15_1667460038$,_SYSSMU16_102810502$,_SYSSMU17_4197495598$,_SYSSMU18_2803337290$,_SYSSMU19_2100581483$,_SYSSMU20_3702784048$)
...

关闭数据库后以init.ora文件启动数据库。

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount pfile='/home/oracle/init.ora';
ORACLE instance started.

Total System Global Area 2.6991E+10 bytes
Fixed Size                  2213976 bytes
Variable Size            2.5770E+10 bytes
Database Buffers         1073741824 bytes
Redo Buffers              145174528 bytes
Database mounted.
SQL> alter database open;

Database altered.

再次drop状态为NEEDS RECOVERY的回滚段。

SQL> drop rollback segment "_SYSSMU11_3993685818$"; 

Rollback segment dropped.

SQL> drop rollback segment "_SYSSMU12_3786484004$";

Rollback segment dropped.

SQL> drop rollback segment  "_SYSSMU13_4206247907$";

Rollback segment dropped.

SQL> drop rollback segment "_SYSSMU14_3550840220$";

Rollback segment dropped.

SQL> drop rollback segment  "_SYSSMU16_102810502$";

Rollback segment dropped.

SQL> drop rollback segment  "_SYSSMU15_1667460038$";

Rollback segment dropped.

SQL> drop rollback segment "_SYSSMU17_4197495598$";

Rollback segment dropped.

SQL> drop rollback segment "_SYSSMU18_2803337290$";

Rollback segment dropped.

SQL> drop rollback segment  "_SYSSMU19_2100581483$";

Rollback segment dropped.

SQL> drop rollback segment "_SYSSMU20_3702784048$";

Rollback segment dropped.

成功drop不再报错,然后删除之前的undo表空间和数据文件:

SQL> alter system set undo_tablespace='UNDOTBS02' scope=both;

System altered.

SQL> drop tablespace UNDOTBS2 including contents and datafiles;

Tablespace dropped.

将新建的undotbs02表空间成功替换之前的undotbs2,并将undotbs2表空间删除。

SQL> select file#,status,name from v$datafile status='ONLINE';

     FILE# STATUS                NAME
---------- --------------------- --------------------------------------------------------------------------------
         1 SYSTEM                +DHOMSAPP/dhomsapp/datafile/system.256.795021933

...
        10 ONLINE                +DHOMSAPP/dhomsapp/datafile/undotbs02.289.145649813

10 rows selected.

至此,2节点undo表空间成功恢复至online,数据库恢复正常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

undo表空间recover状态的(无备份)故障处理 的相关文章

随机推荐

  • 虚拟机下ubuntu上网

    在配置的时候 虚拟机有三种方法上网 一个是NAT 一个是host only 一个是bridge 我主要是试过两种 简单的介绍一下 我是xp下装的虚拟机 虚拟机里面是redhat就简单的用redhat代替虚拟机 xp代替真机 NAT 方法 它
  • (Ext基础篇) Ext核心组件

    Ext Componet 概述 所有Ext组件的基类 所有Componet的子类都自动地参与标准的Ext组件生命周期 创建 渲染 销毁 这些操作 由Container 类提供 在创建容器时 组件可以通过items 配置选项被添加到容器中 或
  • 计算机屏幕出现蓝色条,电脑显示器出现一道蓝条怎么回事

    公告 为响应国家净网行动 部分内容已经删除 感谢读者理解 话题 电脑显示器出现一道蓝条怎么回事 回答 瑕疵屏 有坏点坏线 这就是次品了 要是使用一段时间后出现的 就是液晶面板排线出焊接问题 硬件故障 很难修理 除非有专业设备 参考回答 电脑
  • 同时连接内外网教程

    一台电脑可以同时上内外网 省去了办公的许多烦恼 每台电脑都有自己的路由表 可以通过开始 运行 输cmd 输入route print 就可查询到自身的路由信息 计算机上的路由表可以手动进行修改 添加或删除 这样就可以通过一系列的设置来满足同时
  • 机器学习算法基础概念学习总结

    1 基础概念 1 10折交叉验证 英文名是10 fold cross validation 用来测试算法的准确性 是常用的测试方法 将数据集分成10份 轮流将其中的9份作为训练数据 1分作为测试数据 进行试验 每次试验都会得出相应的正确率
  • ST-LINK烧录stm32程序步骤

    此篇文章记录下STM32使用ST LINK烧录程序的步骤 好兄弟 给个关注呗 材料 ST LINK驱动安装 点我下载st link驱动 提取码 4aw1 安装包有详细教程 stm32f103c8t6 ST LINK 杜邦线 keil5配置
  • vscode搭建esp32(避坑小窍门)

    这里写自定义目录标题 1 编译过程出现 终端将被任务重用 按任意键关闭 错误 可能的解决办法 1 在 终端 配置任务 PlatformIO Test 以Test工程名为例 打开tasks json文件 2 添加 presentation e
  • 02-离散仿真引擎基础

    Homework02 简答题 1 解释游戏对象 GameObjects 和资源 Assets 的区别与联系 区别 游戏对象是具有一定属性与功能的类的实体化 对应为Unity中具有对应职能与属性的组件 例如游戏中常见的玩家 怪物等 资源是预先
  • react 引入antd 样式_引用Ant.Design到React中

    参考地址 http ant design index cn ant design 首先说说ant design是干啥的 ant design是基于react开发的一个解放ui和前端的工具 它提供了一致的设计方便我们快速开发和减少不必要的设计
  • CocosCreator自动化绑定jsb

    与之前的cocos2dx js自定义js binding不同 这次用的是Cocos2dx里的自动绑定技术 更加的简单 高效 规整以及方便得多 而且之前的手动写文件不能适应更新后的CocosCreator版本的情况 环境配置 JDK NDK
  • 【H∞控制】H无穷控制器的matlab仿真

    1 软件版本 matlab2017b 2 系统概述 PID控制器 PID控制器 比例 积分 微分控制器 由比例单元 P 积分单元 I 和微分单元 D 组成 通过Kp Ki和Kd三个参数的设定 PID控制器主要适用于基本线性和动态特性不随时间
  • Java ffmpeg视频抽帧/转换遇到问题及解决

    Java 视频转换可能会遇到的问题及解决 很多报错都是没有引入 正确的依赖或者版本的问题 javacv版本及ffmpeg版本 1 正确的依赖
  • 狂神说Java--Docker(通俗易懂)

    目录 Docker的入门 Docker的概述 Docker的历史 Docker的用途 Docker的安装 Docker的基本组成 Docker安装 安装 阿里云镜像加速 登录阿里云找到容器服务 找到镜像加速器 配置使用 回顾HelloWor
  • html实现上下三角,css3实现三角形(上下左右)【转载】

    1 向上 kailong width 0 height 0 border right 50pxsolid transparent border left 50pxsolid transparent border bottom 50pxsol
  • Python实现进程管理

    Python实现进程管理 进程管理是操作系统中的重要组成部分 它负责创建 调度和终止进程 以及提供进程间通信和同步的机制 在Python中 我们可以使用多个库和模块来实现进程管理的功能 本文将介绍Python中几个常用的进程管理模块 并提供
  • pytorch打印模型参数

    目录 torchsummary打印 打印模型参数 两种方法结果好像是一样的 打印模型通道均值 获取按通道均值的排序top3索引
  • Sql Server 行转列

    SQL Server 行转列 聚合函数的选择 http www cnblogs com wlsandwho p 4423956 html 摘自网络 PIVOT用于将列值旋转为列名 即行转列 在SQL Server 2000可以用聚合函数配合
  • Token 刷新并发处理解决方案

    对 Token 进行刷新续期 我们要解决并发请求导致重复刷新 Token 的问题 这也是设计刷新 Token 的难点 这里我会分别介绍前端和后端各自的处理方案 后端方案 利用 Redis 缓存 当同时发起多个请求时 第一个接口刷新了 Tok
  • 【毕业设计】基于Spark的海量新闻文本聚类(新闻分类)

    文章目录 0 前言 1 项目介绍 2 实现流程 3 开发环境 4 java目录功能介绍 5 scala目录功能介绍 5 1 求TF IDF 5 2 调用K means模型 5 3 评价方式 6 聚类结果 7 最后 0 前言 Hi 大家好 这
  • undo表空间recover状态的(无备份)故障处理

    故障概述 今天项目上其他公司的运维人员找我说某数据库好像归档满了 并且他直接rman删了3天前的所有归档 然后发现二节点是宕机的 启动二节点数据库后发现2节点undo数据文件需要recover 这个数据库没有备份 万幸的是 需要recove