深入浅出undo记载02

继续理解eygle深入浅出的undo回滚于撤销的重要细节知识点,先说一下以前blog中就提到的关于块清除的知识点。(块清除是个及其复杂的过程,这里因为个人理解只能整理出如下要点)

Ora-01555快照过久,oracle经典错误,主要由以下三种情况构成

1 查询scn小于blockscn需要undo构造cr块实现一致性读,回滚段被覆盖

2 延迟块清除,查询触发延迟块清除需要从回滚段获得事务提交的scn,如果事务前镜像已经被覆盖,并且查询scn小于回滚段中最小提交的scn,那么oracle将无法判断查询scn和事务提交scn大小,出现ora-01555(这里还说一下极端的情况,执行延迟块清除时,回滚段或原回滚表空间已经被删除,此时oracle还是可以通过字典表undo$来获得scn信息,执行块清除)

3 利用sqlldrdirect=true方式插入数据时,由于没有记录redoundo信息,oracle直接指定cache commit scn给加载数据,访问这些数据时,可能会出现ora-01555

(对于eygle所述第三种情况,还未能理解清晰)

这里再说下分批提交:

对于一个大型事务由于要记录回滚段信息,当回滚段不足时很可能会出现一个大事务由于回滚段过久而直接失败,所以在大型事务中尽量使用分批提交减少回滚段的竞争。

Undo空间的记载,在oracle 9i自动管理的undo表空间,undo_retention参数的引入正是为了减少ora-01555错误出现,这个参数设置当transaction提交后,回滚段非激活后,回滚段保留的时间,oracle9IR1初始值为900秒,oracle9IR2增加10800秒,该参数越大,回滚段保留的时间也越长,不过也需要消耗相应的undo存储空间。

Undo_retention该参数并不是一个担保值,在事务比较频繁下,oracle很可能会覆盖在undo_retention之内的undo信息。

SQL> select * from v$version where rownum=1;

BANNER

----------------------------------------------------------------

Oracle Database 10gEnterprise Edition Release 10.2.0.1.0 - Prod

SQL> show parameter undo;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management string AUTO

undo_retention integer 900

undo_tablespace string UNDOTBS1

oracle 10gundo_retention会在AUM下自动管理,缺省会启用,oracle自动满足最大允许的长时间查询,而不需要设置undo_retention参数来保留undo信息。Oracle 10g的新特性的引入伴随着两个主要隐含参数_undo_autotune_collect_undo_stats

SQL> col ksppinm for a20

SQL> col ksppdesc for a40

SQL> col ksppstvl for a10

SQL> select ksppinm,ksppdesc,ksppstvl from x$ksppi a,x$ksppcv b

2 where a.indx=b.indx and a.ksppinm like '%undo_autotune%';

KSPPINM KSPPDESC KSPPSTVL

-------------------- ---------------------------------------- ----------

_undo_autotune enable auto tuning of undo_retention TRUE

SQL> select ksppinm,ksppdesc,ksppstvl from x$ksppi a,x$ksppcv b

2 where a.indx=b.indx and a.ksppinm like '%collect_undo_stats%';

KSPPINM KSPPDESC KSPPSTVL

-------------------- ---------------------------------------- ----------

_collect_undo_stats Collect Statistics v$undostat TRUE

同样oracle 10g中增加了Guarantee控制,用户也可以指定undo表空间必须满足undo_retention的范围之内。默认的是noguarantee

SQL> select tablespace_name,status,contents,retention from dba_tablespaces where contents='UNDO';

TABLESPACE_NAME STATUS CONTENTS RETENTION

------------------------------ --------- --------- -----------

UNDOTBS1 ONLINE UNDO NOGUARANTEE

SQL> alter tablespace undotbs1 retention guarantee;

Tablespace altered

SQL> select tablespace_name,status,contents,retention from dba_tablespaces where contents='UNDO';

TABLESPACE_NAME STATUS CONTENTS RETENTION

------------------------------ --------- --------- -----------

UNDOTBS1 ONLINE UNDO GUARANTEE

undo表空间设置为guarantee,提交事务的回滚空间必须被保留足够的时间,如果新的事务需要undo空间,此时不会覆盖und_retention范围之内的undo信息,事务会因为没有足够回滚空间而失败,而不是覆盖。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25362835/viewspace-1056956/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25362835/viewspace-1056956/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值