撤销表空间

------------------------撤销表空间特性

撤销表空间有助于逻辑事物的回滚,此外,撤销表空间支持大量其他的特性,包括读一致性,各种数据库恢复操作以及闪回功能。

1.回滚:当DML命令对表进行改动时,DML命令改变的旧数据值记录在撤销表空间中,即系统管理的撤销段或回滚段。
       回滚整个事物时,oracle使用对应的撤销记录来撤销从事物开始以来DML命令进行的所有改动,释放受影响行上的锁,并且事物结束。
2.读一致性:如果用户正在读取涉及另一个用户的DML事物中的记录,那么撤销为这些用户提供了读一致性。
撤销段用于重新构造后退到读一致版本中的数据块,并且最终将行中先前的值提供给在事物提交前发生select语句的任何用户。
如果没有足够的撤销空间用于保存改动行先前的值,发出select语句的用户就可能收到ora-01555 snapshot too old错误。
撤销段不仅允许回滚未提交的事物,它还提供了长期运行查询的读一致性,这些查询在表上进行插入,更新,和删除之气哪开始执行,dba控制读一致性的撤销空间数量。
并且将其指定为oracle将尝试保证“前像”数据可用于长期运行查询的秒数。
3.撤销表空间也是实际恢复的关键组成部分,联机重做日志和未提交的事物带入到实例崩溃的时间点,撤销数据用于回滚或实例失败时没有提交的任何事物。
4.撤销表空间中的数据用于支持各种类型的闪回选项。
       flashback table 可将表恢复到以前的某个时间点
       flashback query 可查看scn时刻或过去某个时间中的表
       dbms_flashback 为闪会操作提供了可编程接口

创建并维护撤销表空间就是一项“设计然后忘记它” 的操作
在撤销表空间中,oracle自动创建,调整大小,并管理撤销段。

-----------------------------------------撤销表空间的初始化参数

 (1)undo_management 分别是manual(默认)和auto可将数据库置于自动撤销管理模式。不是动态参数,修改值时需要重新启动实例.
 (2)undo_tablespace指定哪些撤销表空间将用于自动撤销管理。
在数据库创建undo表空间,这样就大大简化了对这些事物的管理,为了利用自动撤销管理。可以在数据库中创建undo类型的表空间。
如果没有指定undo_management或将其设置为manual,并指定了undo_tablespace,实例将不会启动。
如果undo_management设置为auto,并且数据库中没有任何撤销表空间,实例将会启动,但是system回滚段将用于所有撤销操作,并且一条消协写入到警报日志,
此外,任何尝试在非system表空间中进行改动的用户DML将收到错误消息。ora-01552
 (3)undo_retention 初始化参数用来指定撤销数据被提交之后保留在表空间中的时间值。(秒)该值只有在撤销表空间中有足够的空间来支持读一致性查询时才有效。
优点:因为不同于传统的回滚段,数据库至少会尝试为长期运行的查询维护较早版本的数据;如果您遇到没有维护足够撤销信息的问题,只需要向表空间添加更多的空间,并且增加undo_retention的值。
然而主语的是如果表空间上没有足够的保存撤销记录的空间,它就会根基需要重新使用哪些未终止的撤销表空间,而不考虑undo_retention的值。

如果使用自动撤销管理,则不可以使用特定的回滚段。
undo_retention该参数确定撤销保留的低阈值,系统将至少在该参数指定的时间内保留撤销。
当设置参数undo_retention为0时,10g自动调整撤销保留以减少在长期运行的查询期间产生“快照过旧”的错误机会
当undo_retention为0时,撤销保留的最小值是900s。MMON后台进程将每隔30分钟计算最长运行查询的长度,即maxquerylen,使用计算得出的值,MMON将调整tuned_undoretention.并且undo_retention将设为tuned_undoretention.

 (4)retention guarantee
虽然undo_retetion参数或增加撤销表空间的大小可以帮助确保撤销块用于读一致查询。但撤销表空间的另一个特性确保查询能够运行直到成功。retention guarantee。
撤销保留保证设置在表空间级别,并且可用在任意时刻改动,为撤销表空间设置保留保证可确保表空间中未到期的撤销被保留。即使这意味着DML事物可能没有足够的撤销表空间来成功完成
alter tablespace undotbs1 retention guarantee;
--------------------------------------------撤销表空间类型
撤销表空间中有3种类型的撤销数据:活动或未到期的,到期,未使用。
1.活动的或未到期的时读一致性需要的撤销数据,即使在事物已经执行以后,一旦需要活动撤销数据的所有查询已完成,并且到达撤销保留周期,活动的撤销数据就变成到期的撤销数据。
2.到期的撤销数据仍然可以用于支持其他oracle特性,例如闪回特性,但它不再需要支持长期运行事物的读一致性
撤销表空间的最小大小是保存所有未提交或未回滚事物中所有数据的前像版本所需的空间。如果分配给撤销表空间甚至不能支持对未提交事物的改动,从而不支持回滚操作。则得到ora-30036
dba必须增加撤销表空间的大小,或作为一种暂时的方法可以将一个较大的事物划分为较小的事物。

---------------------------------------------监控undo空间
1.v$undostat 视图可用于监控实例中当前事物使用undo空间的情况。视图中的每行列出了每隔十分钟从实例中收集到的统计信息。
             每行都表示了在过去24小时里每隔十分钟undo空间的使用情况。 事物量和查询长度等信息的统计快照。
2.V$rollstat 视图也可以显示undo表空间中撤销段的信息,前提时在自动撤销管理模式下
3.dba_undo_extents 数据库中的所有撤销段包括他们的大小,盘区,驻留的表空间以及当前状态(expired或unexpired)

手工计算撤销表空间大小 p209
撤销表空间的切换。


----------------------------------------------自动撤销管理

TUSC建议尽可能地使用自动撤销管理。以这种方式配置时,数据库以要运行的时间查询为基础,自动确定保存撤销数据的时间。
据说保存在时间窗口内的撤销数据处于未终止状态。这个时间之后,撤销数据的状态就改变为终止。撤销数据只有当处于终止状态时才是重写最好选择。
oracle将撤销数据保持在未终止状态下的时间长度取决于表空间的配置。使用数据库配置助手(DBCA)创建数据库时,撤销表空间被设置为默认自动扩充子句,为运行时间最长的查询维护未终止的撤销。
使用固定大小的撤销表空间时,oracle自动将指定大小的表空间的撤销数据尽可能长时间地保持在未终止状态。
如果撤销表空间没有足够的空闲或终止空间来保存由当前事情生成的活动的撤销数据,那么oracle可能被迫重写未终止的撤销数据。这种情况可能导致长时间运行的查询失败,并会发出错误或警报。

在不可能使用自动撤销管理的情况下,可以激活自动扩展,这需要手动调整表空间的大小。在这种情况下,要确保表空间足够大,足以满足长时间运行查询读操作一致性的需要。
如果使用闪回特性,就要确保表空间足够大,能够容纳闪回操作。

下面列举的查询评估在不同条件下调整撤销表空间大小时所需的字节数。
下面的信息适用于撤销查询A,B,C。调整撤销表空间大小需要3个方面的信息:
1)(UR)UNDO_RETENTION,以秒计
2)(UPS)每秒生成的撤销数据块数量
3)(DBS)依据范围和文件大小变化的系统开销(db_block_size)
undospace=(ur*(ups*dbs)+dbs)或者,当估计的数值等于0时,就可以给系统开销(DBS)添加一个乘数(24),以便得出更合理的结果:
undospace=[ur*(ups*dbs)]+(dbs*24)
可以初始化文件undo_retention和db_block_size中获得这两个方面的信息。第三块公式需要查询数据库。每秒生成的撤销数据块数量可以从v$undostat视图中获得。如下所示
select (sum(undoblks))/sum((end_time-begin_time)*86400) from v$undostat;
要将天数转换称秒数,可以乘以一天的秒数86400.查询结果返回每秒撤销数据块的数量。这个值需要乘以每个撤销数据块的大小,这个大小与db_block_size中定义的数据库数据块的大小线条。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值