第九讲回滚表空间二零一零年六月目标学习此章,需要掌握以下知识:了解回滚表空间的基本概念和作用了解回滚表空间的工作原理知道回滚表空间的管理知道如何查看回滚表空间的信息相关概念回滚让数据恢复到指定(或上一个)时点。通俗地说,就是让数据回退到某个DML操作之前的状态回滚数据原始的、修改之前的数据副本为更改数据的每个事务处理而捕获至少保留到事务处理结束用于支持读一致性和闪回查询,以及从失败的事务处理中进行恢复。相关概念(续)回滚数据重做数据记录如何回滚更改如何重新生成更改用于回滚、读取一致性向前滚动数据库更改存储回滚表空间(回滚段)联机重做日志文件避免在多用户系统中读取不一致数据丢失概述用于保存和管理回滚数据不能包含其他对象必须使用本地管理的模式一个数据库中可以没有回滚表空间,也可以有多个回滚表空间,但是一次只能有一个回滚表空间被指定为可写入回滚数据的当前还原表空间。工作原理应用保证读一致性回滚段的分类System:为system表空间中的对象使用。Non-system:为其他表空间中的对象使用自动模式:需要回滚表空间手动模式:手动建立rollbacksegment并进行管理private:适用于单一实例public:适用于多个实例不推荐使用手动模式回滚表空间大小的设置由三个因素决定:undo_retention(UR),每秒产生的回滚数据块的数目(UPS),db_block_size(DBS)UndoSpace=UR*(UPS*DBS)+DBS*24利用查询来获得:回滚表空间大小的设置(续)利用DatabaseControl所提供的UndoAdvisory来帮助估算自动回滚管理概述回滚数据(undodata)在回滚表空间中管理。为每个实例分配足够的空间创建回滚表空间来满足数据库的负载。Oracle服务器自动在回滚表空间中管理回滚数据。自动回滚管理配置在初始化参数文件中设置两个初始化参数:UNDO_MANAGMENT:根据需求可设置为ATUO或者MANUALUNDO_TABLESPACE:指定一个undo表空间至少创建一个回滚表空间回滚信息分类未提交的回滚信息:支持当前运行的事务处理,如果用户要回退或事务处理失败时,需要用到这类信息。绝对不会覆盖未提交的回滚信息。提交的回滚信息:不再需要用来支持运行的事务处理,但是为了符合还原保留期间隔,仍然要用到这类信息。这也称为“未过期”回滚信息。当不是因为缺少空间而导致活动事务处理失败时,就会保留提交的回滚信息。过期的回滚信息:不再需要用来支持运行的事务处理。活动事务处理需要空间时会覆盖过期的回滚信息。回滚保留期(undoretention)当启用自动回滚管理的时候,通常有一个当前的回滚保留期(undoretentionperiod),这是oracle数据库默认的保留回滚信息的最短时间。由参数undo_retention指定。回滚保留期(续)若回滚表空间的大小固定忽略undo_retention,oracle会根据表空间的大小和当前系统的装载量确定最好的回滚保留期。当表空间剩余空间低的时候就可能覆盖未过期的还原信息。若回滚表空间是自动扩展的oracle会把回滚保留期的时限提高到最长查询之上,并尝试保证由undo_retention参数指定的最小回滚保留期当回滚表空间剩余空间低的时候,表空间会自动扩展而不是覆盖未过期的回滚数据。如果自动扩展的回滚表空间设置了最大值,则表空间达到最大值后还是会覆盖未过期的还原数据ORA-01555:snapshottooold报错Oracle数据库基于回滚表空间的大小和系统的活动自动调整撤销保留期的大小。可以通过制定初始化参数UNDO_RETENTION(秒级)来制定最少的回滚保留期。数据库会尽自己最大的努力来保证指定的最小的回滚保留期。当分配给新交易的空间变小的时候,数据库开始覆盖过期的回滚信息。如果回滚表空间在覆盖了所有过期的信息之后依旧没有剩余空间,数据库就开始覆盖未过期的回滚信息。如果被覆盖的回滚数据在长时间查询中需要被访问,就会返回ORA-01555:snapshottooold的报错。查看回滚保留期确保回滚保留期(RetentionGuarantee)创建回滚表空间CREATEDATABASEdb01...UNDOTABLESPACEundo1DATAFILE'/u01/oradata/undoldb01.dbf'SIZE20MAUTOEXTENDONCREATEUNDOTABLESPACEundo1DATAFILE'/u01/oradata/undo1db01.dbf'SIZE20M;第一种方法:创建数据库时直接创建第二种方法:使用CREATEUNDOTABLESPACE创建修改和删除回滚表空间使用altertablespace命令,和修改一般的表空间一样使用DROPTABLESPACE命令删除undo表空间一个undo表空间只有当前没有任何实例使用的时候才能被删除。删除一个当前活动的undo表空间:将当前activeundo表空间切换出去。在当前所有交易结束之后将undo表空间删除。切换回滚表空间可以在多个回滚表空间之间进行切换。一个数据库一次只能声明一个回滚表空间。一个数据库中可以存在很多回滚表空间,但是只有一个表空间是active状态。使用ALTERSYSTEM命令动态实现表空间切换。ALTERSYSTEMSETUNDO_TABLESPACE=UNDOTBS查看回滚信息V$UNDOSTAT视图包含了管理和优化回滚空间的数据。查看此视图能帮助估计出对当前工作负载需要多少回滚空间。数据库也用此信息来帮助优化回滚空间使用率。这种视图只有在自动回滚管理模式下才有意义。V$ROLLSTAT视图,在自动回滚管理模式下,此视图的信息反映了在回滚表空间中回滚段的行为。V$TRANSACTION包含了回滚段的信息。DBA_UNDO_EXTENTS显示了回滚表空间中每个区的状态和大小。DBA_HIST_UNDOSTAT显示了V$UNDOSTAT的快照信息。总结通过本章的学习,应达到:了解回滚表空间的基本概念和作用了解回滚表空间的工作原理知道回滚表空间的管理知道如何查看回滚表空间的信息