Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->数据库应用 ->Oracle ->正文

全方位介绍Oracle数据库中的回滚段

来源:ccidnet  作者:Webmaster 时间:2007-04-17 点击: [收藏] [投稿]

本文分为以下几个部分:

* 回滚段的作用

* 回滚段的类型

* 回滚段的数量、大小及存储参数

* 回滚段的维护及查询

* 有关回滚段的常见错误及解决方法

1. 回滚段的作用

回滚段用于对数据库修改时, 保存原有的数据, 以便稍后可以通过使用ROLLBACK来恢复到修改前的数据; 另外, 回滚段可以为数据库中的所有进程提供读一致性. 因此, 回滚段设置的合理与否, 直接影响到数据库的性能, 在更新密集的OLTP应用中,更是如此.

2. 回滚段的类型

回滚段可分为系统回滚段和非系统回滚段, 其中非系统回滚段又分为PUBLIC回滚段和PRIVATE回滚段.

系统回滚段用于处理涉及系统的CATALOG的事物(比如大多数的DDL), 它位于SYSTEM表空间, 由于只有SYSTEM表空间可以随时保持可用, 因此, 不要把SYSTEM回滚段放在其他的表空间中.

*** 原则1: 系统回滚段应放在SYSTEM表空间中, 并且应该永远保持ONLINE状态.

PUBLIC回滚段对于数据库的所有实例(INSTANCE)都是可用的, 除非将其显式设置为OFFLINE.

PRIVATE回滚段是指对于数据库的某个实例是私有的, 为了使用PRIVATE回滚段, 某个实例应当在其INITsid.ORA的ROLLBACK_SEGMENTS中标明所有要使用的PRIVATE回滚段, 或通过使用ALTER ROLLBACK SEGMENT XXX ONLINE来使用某一个回滚段.

*** 建议1: 在单实例系统中,建议将所有回滚段设为PUBLIC.

*** 建议2: 在多实例系统中(如OPS), 建议将每个实例的PRIVATE回滚段放置到访问比较快的本地设备上.

3. 回滚段的数量、大小及存储参数

精确的回滚段的数量及大小的计算涉及很多方面: 应用的类型(OLTP/OLAP/BATCH), 同时进行的事物的数量, DML语句的类型, 每个事物处理的数据量等等. 精确的计算, 限于篇幅, 不在此提及, 朋友们可参考相关文档(参考文献4), 在此, 只提供几个原则及建议.

*** 原则2: OLTP系统应使用小但较多的回滚段, OLAP系统/批处理系统应使用少量的大回滚段

*** 建议3: OLTP/OLAP混合型系统中, 应专门设置一个或几个大的回滚段, 平时设置为OFFLINE, 使用时通过使用SET TRANSACTION USE ROLLBACK SEGMENT XXX来使用它. 这些回滚段应使用OPTIMAL参数,以便在不使用时,可以SHRINK到一个较小的尺寸。

*** 建议4: 在很难计算准确的数量、大小时,可用"偏大不偏小"的原则。

*** 原则3: 所有的回滚段的INITIAL/NEXT参数应设为相同, 只有建议3中提到的大回滚段例外.

*** 原则4: 不要将回滚段的MAXEXTENTS设为UNLIMITED, 回滚段所在表空间也不要设为AUTOEXTEND方式, 否则将会使得由于某个不正常的事务导致整个数据库处于失控状态.

4. 回滚段的维护及查询

(1) 创建回滚段

__CREATE ROLLBACK SEGMENT RB01 
__TABLESPACE RBS1 
__STORAGE ( 
____INITIAL 100K 
____NEXT 100K 
____MINEXTENTS 20 
____MAXEXTENTS 100 
____OPTIMAL 2000K );

2) 更改ONLINE/OFFLINE状态

__ALTER ROLLBACK SEGMENT RB01 ONLINE; 
__ALTER ROLLBACK SEGMENT RB01 OFFLINE;

(3) 更改OPTIMAL参数

__ALTER ROLLBACK SEGMENT RB01 
__STORAGE ( MAXEXTENTS 200 
____OPTIMAL 2048K );

(4) 缩小回滚段

__ALTER ROLLBACK SEGMENT RB01 SHRINK; 
(有OPTIMAL参数时, 缩小到OPTIMAL值; 没有OPTIMAL参数时, 缩小到MINEXTENTS所对应的尺寸) 
__ALTER ROLLBACK SEGMENT RB01 SHRINK TO 2048K;

(5) 修改INITIAL/NEXT参数

*** 建议5: 根据原则3, 修改NEXT时, 总应该同时修改INITIAL.

INITIAL参数无法直接修改, 只能先DROP, 然后再CREATE.

__DROP ROLLBACK SEGMENT RB01; 
__CREATE ROLLBACK SEGMENT RB01 
__TABLESPACE RBS1 
__STORAGE ( INITIAL 100K 
____NEXT 100K 
____MINEXTENTS 20 
____MAXEXTENTS 121 
____OPTIMAL 2000K )

(6) 在事务中使用特定的回滚段

__SET TRANSACTION USE ROLLBACK SEGMENT RB_LARGE1;

(7) 常用的有关回滚段的系统数据字典

DBA_ROLLBACK_SEGS (相关表:DBA_SEGMENTS) 
V$ROLLNAME 
V$ROLLSTAT 
V$TRANSACTION (相关表: V$SESSION)

5. 有关回滚段的常见错误及解决方法

(1) 回滚段空间不够

ORA-01562 - failed to extend rollback segment number string


 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:简单谈谈Oracle 10G中的闪回恢复区   下一篇:深刻理解Oracle数据库的启动和关闭

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号