Oracle数据库回滚段专题

更新时间:2023-05-16 03:52:59 阅读: 评论:0

Oracle数据库回滚段专题
回滚段概述

  回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事 务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。
回滚段的作用

  事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务 (ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。
事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。
读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的 修改(语句级读一致性)。当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询 的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。
事务级的读一致性

  ORACLE一般提供SQL语句级(SQL STATEMENT LEVEL)的读一致性,可以用以下语句来实现事务级的读一致性。
SET TRANSACTION READ ONLY;

  或:
序数词英语
SET TANNSACTION SERIALIZABLE;

  以上两个语句 都将在事务开始后提供读一致性。需要注意的是,使用第二个语句对数据库的并发性和性能将带来影响。
回滚段的种类

  系统回滚段:当数据库创建后,将自动创建一个系统回滚段,该回滚段只用于存放系统表空间中对象的前影像,比如数据字典。

  非系统回滚段:拥有多个表空间的数据库至少应该有一个非系统回滚段,用于存放非系统表空间中对象的数据前影像。非系统回滚段又分为 私有回滚段和公有回滚段,私有回滚段应在参数文件的ROLLBACK SEGMENTS参数中列出,以便例程启动时自动使其在线(ONLINE)。公有回滚段一般在OPS(ORACLE并行服务器)中出现,将在例程启动时自 动在线。

  DEFERED回滚段: 当我们把一个表空间置于Offline状态后,由于表空间此时不能进行读
四级办证写,这个时候如果有用户执行Rollback命令 要把相关此表空间上数据的事务进行回滚,"Rollback Completed."消息会返回给用户,此时,对于用户而言事务已经回滚,但是对于DB而言,回滚并没有真正的完成,这个时候数据库将该回滚信息写入系 统回滚段(也就是延迟回滚段),等表空间重新Online的时候,数据库从系统回滚段中将回滚信息应用
回滚段的使用
  分配回滚段:当事务开始时,ORACLE将为该事务分配回滚段,并将拥有最少事务的回滚段分配给该事 务。事务可以用以下语句申请指定的回滚段:
SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_gment

   事务将以顺序,循环的方式使用回滚段的区(EXTENTS),当当脸部皮肤保养步骤前区用满后移到下一个区。几个事务可以写在回滚段的同一个区,但每个回滚段的块只能包含一个事务的信息。


   例如(两个事务使用同一个回滚段,该回滚段有四个区):

quality是什么意思  1、事务在进行中,它们正在使用回滚段的第三个区;

mid   2、当两个事务产生更多的回滚信息,它们将继续使用第三个区;

  3、当第三个区满后,事务将写到第四个区,当事务开始写到一个新的 区时,称为翻转(WRAP);

怎么学好日常英语口语  4、当第四个区用满时,如果第一个区是空闲或非活动(使用该区的所有事务完成而没有活动的事务)的, 事务将接着使用第一个区。

  回滚段的扩张(EXTEND)

  当当前回滚段区的所有块用完而事务还 需要更多的回滚空间时,回滚段的指针将移到下一个区。当最后一个区用完,指针将移到第一个区的前面。回滚段指针移到下一个区的前提是下一个区没有活动的事 务,同时指针不能跨区。当下一个区正在使用时,事务将为回滚段分配一个新的区,这种分配称为回滚段的扩展。回滚段将一直扩展到该回滚段区的个数到达回滚段 的参数MAXEXTENTS的值时为止。
SQL> create rollback gment un_do1 tablespace un_do storage (initial 100k next 100k minextents 10 maxextents 100  optimal 1000k);
奥巴马胜选演讲
 不要设置MAXEXTENTS为UNLIMITED
  OPTIMAL参数来节约空间的使用
从Oracle 9i开始,Oracle引入了自动管理的Undo表空间,如果选择使用自动的Undo表空间的管理,那么用户不再能够创建或删除回滚段,也不再需要为事务指定回滚段,这一切将由Oracle自动进行。
SQL> show parameter undo
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTOroger federer
undo_retention                      integer    900
undo_tablespace                      string      UNDOTBS1
想使用手动管理回滚段?
SQL> lect name,iss_modifiable,issys_modifiable from v$parameter where name like '%undo
%';
NAME
--------------------------------------------------------------------------------
ISSES ISSYS_MOD
----- ---------
undo_management
FALSE FALSE
undo_tablespace
FALSE IMMEDIATE
undo_retention
FALSE IMMEDIATE
不支持直接修改回滚段参数
SQL> alter system t undo_management=manual scope=spfile;
系统已更改。
SQL> startup force
ORACLE 例程已经启动。
SQL> show parameter undo
NAME                                TYPE        VALUE
------------------------------------ ----------- ------------------------------
underpressureundo_management                      string      MANUAL
undo_retention                      integer    900delicious是什么意思
undo_tablespace                      string      UNDOTBS1
现在回滚段属于手动管理状态
SQL> create rollback gment un_do1 tablespace un_do storage (initial 100k next 100k minex
tents 10 maxextents 100  optimal 1000k);
create rollback gment un_do1 tablespace un_do storage (initial 100k next 100k minextents
10 maxextents 100  optimal 1000k)
*
第 1 行出现错误:
ORA-30574: 无法利用 AUTO 段空间管理在表空间中创建回退段
不能在使用自动段空间上使用建立回滚段
SQL> create tablespace uuud datafile 'E:\oracle\product\10.2.0\oradata\ORACLE\DATAFILE\uuu
d.dbf' size 10m extent management local uniform gment space management manual;
表空间已创建。
建立手动段空间
SQL> create rollback gment ud1 tablespace uuud storage (initial 100k next 100k minextents 10 maxextents 100  optimal 1000k);
create rollback gment ud1 tablespace uuud storage (initial 100k next 100k minextents 10
maxextents 100  optimal 1000k)
*
第 1 行出现错误:
ORA-01593: 回退段最佳大小 (125 blks) 小于计算的初始大小 (130 blks)
初始区100k,最小10个区,而回滚段最佳大小事1000k,小于回滚段最小空间,所以报错
SQL> create rollback gment ud1 tablespace uuud storage (initial 100k next 100k minextents 10 maxextents 100  optimal 1100k);
create rollback gment ud1 tablespace uuud storage (initial 100k next 100k minextents 10
maxextents 100  optimal 1100k)
*
第 1 行出现错误:
ORA-01552: 非系统表空间 'UUUD' 不能使用系统回退段
非系统永久表空间不能使用回滚段
SQL> create undo tablespace uuuud datafile 'E:\oracle\product\10.2.0\oradata\ORACLE\DATAFILE\uuuud.dbf' size 10m RETENTION NOGUARANTEE;
表空间已创建。
SQL> create rollback gment ud1 tablespace uuuud storage (initial 100k next 100k minexten
ts 10 maxextents 100  optimal 1100k);
回退段已创建。

本文发布于:2023-05-16 03:52:59,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/649232.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:回滚   事务   空间   滚段   使用   系统   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图