08-Oracle_10g_Undo表空间管理.ppt_第1页
08-Oracle_10g_Undo表空间管理.ppt_第2页
08-Oracle_10g_Undo表空间管理.ppt_第3页
08-Oracle_10g_Undo表空间管理.ppt_第4页
08-Oracle_10g_Undo表空间管理.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,对于DML语句,只要修改了数据块,Oracle数据库就会将修改前的数据块保留在undosegment中,而undosegment会将数据块保留在undo表空间中。2、undo管理1、autoundo管理(从Oracle9i开始)AUM2、手动undo管理MUM9i后,建议使用AUM。因此,不再讨论MUM。一条DML语句的执行进程updatetsetcoll= a where Coll= B 1,在sharedpool中进行语法分析,执行计划2,根据执行计划,记录Coll= B B 10是数据文件的543、服务器进程首先在buffercache中查找可用的undo数据块(如果提交了任何内容,则此事务处理中使用的undo数据块可用);如果没有找到,则在undo表空间中查找可用的undo数据块,然后将其移动到bufferth。在undo数据文件中,将生成的undo块号设置为24,将更改前的值设置为4,将b设置为24 undo数据块(buffercache) 5。如果undo数据块已更改(如果数据块已更改,则创建重做记录),并创建重做记录(假设重做记录号为120)6,假设在缓冲区高速缓存中找到块54,如果没有,则从数据文件10转入7次,更改值(即a放在块8 54上,块更改,重做记录号121,9次,控制返回给用户),使用SQLPLUS时游标10次,假设用户发出commit命令,从而生成重做记录。触发LGWR将120、121条重做记录写入联机重做日志文件,将写入到块头54和24的事务处理状态设置为已提交,将控制权返还给用户,如果使用SQLPLUS,则光标11、54和24条数据块不一定会被DBWr写入数据文件。此公司使用的Undo数据块仅在脏块数达到一定水平时被复盖。在上例中,步骤10的用户提交后,第24个undo数据块将被复盖。undo的角色1、提供读取运行2、回滚事务3、实例恢复、读取一致性方案说明读取一致性相对较脏的读取,表t中有10,000条记录,需要15分钟获取所有记录,当前时间9点整,用户将发出在9: 15完成的select*fromT命令。如果用户在9: 10分钟运行此语句,其他用户就发出了删除并提交最后一条记录的删除命令。到9点15分为止,用户返回了多少记录。9999个是脏读,10000个是读一致性。Oracle如何在没有脏读、读一致性和阻塞DML操作的情况下实现读一致性?1,如果用户在9:00发出select语句,服务器进程将记录使用时间(timestamp)作为参数的SCN编号(SCN编号),调用函数(默认情况下将timestamp指定为参数)可以随时返回此时间的SCN编号,您可以使用此函数在SCN和timestamp之间转换假定SCN编号为SCN9.00,则SCN9.00必须大于所有数据块头的ITL插槽中记录的SCN编号(如果存在多个ITL插槽,则SCN为最大值)。2,服务器进程扫描t表时,将比较扫描数据块头的ITL插槽中的SCN编号和SCN9.00。如果块头的SCN小于SCN9.00,则在9: 00之后块未更改时可以直接读取;如果块头的SCN编号大于SCN9.00,则在9.00之后块已更改,并且数据在9.00以外的时间更改,则使用undo块3,9: 10,用户更改并提交t表中的最后一条记录(无论是否提交)。每次t表更改时,用户都将读取undo数据块。假设区块n变更,写入区块n标头之ITL插槽的SCN会修改为SCN.910,您会发现伺服器处理作业扫描此资料区块时,ITL插槽的SCN9.10大于SCN9.00。也就是说,由于在9.00之后更新了块,服务器进程将以块n的头部查找SCN9.10所在的ITL插槽。ITL插槽记录该undo块的地址,因此服务器进程找到undo数据块,并与undo数据块一起为用户提供读一致性。问题1,9:10,更新和提交数据,在9:11更新和提交块(假定块中只有一个ITL插槽)2,此ITL插槽记录SCN9.113。处理这种情况的方法在工发组织块中。但是,除了更改前数据记录外,数据块的ITL插槽也发生了更改,因此数据已写入,ITL插槽中记录的undo块的地址为9: 00,数据块的SCN为8.50和相应的undo块,9.10分钟时,数据块写入数据库的ITL插槽中的SCN为9.10和相应的undo(undo 1)9.9 Undo1记录早于9点的数据和早于9点的撤消数据,服务器进程在用户查询期间扫描数据块n次,然后扫描大于SCN9.11的SCN9.00,ITL插槽中撤消数据块的地址(undo2),undo2记录更改前数据和更改前数据库的ITL插槽,与Undo2对应的SCN是9.10还是9 使用此undo的数据在以后查找时,如果SCN找不到小于9.00的数据(由于时间较长且事务已提交,回滚段可能会被复盖),数据库中将出现经典错误ORA-1555(快照工具),但不会发生脏读取。最重要的是,数据块中的数据发生了变化,ITL插槽也发生了变化。这两种信息都存储在undo中。因此,如果一个undo足够大,则可以序列化一个块中的所有undo数据块。从最近开始一直能找到很远的过去。从数据块开始向前查找,一直查找很久以前的SCN。你可以找到这个数据块的所有变化。在ITL插槽中写入此数据块的undo数据块的地址。一个数据块中存储了大量数据,update、insert、delete等DML操作会影响数据块的SCN号。数据块的SCN号反映数据块的更改过程。回滚事务:错误或rollback命令根据ITL插槽中记录的undo数据块的地址查找undo数据块并恢复数据。实例恢复回滚段的头部记录了事务表,并存储了诸如是否提交了每个事务等信息。基于事务处理表中的信息恢复实例。AUM配置AUM需要配置两个参数。从Oracle9i开始,不再使用手动管理方法,因此manual已过时,使用“auto”指定两个参数,然后让Oracle处理其馀任务,如创建undosegment、展开、折叠、删除等。如果指定了undo_management,但指定了undo_tablespace时指定了无效的回退表空间,则在启动实例时报告错误。如果未指定回退段表空间,系统将查找第一个可用的回退段表空间,否则将使用system表空间中的回退段,因为这将对性能产生重大影响。因此,两个参数都要好好计划。事务,如果undosegment中发生DML操作,则服务器进程会首先尝试将一个事务绑定到每个undosegment,然后再绑定到每个undosegment。也就是说,如果每个undosegment仅使用一个事务处理2,并且找不到完全空闲的undosegment,则所有undosegment都绑定到事务处理3,系统尝试将脱机的undosegment联机4,如果没有可用的undosegment,则系统会尝试将新的undosegment联机如果上述步骤不成功(例如,没有可用空间,无法生成undosegment),算法将尝试查找最旧的undosegment。在这种情况下,如果多个不同的事务在同一undosegment中同时收缩6,12个小时,删除处于该idle状态的extent7,发现DML操作需要undo时空间不足,并唤醒SMON以缩小,则会导入undosegment中暂时未使用的extent。在Oracle提供一致读取的过程中,下一步是检查读取时的SCN2,如果所有数据块检索的SCN要求小于读取时的SCN3,如果检索的SCN小于读取时的SCN,则直接读取4,如果检索的SCN大于读取时的SCN,则根据块内ITL插槽中记录的undo信息,将ITL插槽设置为更改前的数据、SCN或大小当我们寻找undo资料区块时,找到的这个undo资料区块很可能已经确认,因此ORA-1555错误是不可避免的。Oracle如何解决此问题?Oracle定义了undo_retention参数,该参数指示在提交或回退事务后,该公司使用的undo块中的数据必须保留多长时间(以秒为单位)。Undo块在超过undo_retention中指定的时间之前,不会被其他事务复盖。使用AUM并设定undo_retention时,undo图块的状态有四种:Active。也就是说,使用该块的事务未提交,或回滚Inactive:该块中没有活动的事务。处于该状态的undo可以用其他事务复盖Expired。也就是说,该块处于不活动状态的时间比undo_retention中指定的时间长。Freed:此块为空且从未使用过,在AUM模式下,事务可以在其他undosegment之间动态交换undo空间。也就是说,可以在其他undosegment中交换extents。当一个事务处理需要更多的undo空间时如何处理?1、undo表格空间中可用的空白extents汇入(segment的最小配置单位为extent)2、其他undosegment中expired状态的extents3汇入、undo表格空间中的资料档启用自动扩充时的资料档自动扩充4,以及undo表格空间中的资料档未启用自动扩充时的资料档1、undo表空间中总共有5个undosegment2,每个undosegment有7个extents3,如果使用US5的事务处理需要更多空间,则首先使用具有2个f状态的extent。如果还不够,则继续使用US4中3f状态的extents;如果不够,则继续使用US3中x状态的extents;如果不够,则继续使用US1中I状态的extents;如果不够,则报告空间不足错误。假设上述数据文件未配置为自动扩展,则1,在AUM内分配extent的方法是有效的,可以避免在范围内使用I状态。2、如果Oracle10g中有足够的undo表空间,Oracle会将undo信息与当前运行时间最长的查询保持相同的时间(尽量避免ora-1555的优点)。3,默认情况下,Oracle每30秒收集一次统计信息,自动调整undoretention。收集的信息包括运行时间最长的查询生成undo的速度。如果将undo_retention设置为0(零),则使用上述自动调整功能,并且最小undo_retention设置为900秒,则此参数将用作undo_retention的值,不再支持动态调整undo_retention。4,如果将undo_retention设置为0,实例将获取运行时间最长的相应查询的占用时间(如n秒),然后将undo信息保留n秒,如果undo表空间大小太大,无法保留此最长时间,则充分利用现有空间,将undo保留的时间保留得尽可能长,除非要复盖的undo信息发生在900秒内、管理undo表空间1、添加数据文件、重命名数据文件以及联机或脱机数据文件等常见操作与常规表空间操作不同。您可以使用EM执行作业2,资料库中可以有一个以上的undo表格空间,但一次只能使用一个undo表格空间,并且可以使用undo_tablespace参数指定一个undo表格空间。在这种情况下,如果执行undo表空间的切换1,并且旧表空间中的事务处理正在运行,则旧表空间将成为pendingoffline。2、用户事务处理正常运行,切换操作结束,不等待旧undo表空间中的事务处理结束3、切换后所有新办公室生成的undo数据不保留在旧undo表空间中,而是不能使用新undo表空间4、状态为pendingoffline的undo表空间5、提交旧undo表空间中的所有事务处理后,旧undo表空间为pendingoffline 但是,由于可能会发生ORA-1555错误,因此建议您等待超过undo_retention,然后删除表空间,显示当前活动的事务处理

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论