UNDO表空间与Undo的认识

浏览:
字体:
发布时间:2013-12-12 14:50:51
来源:
undo的三大作用:1.提供一致性读。2.回滚事务。3.实例恢复查看表空间是属于temporary,undo还是permanent?select tablespace_name,contents,status from dba_tablespaces where tablespace_name like '%UNDO%';
1.管理Undo表空间--创建新的Undo表空间CREATE UNDO TABLESPACE UNDOTBS2datafile '/paic/g2bh8060/dev/xqd/oradata/hd02ntlf/undotbs2_01.dbf'size 500m autoextend on RETENTION NOGUARANTEE;默认是NOGUARANTEE--为Undo表空间增加文件alter tablespace undotbs1 add datafile '/u01/oracle/undo01.dbf' size 500m autoextend on;alter tablespace undotbs1 add datafile '+DATA_MIDG' size 500m autoextend on;查询与更改undo表空间是否retention guaranteeselect tablespace_name,RETENTION from dba_tablespaces where tablespace_name like '%UNDO%';ALTER DATABASE UNDOTBS01 RETENTION GUARANTEE|NOGUARANTEE;更改系统默认表空间show parameter undo_tablespacealter system set undo_tablespace=undotbs2;undo表空间删除drop tablespace undotbs1 INCLUDING CONTENTS AND DATAFILES;undo表空间更名alter tablespace undotbs2 rename to undotbs1;重建undo表空间1.因为延迟段创建的原因,可以先将参数取消;show parameter segmentalter system set deferred_segment_creation=false;2.创建undotemp表空间3.alter system set undo_tablespace=undotemp;(如果延迟段创建特性启用了,会提示表空间不存在)4.旧的undotbs1 drop掉。旧的表空间现在是pending offline状态,等待offline,要等其上的事务都结束后才能真正offline。ORA-30013: undo tablespace 'UNDOTBS1' is currently in use5.新的rename成旧的。
2.认识UNDOundo相关参数:undo_management AUTO --9i以后我们undo_management都用autoundo_tablespace UNDOTBS2 --可以动态指定系统undo表空间undo_retention 900 --单位秒,默认900undo_retention是针对select操作的,比如闪回查询,我们一般希望能闪回查询3小时内的数据。事务中的undo块都是active的,事务结束后的块是inactive的,inactive的undo块在过了undo_retention 指定的时间后,就会变成expired。比如DB最长的查询也在5分钟内,那我undo_retention只要设成300,那么这个select会遭遇01555快照太旧的可能性就比较小,但不保证。ALTER SYSTEM SET undo_retention=10800 SCOPE=BOTH;我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要指定一个UNDO 表空间。 如果设为manual,系统启动后使用rollback segment方式存储undo信息。如果系统没有指定undo_management,那么系统默认以manual方式启动,即使设置了auto方式的参数,这些参数将被忽略。假如数据库中用RETENTIONGUARANTEE子句配置了保证保留撤销。如果撤销表空间太小不能满足使用它的所有活动事务,那么会发生以下情况:1、如果撤销表空间用完85%,Oracle将发布一个自动表空间警告2、当撤销表空间用完97%时,Oracle将发布一个自动表空间严重警告3、所有DML语句将不允许,并且会接收到一个空间超出错误4、DDL语句允许继续执行所以PA数据库undo表空间都是NOGUARANTEE,无论生产还是测试库。RETENTIONGUARANTEE的情况下,undo_retention秒数内的undo都不能被覆盖,所以如果expired与freed的块几乎没了,Undo表空间也不能自动扩展,就会报上面的错误。undo_retention参数的作用,在RETENTIONGUARANTEE的情况下,可以作为是否保证undo块不被覆盖的分界线,而在没有设retention的情况下,例如PA的情况,就是作为是否被优先覆盖的分界线。所以此处只有两个优先级,在线的任何一边,都是随机随意地没优先级地覆盖的。Undo表空间中已经分配给表空间的extend大小。@tsfree即select d.tablespace_name, space "SUM_SPACE(M)", blocks sum_blocks, space - nvl(free_space, 0) "USED_SPACE(M)", round((1 - nvl(free_space, 0) / space) * 100, 2) "USED_RATE(%)", free_space "FREE_SPACE(M)" from (select tablespace_name, round(sum(bytes) / (1024 * 1024), 2) space, sum(blocks) blocks from dba_data_files group by tablespace_name) d, (select tablespace_name, round(sum(bytes) / (1024 * 1024), 2) free_space from dba_free_space group by tablespace_name) f where d.tablespace_name = f.tablespace_name(+) order by 1;其中USED_SPACE(M)里面,都是已经分配给表空间使用的。里面有4钟状态的undo块。undo块存在的四种状态select tablespace_name,status,sum(bytes)/1024/1024 mb from dba_undo_extents group by tablespace_name,status;active:表示正在使用该undo的事务还没有commit或rollbackUNEXPIRED(inactive):表示该undo上没有活动的事务,该状态的undo可以被其他事务覆盖。expired:表示该undo块持续inactive的时间超过undo_retention所指定的时间freed:表示该undo块内容是空的,从来没有被使用过。一个事务申请Undo表空间:1.如果undo表空间是可以自动扩展的,首先自动扩展。2.如果没得扩展了,就找free的区用。3.没有free的区了,就找expired的undo区用。4.没有expired的,就找unexpired的,此时这些区还没过undo_retention时间,所以会导致闪回查询无法保证使用咯。5.还是没有的话,报错,active的区肯定不会被使用的。Retention Guarantee模式下,一个事务申请undo表空间只走上述的第1,2,3点。3点走完后也申请不到Undo空间就报错。也就是说undo_retention时间内的undo块一定不会被覆盖。
往数据库中做导数操作,批量DML而又长时间不能commit的操作的时候,要给Undo表空间加几个文件,并且开自动扩展,保持监控
>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();