ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 回滚段状态为FULL的说明

回滚段状态为FULL的说明

原创 Linux操作系统 作者:hxcqu 时间:2008-09-26 16:16:41 0 删除 编辑

有时候检查"v$rollstat"视图,发现回滚段标记为FULL,当一个回滚段标记为FULL后,新的事务不能使用该回滚段,在FULL状态被清除前,该回滚段中的所有的事务都必须完成,即事务要么全部提交或者回退。

如果不可能提交或者回退所有事务,临时的解决办法如下:

 

A.  将回滚段脱机,然后再联机,就可以清除FULL状态,如果有大量的事务需要回退,可能会需要花很长的时间。

 

Alter rollback segment offline;

Alter rollback segment online;

 

B.  为回滚段所在的表空间添加一个数据文件,以便此回滚段可以扩展。当前*current* txn事务可以继续(导致回滚段状态变成FULL的当前事务),回滚段的状态可以再次回到ONLINE

 

如果你等不及让FULL状态清除掉,重启数据库可以清除回滚段的状态。其他可能的临时措施是,使用事务设置。这里假设仍然使用FULL的回滚段。

 

Set transaction use rollback segment ;

 

full状态的回滚段中的所有事务完成后(提交或者回滚),FULL的状态就清除了,并且此回滚段可以环绕。当回滚段中的活动事务数量为0的时候,FULL的状态也可以被清除。

 

有时候回滚段还运行着的活动事务,阻止我们环绕并重用回滚段中的已经分配的区,某些事务需要很长的时间才能完成,它阻止对回滚空间的重用,卡在那里,除非此事务和所有的事务全部完成,否则回滚段保持FULL

 

可以查看v$transaction,来看看到底是什么事务。

 

我们来看下面的统计:

Rollback segemnt Status     Exist extents Current extent Current block Transactions 
---------------- ---------- ------------- -------------- ------------- ------------ 
R02              FULL                 360            192            33            2     
SYSTEM           ONLINE                 5              0             7            0     
IBSRB01          ONLINE             1,605            720            19            3     
R04              ONLINE               421            364             4            3     
R03              ONLINE               358            193            16            2     
R01              ONLINE               548            166            13            2

 

 

R02状态是FULL,但是它只用了已分配360个区中的192个。回滚段中有两个事务,使用其他的查询发现这两个事务都是INACTIVE,那么R02的状态怎么会是FULL

因为回滚段的使用方式是循环使用的,当你的非活动事务正在使用"extend 193",我们就无法再进入其中,即使194-360没有被使用。因此回滚段当然就是FULL,对于新的事务来说不能使用此回滚段,除非它不是FULL

 

注意:

当事务完成后,回滚段分配的区并不会马上释放,只有当头从一个区移到下一个区的时

候,才会执行收缩。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/195785/viewspace-464505/,如需转载,请注明出处,否则将追究法律责任。

全部评论

注册时间:2008-09-08

  • 博文量
    11
  • 访问量
    56400