重做undo表空间

场景:

alert日志,报了如下错误:

[oraprod@arpinfo bdump]$ tail -f alert_PROD.log
Errors in file /ora1159/prod/proddb/9.2.0/admin/PROD_arpinfo/udump/prod_ora_8729.trc:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [4097], [], [], [], [], [], [], []
Fri Sep 6 10:08:56 2019
Errors in file /ora1159/prod/proddb/9.2.0/admin/PROD_arpinfo/udump/prod_ora_8785.trc:
ORA-00600: internal error code, arguments: [4097], [], [], [], [], [], [], []
Fri Sep 6 10:08:59 2019
Errors in file /ora1159/prod/proddb/9.2.0/admin/PROD_arpinfo/udump/prod_ora_8785.trc:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [4097], [], [], [], [], [], [], []

原因

The following error is occurring in the alert.log right before the database crashes.

ORA-00600: internal error code, arguments: [4194], [#], [#], [], [], [], [], []

This error indicates that a mismatch has been detected between redo records and rollback (undo) records.

ARGUMENTS:

Arg [a] - Maximum Undo record number in Undo block

Arg [b] - Undo record number from Redo block

Since we are adding a new undo record to our undo block, we would expect that the new record number is equal to the maximum record number in the undo block plus one. Before Oracle can add a new undo record to the undo block it validates that this is correct. If this validation fails, then

an ORA-600 [4194] will be triggered.

其核心原因是:undo超过了它最大的量。重建undo表空间,此次unlimited。

1.查看undo的参数

SQL> show parameter undo;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 1800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS7

2.修改undo_retention参数

SQL> ALTER SYSTEM SET undo_retention=900 SCOPE=BOTH;
ALTER SYSTEM SET undo_retention=900 SCOPE=BOTH
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE specified at startup

3.以spfile的方式启动数据库

-------------------------------以spfile启动数据库
SQL> create spfile from pfile;
File created.
-------------------------------重启数据库
SQL> shutdown immediate;
SQL> startup -------------------------------修改undo_retention
SQL> ALTER SYSTEM SET undo_retention=900 SCOPE=BOTH;
System altered.

4.创建UNDOTBS8表空间

SQL> create undo tablespace UNDOTBS8 datafile '/ora1159/prod/proddata/UNDOTBS8.dbf' size 256M autoextend on next 128M maxsize unlimited;

Tablespace created.

5.查询历史undo是否还有事务(包含回滚事务)

SELECT a.tablespace_name,a.segment_name,b.ktuxesta,b.ktuxecfl,
b.ktuxeusn||'.'||b.ktuxeslt||'.'||b.ktuxesqn trans
FROM dba_rollback_segs a, x$ktuxe b
WHERE a.segment_id = b.ktuxeusn
AND a.tablespace_name = UPPER('&tsname')
AND b.ktuxesta <> 'INACTIVE';
Enter value for tsname: UNDOTBS7
old 5: AND a.tablespace_name = UPPER('&tsname')
new 5: AND a.tablespace_name = UPPER('UNDOTBS7') no rows selected

如果没有数据,可以进行undo表空间切换。

6.切换undo表空间

alter system set undo_tablespace='UNDOTBS8';

7.查询回滚段情况

原undo表空间的回滚段全部offline,可以删除相关表空间

SQL> select tablespace_name,segment_name,status from dba_rollback_segs;

TABLESPACE_NAME                SEGMENT_NAME                   STATUS
------------------------------ ------------------------------ ----------------
SYSTEM SYSTEM ONLINE
UNDOTBS7 _SYSSMU2$ OFFLINE
UNDOTBS7 _SYSSMU3$ OFFLINE
UNDOTBS7 _SYSSMU4$ OFFLINE
UNDOTBS7 _SYSSMU5$ OFFLINE
UNDOTBS7 _SYSSMU6$ OFFLINE
UNDOTBS7 _SYSSMU7$ OFFLINE
UNDOTBS7 _SYSSMU8$ OFFLINE
UNDOTBS7 _SYSSMU9$ OFFLINE
UNDOTBS7 _SYSSMU10$ OFFLINE
UNDOTBS7 _SYSSMU11$ OFFLINE TABLESPACE_NAME SEGMENT_NAME STATUS
------------------------------ ------------------------------ ----------------
UNDOTBS7 _SYSSMU12$ OFFLINE
UNDOTBS7 _SYSSMU13$ OFFLINE
UNDOTBS7 _SYSSMU14$ OFFLINE
UNDOTBS8 _SYSSMU15$ ONLINE
UNDOTBS8 _SYSSMU16$ ONLINE
UNDOTBS8 _SYSSMU17$ ONLINE
UNDOTBS8 _SYSSMU18$ ONLINE
UNDOTBS8 _SYSSMU19$ ONLINE
UNDOTBS8 _SYSSMU20$ ONLINE
UNDOTBS8 _SYSSMU21$ ONLINE
UNDOTBS8 _SYSSMU22$ ONLINE TABLESPACE_NAME SEGMENT_NAME STATUS
------------------------------ ------------------------------ ----------------
UNDOTBS8 _SYSSMU23$ ONLINE
UNDOTBS8 _SYSSMU24$ ONLINE 24 rows selected.

8.下线原undo表空间

alter tablespace UNDOTBS7 offline;

9.删除原undo表空间

drop tablespace UNDOTBS7 including contents and datafiles;

10.修改undo retention

SQL> ALTER SYSTEM SET undo_retention=1800 SCOPE=BOTH;

参考文献

Step by step to resolve ORA-600 4194 4193 4197 on database crash (文档 ID 1428786.1)

【Oracle】重做undo表空间的更多相关文章

  1. [Oracle]理解undo表空间

    一.回退段介绍 在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中.一个事物只能将它的回退信息保存到一个回退段中,而多个并行事物可以使用同一个回退段. ...

  2. 记一次ORACLE的UNDO表空间爆满分析过程

    这篇文章是记录一次ORACLE数据库UNDO表空间爆满的分析过程,主要整理.梳理了同事分析的思路.具体过程如下所示: 早上收到一数据库服务器的UNDO表空间的告警邮件,最早一封是7:55发出的(监控作 ...

  3. 如何让Oracle释放undo表空间

    如何让Oracle释放undo表空间   最佳答案   在日常的数据库维护和数据库编程中经常会遇到犹豫对大数据量做DML操作后是得ORACLE的undo表空间扩展到十几个G或者几十个G 但是这些表空间 ...

  4. oracle的undo表空间

    undo表空间是Oracle特有的概念.undo表空间中会自动分配undo段,这些undo段用来保存事务中的DML语句的undo信息,也就是来保存数据在被修改之前的值.在rollback,实例恢复(回 ...

  5. Oracle中undo表空间的切换

    查看操作系统: SQL>  !cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 7.4 (Maipo)查看数据库版本: ...

  6. oracle重建undo表空间

    create undo tablespace UNDOTBS2 datafile 'D:\oracle\product\10.2.0\oradata\ttonline\UNDOTBS02.DBF' s ...

  7. 监控和管理Oracle UNDO表空间的使用

    对Oracle数据库UNDO表空间的监控和管理是我们日常最重要的工作之一,UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定):UNDO表空间是用于存储DM ...

  8. Oracle undo 表空间管理 (摘DAVID)

    Oracle 的Undo有两种方式: 一是使用undo 表空间,二是使用回滚段. 我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要 ...

  9. (转载)undo表空间

    对Oracle数据库UNDO表空间的监控和管理是我们日常最重要的工作之一,UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定):UNDO表空间是用于存储DM ...

随机推荐

  1. python验证码处理(1)

    目录 一.普通图形验证码   这篇博客及之后的系列,我会向大家介绍各种验证码的识别.包括普通图形验证码,极验滑动验证码,点触验证码,微博宫格验证码. 一.普通图形验证码   之前的博客已向大家介绍了简 ...

  2. deepin添加设置快捷键

    deepin的设置侧边栏没有快捷键需要手动设置,第一步就是要知道设置的命令是什么. 按下start,把其中的"控制中心"发送到桌面,以文本方式打开之,其中的exec字段就是打开设置 ...

  3. Vue Stomp+SocketJS 数据报错[Object object]

    开头一句mmp tmd换位置了也没个提示!!!! 坑死爹了 <template> <div> <input type="text" v-model=& ...

  4. 使用Javamail实现邮件发送功能

    目录 相关的包 编写工具类 环境说明 @(使用Javamail实现邮件发送功能) 相关的包 activation.jar javax.mail.jar mail包建议使用高版本写的包,否则可能会发空白 ...

  5. Android 自定义水平进度条的圆角进度

    有时项目中需要实现水平圆角进度,如下两种,其实很简单     下面开始看代码,先从主界面布局开始看起: <?xml version="1.0" encoding=" ...

  6. 【我的第一个现实漏洞分析】 CVE-2017-17215 华为智能路由器HG532 漏洞分析笔记

    0x00 基本信息 2017.11.27 Check Point团队报告华为 HG532 产品的远程命令执行漏洞(CVE-2017-17215),Mirai的升级版变种中已经使用该漏洞. 华为HG53 ...

  7. 洛谷 U86564 排队形

    洛谷 U86564 排队形 题目传送门 题目背景 \(JDFZ2019\)秋季运动会开始辣!为了使强大的高一 · \(6\)班有一个更好的精神面貌,班主任\(T\)老师和体委\(LY\),\(LYB\ ...

  8. clickhouse 离线/在线 安装和java通过jdbc链接

    检查 需要确保是否x86_64处理器构架.Linux并且支持SSE 4.2指令集 grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 ...

  9. 学习-JVM命令

    jstat jstat (JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据. 格式:js ...

  10. SQL Server 迁移数据库 (二)分离和附加

    分离和附加其实比导入和导出,步骤要少一些,但是数据量大的话,跨服务器拷贝数据文件可能要慢一些 1. 分离数据库 这里最好选择断开链接,断开之前要确保你记得数据库的路径,一般默认都是C:\Program ...