042的undospace总结

undospace总结
1.概念
从概念上讲,undo与redo相对,你在执行dml(insert,delete,update,merge)中时,数据库会生成undo信息,万一你执行的事务失败,或者如果你用一条rollback语句请求rollback时,就可以利用这些undo信息将数据放回到修改前的样子。undo在数据库内部存储在一组特殊的段中叫undo(自动管理时) 段(手动管理时,dba create rollback段)。
undo data是,原始的,修改前的数据的一份copy.捕获每个事务的改变数据(captured for every transaction that chages data)至少在事务结束前,保存undo data
2.作用
1)rollback operation
2)读一致查询
读一致查询提供与查询开始时的一致数据,为了能够成功执行一致查询,原始数据必须存在undo information中。只要undo information还在存在。oralce数据库就能重构数据从而成功执行一致查询

3)回闪查询
回闪查询是指故意查询过去某时间存在的某一数据版本(flashback queried are quries that pupposely ask for a version of the data as it existed at some time in the past),只要过去某一时间的信息仍然存在undo信息中,flashback查询才能成功执行

4)恢复失改的事务
由于各种原因(或者网络问题),一个失败事务产生了,当一个user在决定提交或者rollback之前,user session被强制结束时。失败事务也有可能是由于实例crashe产生的。 在这种情况下,选择最安全的行为执行,oracle数据库退回所有这个user所作的修改,重新保存原来修改前的数据。
所有事务的undo信息都被保留,至少在事务以以下方式结束前都会被保留。
user roll back
user commit
user session 强制中止(系统rollback)
user session 正常退出中止(系统commit)

undo data 的数量和被保存的时间,由数据库活动的数量和数据库配置决定(undo_retention) the amount of undo data that is retained and the time for which it is retained depend on the amount of database activity and the database configuration

3.undo与undo 段,undo表空间的关系
 一个事务只能被分配到一个undo段,一个undo段可以为多个事务服务,查询哪个事务在哪个undo段中,v$transaction undo表空间,只能被undo段使用,有特别的recovery考虑。只能与一个实例相联,在一个给定实例的任何给定时间,只有一个undo表空间为当前可以undo表空间

4.监控undo
undo通常只需要一点的管理,这些监空的地方包括:
  1)undo表空间不足
     undo信息总是一直保留着直到事务结束,这也意味着,如果在极端大量的数据被删或者更新(insert操作消费很少的undo space,因为inserted data的原来的值是空)
而且没有提交的情况下,undo tablespace必须用相同大的小的空间去保存原来的数据。假设删除一条有50gb的表。那么undo tablespace要求有50gb的空间为保存原来的数据信息,为了一旦发出这个语句的user改变主意,想rollback它的改动。当undo tablespace用光它空间。user会收到ora-01650.proactive monitoring detects space problems in an undo tablespace before they affect users.
查询undo的使用情况
  v$rollstat
  v$undostat
  dba_undo_extents

  2)ora-01555 snapshot too old错误
    当查询需要访问一个已经被重写了的undo informantion时会出现ora-1555.这个可能发生在一个跑很长时间的查询或者一个flashback查询。
这个可能发生是由于oracle 认为user使用开始查询时存在的一致数据视图。如果有没有被提交的修改了的数据表被查询,oralce将会读undo data以取得已commited的数据版本,这就是读一致。如果查询跑了很长时间,以致于在这期间,这些修改确实提交了,随后它们的undo数据被释放和重写,然后这个长时间查询不可能再看到,它开始查询时的一致数据图由于这些原因,undo retention应该配置成适应最长的查询

5.Administering Undo
 推荐使用自动undo管理,通过设置undo_management初始化参数为auto设置,手动管理只是为了向后兼容而已,而且它需要更多的人工干涉。使用自动undo管理。只需要设置undo_tablespace初始化参数。指定了undo tablespace后,管理员只需要考虑提供sufficient space和配置undo retention interval即可了手工管理的不作说明了

6.配置un_retention
undo_retention指定(以秒为单位)已经提交的应该被保存的undo信息的总计也就是committed的信息应该被保存多长时间,undo_retention指定了undo保留的最低极限
  1)undo tablespace使用autoextend选项
  2)want to set undo retention for lobs
  3)want to guarantee retention

 对于autoextend undo tablespace,系统至少保留指定参数时间的undo信息,而且自动tune the undo retention period to meet the undo requirements of the queries.对于固定大小的undo tablespace,系统自动的tune for the maxinum possible undo retention period on the basis of undo tablespace size and usage history.它会忽略undo_retention除非retention guarantee is enabled.对于自动undo管理,以上三种情况,undo_retention 设置才会被使用,除了以上三种情况,这个参数被ignored.

7.undo 状态

1)uncommitted undo information:
支持当前的running的事务。没提交的事务不会被overwritten. 查询dba_undo_extents表中的status字段为uncommitted.v$transaction当前正在跑的事务
2)committed undo information(committed但仍在undo_retention范围内的):
不再需要支持一下running的事务,但是仍需要meet the undo retention interval.也被称作 没过期的undo 信息,当不会由于lack of space时,这个状态的undo 信息会被保存,如果导致lack of space会overwirrten这些undo information 查询dba_undo_extents表中的status字段为unexpired
3)expired undo information:(超过undo_retention的为expired)
expired undo information is overwritten when space is requried by an active transaction. 查询dba_undo_extents表中的status字段为expired

8.Guaranteeing Undo Retention
默认的undo行为是:重写提交物事务(可能还没过期),而不是允许一个活动事务执行失败由于不够undo space.这个行为可以通过guaranteeing retention改变。 即,undo retention settings是被强制执行的,即使会导致活动事务失败。 retention guarantee是一个undo tablespace的属性而不是一个初始化参数,而且这个属性只能通过sql command改变。语句如下:
  alter tablespace undotbas1 retention guarantee;
还原原来的设置
alter tablespace undotbs1 retention noguarantee;

9.Sizing the Undo Tablespace
UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)
1)(UR) UNDO_RETENTION in seconds
2)(UPS) Number of undo data blocks generated per second
3)(DBS) Overhead varies based on extent and file size(db_block_size)
或者这样写法
SELECT (UR * (UPS * DBS)) + (DBS * 24) AS “Bytes”
FROM (SELECT value AS UR FROM v$parameter WHERE name = ‘undo_retention’),
(SELECT (SUM(undoblks)/SUM(((end_time - begin_time)*86400))) AS UPS FROM v$undostat),
(select block_size as DBS from dba_tablespaces where tablespace_name=
(select value from v$parameter where name = ‘undo_tablespace’));

10.创建undo表空间
注意虽然你可以在oracle创建多个undo tablespace,但是数据库在某一时间只会用一个undo tablespace,所以多建undo tablespace并不能给带来什么好处 以下是create undo tablespace的好处
create undo tablespace undotbs02 datafile 'undotbs01.dbf' size 100m resuse AUTOEXTEND ON;
以下是在spfile中修改当前的undo tablespace为刚新建的 undotbs02
alter system set undo_tablespace=undotbs02 scope=both
注意以上语句scope最好是为both或者spfile不然的话这个修改不会放到spfile中下次启动会出错的.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值