1、查看数据库当前实例使用的是哪个UNDO表空间:

show parameter undo_tablespace

2、查看UNDO表空间对应的数据文件和大小

set lines 200 pages 200
col file_name for a60
col tablespace_name for a20;
select tablespace_name,file_name,bytes/1024/1024 MB from dba_data_files
where tablespace_name like '%UNDOTBS%';

3、查看undo表空间属性:

show parameter undo

select retention,tablespace_name from dba_tablespaces where tablespace_name like '%UNDOTBS%';

解释:

undo段中区的状态:
free:     区未分配给任何一个段
active:  已经被分配给段,并且这个段被事务所使用,且事务没有提交,不能覆盖。 (区被未提交的事务使用)       
unexpired:事务已经提交,但是区还在段中,还没有被覆盖且未达到undo_retention设定的时间。
    (nogurantee的情况下,原则上oracle尽量的不覆盖unexpired的区,但是如果undo空间压力及较大,oracle也会去覆盖。如果是guarantee,oracle强制保留retention时间内的内容,这时候free和expired空间不足的话,新事物将失败。)
expired:oracle希望已经提交的事务对应的undo表空间中的undo段中的区再保留一段时间。保留的时间就是undo_retention。
     unexpired的区存在时间超过undo_retention设定的时间,状态就会变为expired。过期后的区就可以被覆盖了。原则上expired的区一般不会释放成free
PS:生产中没有人会将UNDOTBS的retention设置成GUARANTEE这是很危险的。

4、查看undo表空间当前的使用情况:

set lines 200 pages 200
col tablespace_name for a30
select tablespace_name,status,sum(bytes)/1024/1024 MB from dba_undo_extents
group by tablespace_name,status;

与一般的用户表空间不同,undo表空间不能通过dba_free_spaces来确定实际的使用情况,undo表空间除了active状态的extent不能被覆盖外。其他状态的extent都是可以空间复用的。

如果active的extent总大小很大,说明系统中存在大事务。如果undo资源耗尽(ACTIVE接近undotbs的总大小),可能导致事务失败。

5、查看什么事务占用了过多的undo:

select addr,used_ublk,used_urec,inst_id from gv$transaction order by 2 desc;

ADDR: 事务的内存你地址。

USED_UBLK:事务使用的undo block数量。

USED_UREC:事务使用的undo record (undo前镜像的条数,例如:delete删除的记录数)

6、查看占用undo的事务执行了什么sql:

set lines 200 pages 200
col program for a30
col machine for a30
select sql_id,last_call_et,program,machine from gv$session where taddr='0000000089A9E2F0';

LAST_CALL_ET: 上一次调用到现在为止过了多长时间,单位为秒,途中显示过了304s (既可以理解为sql已经运行了304s)。

set long 99999
set lines 100
set pages 1000
select sql_fulltext from v$sql where SQL_ID='8gvp49tr474f2';

7、找到了sql,下面就可以联系应用做处理了:

哪台机器,通过什么程序,发起了什么sql,占用了多少undo,是否可以杀掉,sql是否可以改写,是否可以分批提交。。。等

关于UNDO的其他知识:

1、undo的读取方式是单块读的,所以事务的回滚比较慢

2、显示undo使用情况的统计信息:

SELECT
TO_CHAR(BEGIN_TIME,'HH24:MI:SS') BEGIN_TIME,
TO_CHAR(END_TIME,'HH24:MI:SS') END_TIME,
UNDOBLKS
FROM V$UNDOSTAT;

3、system表空间中有一个系统回滚段,只有在对数据字典进行操作时(eg:修改表结构)才用到系统回滚段,另外一种情况,如果undo表空间出现问题,oracle也可能使用system段。

一个事务开始的时候,在shared pool中分一个IMU(in memory undo) buffer,将所有的回滚信息写到IMU buffer中
一个事务开始后,需要回滚块的时候不需要从从磁盘读undo block,直接从shared pool 中分IMU BUFFER,之后回滚信息写到imubuffer中,
回滚信息写入的时候也要产生redo,但是imubuffer减少了物理io
针对IMUbuffer 在shared中会生成专门供其使用的redo日志区,叫做private redo

4、undo segment的信息:

SELECT
a.name, b.xacts, b.writes, b.extents
FROM
v$rollname a, v$rollstat b
WHERE a.usn=b.usn;

USN          Rollback segment number
XACTS         Number of active transactions
EXTENTS     Number of extents in the rollback segment
WRITES      Number of bytes written to the rollback segment 
PS:这里的undo segment可能被多个事务使用,在全部事务释放undo段之前,undo segment所占用的空间是不会释放的。
例如:  1/2/3事务使用了同一个undo segment 各占10G,事务2/3已经回滚或提交,事务1还是active。那么在事务1提交或回滚之前,整个undo segment还是active的,占用30G空间,而不是先释放20G。
 
 

undo空间满的处理方法(含undo的学习与相关解释)的更多相关文章

  1. ORA-03113 通信通道的文件结尾(ORA-19804 ORA-16038-归档空间满的处理方法)

    1.数据库启动报错SQL> startupORACLE 例程已经启动. Total System Global Area 1887350784 bytesFixed Size 2176848 b ...

  2. SYSTEM表空间满,解决方法

    SYSTEM表空间是Oracle创建数据库时候自动创建的,每个Oracle数据库都会有SYSTEM表空间,而且SYSTEM表空间总是要保持在联机模式下,因为其包含了数据库运行所要求的基本信息,如:数据 ...

  3. ORACLE的还原表空间UNDO写满磁盘空间,解决该问题的具体步骤

    产生问题的原因主要以下两点:1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况:2. 有较大事务没有收缩或者没有提交所导制:说明:本问题在ORACLE系统管理中属于比较正 ...

  4. Master Note: Undo 空间使用率高 (Doc ID 1578639.1)

    Master Note: High Undo Space Usage (Doc ID 1578639.1) APPLIES TO: Oracle Database Cloud Schema Servi ...

  5. linux磁盘空间用满的处理方法

    linux下空间满可能有两种情况 可以通过命令 df -h  查看磁盘空间占用,实际上是查看磁盘块占用的文件(block) df -i  查看索引节点的占用(Inodes) 磁盘块和索引节点其中之一满 ...

  6. 14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间

    14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间 在MySQL 5.6.3,你可以存 ...

  7. 监控undo空间和临时段的使用情况

    --1.监控undo空间情况 ),) free_space from dba_free_space where tablespace_name='UNDOTBS1' group by tablespa ...

  8. Oracle system表空间满的暂定解决方法

    Oracle system表空间满的暂定解决方法 数据库用的是Oracle Express 10.2版本的.利用Oracle Text做全文检索应用,创建用户yxl时没有初始化默认表空间,在系统开发过 ...

  9. No space left on device 解决Linux系统磁盘空间满的办法

    最近Linux电脑在执行mvn时候总是报错: No space left on device   原因是磁盘空间满了,我马上加了20G的硬盘容量,但是还是报错,上网查了一下,发现了解决方法,我用了其中 ...

随机推荐

  1. !!!常用SVG代码

    http://www.w3school.com.cn/svg/svg_examples.asp svg实例 http://www.w3school.com.cn/svg/svg_reference.a ...

  2. !学习笔记:前端测试 、前端调试、console 等

    http://www.cnblogs.com/rubekid/p/4851988.html 你真的了解 console 吗 2014 http://www.codeceo.com/article/ja ...

  3. 在centos上面编译安装python

    前言 因为在学习storm的过程中需要安装python,storm是部署在linux上面的,所以需要将python安装在linux上面. 安装准备 python下载 官网链接:https://www. ...

  4. K8s之Etcd

    Etcd是一个开源的.高可用的.分布式的键值对数据存储系统,提供共享配置.服务的注册和发现.etcd与zookeeper相比算是轻量级系统,两者的一致性协议也一样,etcd的raft比zookeepe ...

  5. 剑指offer例题——链表中倒数第K个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 编程过程 此处采用两个指针依次后移的方法来求解,首先,用一个指针移到第k个位置,之后将第二个指针放在第一位,与第二个指针一同移动,当第二个指针移动 ...

  6. Node.js 初识1

    测试:让Node.js运行脚本 1.创建一个脚本 js1.js console.log('测试'); 2.cmd界面 运行脚本

  7. DOM 节点node

    DOM可以将任何HTML或XML文档描绘成一个有多层节点构成的结构,即在HTML中所有内容都是节点.文档节点是每个文档的根节点,文档节点有一个子节点,称为文档元素.每个文档只能有一个文档元素.在HTM ...

  8. CentOS 特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)

    名称 说明 $0 脚本名称 $1-9 脚本执行时的参数1到参数9 $? 脚本的返回值 $# 脚本执行时,输入的参数的个数 $@ 输入的参数的具体内容(将输入的参数作为一个多个对象,即是所有参数的一个列 ...

  9. CF 225C Barcode(DP)

    传送门:点我 You've got an n × m pixel picture. Each pixel can be white or black. Your task is to change t ...

  10. input只允许输入正整数

    onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=t ...