表的在线重定义方法介绍及使用DBMS_REDEFINITION包案例讲述.docx

表的在线重定义方法介绍及使用DBMS_REDEFINITION包案例讲述.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
表的在线重定义方法介绍及使用DBMS_REDEFINITION包案例讲述

表的在线重定义方法介绍及使用DBMS_REDEFINITION包案例随着技术的发达,业务的要求也越来越高,一般的数据库都会承载7X24不间隔业务运行。我们有时候需要对表做一些结构上的调整,比如增加/删除一个字段,修改一个字段等DDL操作,而这种操作对于7X24运行的业务的话,如果采用方法不对,可能对数据库就是一个灾难。以下列出解决此问题的方法并详细介绍DBMS_REDEFINITION包的功能。直接使用alter table的方法。创建临时表,删除原表,改表名,创建索引/约束/触发器。使用DBMS_REDEFINITION包进行。第1种方法最明显的优点就是操作简单,一条命令就搞定,节约空间,不需要额外存储。但是对于小表来说可行,对于大业务的大表来说,有可能就是一场灾难,因为在使用这个方法的时候会对整个表加排他锁,会导致所有对该表的操作均处于等待,而大表做此操作往往需要很长的时间,长时间对表加排他锁,其他操作的等待会一直累积,造成的后果小则业务不响应,大则系统hang住,所以此法需要慎用,仅用于小业务的小表上。第2种方法解决了第1种方法的绝大多数问题,表数据仅在删除原表和改表名之间不可用,而这个过程非常短,所以其解决了对表加排他锁的问题。但是其操作相对比较复杂,需要提前做好每步的内容;需要即时将约束和触发器建上,不然可能影响业务的正确性和一致性;在创建索引完成之前,整个表的访问均走全表扫描,可能会导致大量的IO,从而影响业务执行效率;需要至少2倍表大小的存储空间,在创建临时表时,原表也同时存在。这种方法可以用于业务量不是很大的表上,不过需要提前准备好创建索引,约束,触发器的脚本!第3种方法是ORACLE自带的一种工具包,专门用于进行表的重构。该种方法中和了前2种方法的优点,能最小化对系统的影响,仅在最后完成重定义一步会对表加排他锁,而这一步耗时也相对较小。该方法需要至少2倍表和索引大小的存储空间,相对第2步增加了索引的存储空间。并且需要DBA给予用户执行DBMS_REDEFINITION包的权限。在大业务的大表上请使用此种方法。下面详细介绍一下如何使用DBMS_REDEFINITION包进行表的重构。大体步骤为:1)准备工作包括表结构,表记录数,表存储大小,表所在的表空间大小,表上的索引,表上的约束,表上的触发器,触发器中表的数据,失效对象2)在线重定义2.1)检查是否可以在线重定义2.2)创建中间表2.3)开始重定义2.4)拷贝依赖对象2.5)完成重定义3)核查工作包括表结构,表记录数,表存储大小,表所在表空间大小,表上的索引,表上的约束,表上的触发器,触发器中表的数据,失效对象下面展示一个真实的案例:准备工作查看表的基本信息desc WMCADMIN.COLORRINGINFO_RELATIONselect count(1) from WMCADMIN.COLORRINGINFO_RELATION;select TO_CHAR(dbms_metadata.get_ddl(TABLE,COLORRINGINFO_RELATION,WMCADMIN)) FROM DUAL;查看表以及索引情况select bytes/1024/1024,tablespace_name from dba_segments where owner=WMCADMIN AND SEGMENT_NAME=COLORRINGINFO_RELATION;select idx.owner,index_name,index_type,IDX.tablespace_name,bytes/1024/1024,status from dba_indexesidx, dba_segmentsseg where idx.owner=seg.owner and idx.index_name=seg.segment_name and idx.owner=WMCADMIN AND IDX.TABLE_NAME=COLORRINGINFO_RELATION;总共需要空间:表空间还剩select sum(bytes)/1024/1024 from dba_free_space where tablespace_name=BUSIDATA0;表空间剩余足够。查看约束和触发器情况selectconstraint_name,constraint_type,SEARCH_CONDITION,status from dba_constraints where owner=WMCADMIN AND TABLE_NAME=COLORRINGINFO_RELATION;??selecttrigger_name,trigger_type,triggering_event,status from dba

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档