日期:2014-05-16  浏览次数:20513 次

undo系列学习之pub兄弟帖子的整理

    提问者:xmas171688

    提问时间:2005-1-13 14:45:18

    问题:

在下列2个表中
V$ROLLNAME,V$ROLLSTAT 
谁能帮我解释下 V$ROLLSTAT 的列 每列是干吗的。恳请帮忙!

主要是想知道 哪列是 回滚段大小 !


    整理:

    每列是干什么的,我想,官网给得很明了:http://docs.oracle.com/cd/B28359_01/server.111/b28320/dynviews_2143.htm#REFRN30210

    V$ROLLSTAT中的常用列:

    1)usn:回滚段标识符

    2)rssize:回滚段默认大小

    3)xacts:活动事务数

    在一段时间内增量用到的列:
    WRITES:回滚段写入数(单位:bytes)
    SHRINKS:回滚段收缩次数
    EXTENDS:回滚段扩展次数
    WRAPS:回滚段翻转(wrap)次数
    GETS:获取回滚段头次数
    WAITS:回滚段头等待次数

    通过usn,我们可以将v$rollname和v$rollstat连接起来,来查看更有意义的回滚段的统计信息。如:

SELECT n.name, s.extents, s.rssize, s.optsize, s.hwmsize, s.xacts, s.status
FROM v$rollname n, v$rollstat s
WHERE n.usn = s.usn;

   

    注意:
  通过花费时间除以翻转次数,你可以得到一次回滚段翻转(wrap)的平均用时。此方法常用于在长查询中指定合适的回滚段大小以避免'Snapshot Too Old'错误。同时,通过查看extends和shrinks列可以看出optimal是否需要增加。

 

    提问者:一路随行

    提问时间:2010-5-7 10:57:32

    问题:

各位大侠,我想请教一下,那些操作可以回滚?commit后还可以回滚?那些操作会自动提交啊?


    整理:

    dml可以回滚
    commit后不能回滚
    ddl、dcl会自动提交

 

    提问者:jvkojvko

    提问时间:2011-6-28 11:06:48

    问题:

insert 数据了15个小时以后没有成功,然后手工停止了,然后现在回滚了一天一夜还没有好, 表还是被锁着,有好的解决办法没?


insert的数据量大概3000W


    整理:

    首先,我们须从这个问题中得到经验教训:大批量的数据插入,切记要每隔一段时间提交,控制事务的长度!否则,只能only wait。

 

    提问者lyxing

    提问时间:2009-1-18 08:54:51

    问题:

服务器是红帽LINUX企业4,oracle9204,发现有一个数据库的回滚空间一直在增长,都用了98.63%了,不过也没有见有什么异常情况。会是哪里的问题呢?原来是1G的回滚,后来扩到2G,现在又快满了

    整理:

    原因:
    1. 你存在大的事务需要回滚;
    2. show parameter undo_retention ; --这种情况下减小undo_retention的值
    3. 回滚段中内容说明一下:
    insert 只记录rowid
    update 只记录更新字段的旧值(前镜像)。--update太多
    delete 产生最多的回滚,记录整行记录。 --delete太多

    提问者:lmin_432930

    提问时间:2008-5-19 16:29:46

    问题: