一直以来对回滚段的理解都不是很清晰,更谈不上深入。今天偶然在网上看到了一篇文章,比较浅显易懂地阐述了回滚段的概念,用法和规划及问题的解决,这里主要摘录一下概念部分,以及日常管理的内容和常见问题的解决,因为自Oracle9i以后回滚段默认设置由数据库自行管理了。
“回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。”
回滚段的作用:事务回滚,事务恢复,读一致性
回滚段的种类:系统回滚段,非系统回滚段(公用和私用)
前面讲到自Oracle9i以后回滚段默认设置由数据库自行管理,这大大降低了DBA的维护成本,一般不需要进行回滚段的创建、修改、删除等动作了,只要UNDOTBS1表空间能够有足够的空间就行(自动伸展);
SQL> select segment_name as seg,tablespace_name as tab from dba_rollback_segs;
SEG TAB
------------------------------ ------------------------------
SYSTEM SYSTEM
_SYSSMU1$ UNDOTBS1
_SYSSMU2$ UNDOTBS1
_SYSSMU3$ UNDOTBS1
_SYSSMU4$ UNDOTBS1
_SYSSMU5$ UNDOTBS1
_SYSSMU6$ UNDOTBS1
_SYSSMU7$ UNDOTBS1
_SYSSMU8$ UNDOTBS1
_SYSSMU9$ UNDOTBS1
_SYSSMU10$ UNDOTBS1
可以发现实际上在UNDOTBS1里系统先创建了一个系统回滚段(这是SYSTEM专用的),然后又创建了其它几个公用回滚段。
日常数据库管理时,可能会出现回滚段表空间数据文件丢失或损坏的情况,这里引用一篇文章解说当数据库仍然启动时,如何修复回滚段表空间:http://www.pcvz.com/Program/Database/Oracle/Oracleyy/Program_138678.html
这种情况的两种可能的解决方法:
A) 使丢失的那个数据文件 offline, 并从备份中恢复它,这种情况适用于数据库是处于归档方式的。
B) 另一个方法是 offline 掉所有的那个文件所属表空间的回滚段, drop 那个表空间 , 然后得建它们。你可能不得不杀掉那些使用着回滚段的进程,以便使它 offline.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/108247/viewspace-462898/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/108247/viewspace-462898/