1、需要注意的是,使用第二个语句对数据库的并发性和性能将带来影响。回滚段的种类系统回滚段:当数据库创建后,将自动创建一个系统回滚段,该回滚段只用于存放系统表空间中对象的前影像,比如数据字典。非系统回滚段:拥有多个表空间的数据库至少应该有一个非系统回滚段,用于存放非系统表空间中对象的数据前影像。非系统回滚段又分为 私有回滚段和公有回滚段,私有回滚段应在参数文件的ROLLBACK SEGMENTS参数中列出,以便例程启动时自动使其在线(ONLINE)。公有回滚段一般在OPS(ORACLE并行服务器)中出现,将在例程启动时自 动在线。DEFERED回滚段: 当我们把一个表空间置于Offline状态后,由
2、于表空间此时不能进行读写,这个时候如果有用户执行Rollback命令 要把相关此表空间上数据的事务进行回滚,Rollback Completed.消息会返回给用户,此时,对于用户而言事务已经回滚,但是对于DB而言,回滚并没有真正的完成,这个时候数据库将该回滚信息写入系 统回滚段(也就是延迟回滚段),等表空间重新Online的时候,数据库从系统回滚段中将回滚信息应用回滚段的使用分配回滚段:当事务开始时,ORACLE将为该事务分配回滚段,并将拥有最少事务的回滚段分配给该事 务。事务可以用以下语句申请指定的回滚段:SET TRANSTRACTION USE ROLLBACK SEGMENT roll
3、back_segment 事务将以顺序,循环的方式使用回滚段的区(EXTENTS),当当前区用满后移到下一个区。几个事务可以写在回滚段的同一个区,但每个回滚段的块只能包含一个事务的信息。 例如(两个事务使用同一个回滚段,该回滚段有四个区):1、事务在进行中,它们正在使用回滚段的第三个区; 2、当两个事务产生更多的回滚信息,它们将继续使用第三个区;3、当第三个区满后,事务将写到第四个区,当事务开始写到一个新的 区时,称为翻转(WRAP);4、当第四个区用满时,如果第一个区是空闲或非活动(使用该区的所有事务完成而没有活动的事务)的, 事务将接着使用第一个区。回滚段的扩张(EXTEND) 当当前回滚
4、段区的所有块用完而事务还 需要更多的回滚空间时,回滚段的指针将移到下一个区。当最后一个区用完,指针将移到第一个区的前面。回滚段指针移到下一个区的前提是下一个区没有活动的事 务,同时指针不能跨区。当下一个区正在使用时,事务将为回滚段分配一个新的区,这种分配称为回滚段的扩展。回滚段将一直扩展到该回滚段区的个数到达回滚段 的参数MAXEXTENTS的值时为止。SQL create rollback segment un_do1 tablespace un_do storage (initial 100k next 100k minextents 10 maxextents 100 optimal 1
5、000k);不要设置MAXEXTENTS为UNLIMITED OPTIMAL参数来节约空间的使用从Oracle 9i开始,Oracle引入了自动管理的Undo表空间,如果选择使用自动的Undo表空间的管理,那么用户不再能够创建或删除回滚段,也不再需要为事务指定回滚段,这一切将由Oracle自动进行。 show parameter undoNAME TYPE VALUE- - -undo_management string AUTOundo_retention integer 900undo_tablespace string UNDOTBS1想使用手动管理回滚段? select name,is
6、ses_modifiable,issys_modifiable from v$parameter where name like %undo%;NAME-ISSES ISSYS_MOD- -undo_managementFALSE FALSEundo_tablespaceFALSE IMMEDIATEundo_retention不支持直接修改回滚段参数 alter system set undo_management=manual scope=spfile;系统已更改。 startup forceORACLE 例程已经启动。undo_management string MANUAL现在回滚段属
7、于手动管理状态 create rollback segment un_do1 tablespace un_do storage (initial 100k next 100k minextents 10 maxextents 100 optimal 1000k);create rollback segment un_do1 tablespace un_do storage (initial 100k next 100k minextents 10 maxextents 100 optimal 1000k)*第 1 行出现错误:ORA-30574: 无法利用 AUTO 段空间管理在表空间中创建回
8、退段不能在使用自动段空间上使用建立回滚段 create tablespace uuud datafile E:oracleproduct10.2.0oradataORACLEDATAFILEuuud.dbf size 10m extent management local uniform segment space management manual;表空间已创建。建立手动段空间 create rollback segment ud1 tablespace uuud storage (initial 100k next 100k minextents 10 maxextents 100 opt
9、imal 1000k);create rollback segment ud1 tablespace uuud storage (initial 100k next 100k minextents 10maxextents 100 optimal 1000k)ORA-01593: 回退段最佳大小 (125 blks) 小于计算的初始大小 (130 blks)初始区100k,最小10个区,而回滚段最佳大小事1000k,小于回滚段最小空间,所以报错 create rollback segment ud1 tablespace uuud storage (initial 100k next 100k
10、 minextents 10 maxextents 100 optimal 1100k);maxextents 100 optimal 1100k)ORA-01552: 非系统表空间 UUUD 不能使用系统回退段非系统永久表空间不能使用回滚段 create undo tablespace uuuud datafile oracleproduct10.2.0oradataORACLEDATAFILEuuuud.dbf size 10m RETENTION NOGUARANTEE; create rollback segment ud1 tablespace uuuud storage (init
11、ial 100k next 100k minextents 10 maxextents 100 optimal 1100k);回退段已创建。如果系统表空间使用本地管理表空间,其余表空间只能使用本地管理表空间如果系统表空间使用字典管理表空间,其余表空间只能使用字典管理表空间包括回滚段 select segment_name,tablespace_name from dba_rollback_segs;SEGMENT_NAME TABLESPACE_NAME- -SYSTEM SYSTEM_SYSSMU1$ UNDOTBS1_SYSSMU2$ UNDOTBS1_SYSSMU3$ UNDOTBS1_
12、SYSSMU4$ UNDOTBS1_SYSSMU5$ UNDOTBS1_SYSSMU6$ UNDOTBS1_SYSSMU7$ UNDOTBS1_SYSSMU8$ UNDOTBS1_SYSSMU9$ UNDOTBS1_SYSSMU10$ UNDOTBS1_SYSSMU11$ UUUUD_SYSSMU12$ UUUUD_SYSSMU13$ UUUUD_SYSSMU14$ UUUUD_SYSSMU15$ UUUUD_SYSSMU16$ UUUUD_SYSSMU17$ UUUUD_SYSSMU18$ UUUUD_SYSSMU19$ UUUUD_SYSSMU20$ UUUUDUD1 UUUUD已选择22
13、行。默认创建system回滚段1个非系统回滚段10个每次创建一个回滚表空间,包含10个回滚段单独增减了一个回滚段UD1从9i以后,创建回滚段不再需要undo表空间了,本例使用的是system表空间 create rollback segment 1ud storage (initial 100k next 100k minextents 2 maxextents 100 optimal 1100k);UD1 UUUUD_SYSSMU22$ UUUUUD_SYSSMU23$ UUUUUD_SYSSMU24$ UUUUUD_SYSSMU25$ UUUUUD_SYSSMU26$ UUUUUD_SYS
14、SMU27$ UUUUUD_SYSSMU28$ UUUUUD_SYSSMU29$ UUUUUD_SYSSMU30$ UUUUUD_SYSSMU31$ UUUUUD1ud SYSTEM已选择33行。当回滚段创建后,回滚段是离线的,不能被数据库使用,为了使回滚段被事务利用,必须将回滚段在线。可以用以下命令使回滚段在线: select segment_name,tablespace_name,status from dba_rollback_segs;SEGMENT_NAME TABLESPACE_NAME STATUS- - -SYSTEM SYSTEM ONLINE_SYSSMU1$ UNDOT
15、BS1 OFFLINE_SYSSMU2$ UNDOTBS1 OFFLINE_SYSSMU3$ UNDOTBS1 OFFLINE_SYSSMU4$ UNDOTBS1 OFFLINE_SYSSMU5$ UNDOTBS1 OFFLINE_SYSSMU6$ UNDOTBS1 OFFLINE_SYSSMU7$ UNDOTBS1 OFFLINE_SYSSMU8$ UNDOTBS1 OFFLINE_SYSSMU9$ UNDOTBS1 OFFLINE_SYSSMU10$ UNDOTBS1 OFFLINE_SYSSMU11$ UUUUD OFFLINE_SYSSMU12$ UUUUD OFFLINE_SYSSM
16、U13$ UUUUD OFFLINE_SYSSMU14$ UUUUD OFFLINE_SYSSMU15$ UUUUD OFFLINE_SYSSMU16$ UUUUD OFFLINE_SYSSMU17$ UUUUD OFFLINE_SYSSMU18$ UUUUD OFFLINE_SYSSMU19$ UUUUD OFFLINE_SYSSMU20$ UUUUD OFFLINEUD1 UUUUD OFFLINE_SYSSMU22$ UUUUUD OFFLINE_SYSSMU23$ UUUUUD OFFLINE_SYSSMU24$ UUUUUD OFFLINE_SYSSMU25$ UUUUUD OFFL
17、INE_SYSSMU26$ UUUUUD OFFLINE_SYSSMU27$ UUUUUD OFFLINE_SYSSMU28$ UUUUUD OFFLINE_SYSSMU29$ UUUUUD OFFLINE_SYSSMU30$ UUUUUD OFFLINE_SYSSMU31$ UUUUUD OFFLINE1ud SYSTEM OFFLINE ALTER ROLLBACK SEGMENT online;回退段已变更。1ud SYSTEM ONLINE切换UNDO 表空间.启动例程并打开数据库后,同一时刻特定例程只能使用一个UNDO表空间,切换UNDO表空间是指停止例程当前使用的UNDO表空间,并
18、启动其他 UNDO表空间,下面以启用undotbs2表空间为例,说明切换UNDO表空间的方法.ALTER SYSTEM SET undo_tablespace=undotbs02;可以使用ALTER ROLLBACK SEGMENT命令修改回滚段的存储参数(包括OPTIMAL,MAXEXTENTS)。 语法:ALTER ROLLBACK SEGMENT rollback_segment STORAGE (NEXT integerK|M MINEXTENTS integer MAXEXTENTS integer|UNLIMITED OPTIMAL integerK|M|NULL) 例:ALTER ROLLBACK SEGMENT rbs01 STORAGE (MAXEXTENTS 1000);回收回滚段的空间 如果指定了回滚段的OPTIMAL参数,ORACLE将自动回收回滚段到OPTIMAL指定的位 置。用户也可以手动回收回滚段的空间 shrink; shrink to 1m;如果不指明TO integer的数值,ORACLE将试图回收到OPTIMAL的位置。使回滚段离线 为了达到以下两个目的将要回滚段离线:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1