undo空间满的处理方法(含undo的学习与相关解释)
Posted nathon-wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了undo空间满的处理方法(含undo的学习与相关解释)相关的知识,希望对你有一定的参考价值。
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%‘;
解释:
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段。
4、undo segment的信息:
SELECT a.name, b.xacts, b.writes, b.extents FROM v$rollname a, v$rollstat b WHERE a.usn=b.usn;
以上是关于undo空间满的处理方法(含undo的学习与相关解释)的主要内容,如果未能解决你的问题,请参考以下文章
Oracle Undo回滚段深入解析_超越OCP精通Oracle视频课程培训15
Oracle学习笔记 读一致性(ORA-01555错误机制分析)及Undo表空间大小设置