没有合适的资源?快使用搜索试试~ 我知道了~
ORACLE数据库的回滚段.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 173 浏览量
2021-12-14
15:45:37
上传
评论
收藏 299KB PDF 举报
温馨提示
试读
16页
ORACLE数据库的回滚段.pdf
资源推荐
资源详情
资源评论
ORACLE 数据库系统安装完成后,由于版本的不同自动在 RBS表空间上建立了相应数量
的回滚段,比如在 ORACLE8i Realse 8.1.7 版本上可以建立 rb01 至 rb24 共 24 个回滚段。
但是这些回滚段的大小都很小,而且在缺省下,只有少数回滚段是有效的。所以无论在任
何应用环境下都需要对所有的回滚段进行管理和调整。
§14.1 回滚段基本概念
回滚段( Rollback Segment)是 ORACLE 数据库系统的一个很重要的对象,它实际上
是一个用来存放增、删、改数据的磁盘空间,说它是一个磁盘空间是因为它必须建立在一
个表空间上,而表空间又与一个或多个数据文件对应。
§14.1.1 回滚段的作用
ORACLE 的回滚段( Rollback )存储着事务处理 (Transaction )的回滚信息, 在 ORACLE
中担负两个重要的任务:
1、 保证数据读的一致性( read consistency );
2、 进行数据恢复( Database Recovery )。
用于用户进行 insert , update , delete 时,保存信息的数据库对象,以便在需
对改动的数据进行取消时可以进行回滚。
§14.1.2 回暖滚段的基本概念
1、 回滚段“头”
指回滚段中当前写入记录的位置;
2、 回滚段“尾”
指最早使用回滚段且处于工作状态的 transaction 写入回滚信息的起始位置。
§14.1.3 回滚段使用原则
1、 一个 transaction 可能会使用当前处于 online 的任意一个回滚段。
2、 transaction 总是从回滚段头开始记录,依次向前推进当前指针。
3、 一个 transaction 中的所有信息只能存于一个回滚段内。
4、 多个 transaction 可以将数据写入同一个回滚段内的同一个 extent 中。
5、 使用某个 extent 的所有 transaction 在提交或回滚后, 它将分配一个新的 extent ,并
将该 extent 插入到回滚段的 extent 环中。
6、 insert , update 及 delete 操作都产生回滚信息。
7、 在回滚段中存取数据需要短暂的排它锁。
§14.1.4 ORACLE 安装后的回滚段
1、 缺省回滚段为 system ,它被建立在 system 表空间中。
2、 第二个回滚段为 R0(数据库生成过程)
1) 创建数据库时,系统在 system 表空间上建立一个 system 回滚段;
2) 在 system 表空间建立 R0 回滚段(一个数据库若有多个表空间则必须建立
第二个回滚段) ;
3) 让新的回滚段 R0 有效,从而创建其它数据库;
4) 创建一个叫 rbs 的表空间(以便生成更多的回滚段) ;
5) 在 rbs 表空中创建附加的回滚段;
6) 使 system 表空间中的 r0 为 active;
7) 使 rbs 表空间的所有回滚段为 active;
8) 当数据库创建完成后, r0 回滚段不需要(仍有效,但不激活 in active );
§14.1.5 回滚段的工作过程
根据 ORACLE向回滚段的片写入数据所使用的方法,可将回滚段看作一个图环,工作过
程如下:
1、 新 transaction 开始启动, ORACLE分配一个可用的回滚段;
2、 回滚数据, ORACLE将数据写入片中;
3、 写 某片时,通过 wrapping (环绕)转到 该回滚段的下一片继续写;当写满回滚段的
最后一片时,可以绕到头片继续写。但当某一个事务 (transaction) 的回滚数据大于回滚段
所容纳的数量时, 即写回到 第一片还继续写时,此时为了满足回滚数据的要求,并防止
此事务不重写自己的回滚数据, ORACLE根据 next 作扩充至到 maxextents 为止,当然超过
maxextents 时仍未完成时,则出现 snapshot too old ( 没有新的分配了 ) 。
在大型事务结束后, ORACLE 根据 OPTIMAL参数对的扩展的回滚段空间进行“最佳大小”的
收缩。回滚段的工作过程如图所示:
回滚段的工作过程图( rollback 图)
§14.2 创建和使用回滚段
下面给出创建回滚段的命令语法和参数解释,此外简单介绍在应用中如何使用回滚段
的例子。
§14.2.1 创建回滚段
ORACLE提供 CREATE ROLLBACK SEGMENT命令实现回滚段的创建。它的语法如下:
1.CREATE ROLLBACK SEGMENT句法 :
create [public] rollback segment segment_name tablespace tablespace_name
storage( initial xxM next xxM minextents n maxextents n
optimal xxM pctincrease 0 );
参数的意义同建表上样,但这里不允许使用 pctincrease 参数,因此其增涨百分比总
是零。这里的参数的使用(执行效果)与表的参数有很大的不同。一表中的数据在关机后
仍放于该表空间所对应的数据文件中,而回滚段只在系统运行且在 insert , update ,
delete 时用, 后即可释放 (让别的 transaction 用),且在关机后所记录的所有回滚信息均
被释放,因而就有扩展后的空间如何释放的问题,即保持多少空间为最佳的问题(由
OPTIMAL)设定。Optimal 可以避免“snapshot too old ”错误的发生, 为每个 rollback segmal
指定一个 optimal 以便在内存中保持一个较少的 cache 值,从而提高性能。
2. 创建回滚段
1) 创建 :
create public rollback segment segment_name tablespace rbs ;
2) 激活 :
alter rollack segment segment_name online ;
注意:创建公有( public )回滚段要指定 rbs 表空间,不要指定 system 表空间。
创建时最好指定存储参数 storage
3. 设置实例重启动后回滚段联机
除了上面使用 CREATE ROLLBACK SEGMENT命令完成回滚段的创建外,要使 ORACLE系统关闭
重新启动后仍然处于联机,还要在 initsid.ora 参数文件中 rollback_segments 参数加上
回滚段的名字,如:
rollback_segments= (r0 , r1 , r2 )
4. 回滚段扩展次数的限制
在比较旧的 ORACLE版本里,回滚段的扩展次数受到一些限制,它与实例的块大小有关。比
如:
当 ORACLE 块= 2k 时, maxextents 121
当 ORACLE 块= 4k 时, maxextents 249
当 ORACLE 块= 8k 时, maxextents 505
当 ORACLE 块= 16k 时, maxextents 1017
当 ORACLE 块= 32k 时, maxextents 2041
注:在 ORACLE V7.3 以后, Maxextents 的扩展次数已被取消,你可以设得足够大。甚至可
以设为 UNLIMITED ( =249 000 000 ) 。
5. 查看回滚段的信息
select segment_name ,tablespace_name , status
from sys.dba_rollback_segs ;
segment_name tablespace status
----------------- ------------- --------
剩余15页未读,继续阅读
资源评论
筱筱笎琞
- 粉丝: 10
- 资源: 15万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功