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

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

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

表的在线重定义方法介绍及使用DBMS_REDEFINITION包案例随着技术的发达,业务的要求也越来越高,一般的数据库都会承载7X24不间隔业务运行。我们有时候需要对表做一些结构上的调整,比如增加/删除一个字段,修改一个字段等DDL操作,而这种操作对于7X24运行的业务的话,如果采用方法不对,可能对数据库就是一个灾难。以下列出解决此问题的方法并详细介绍DBMS_REDEFINITION包的功能。直接使用alter table的方法。创建临时表,删除原表,改表名,创建索引/约束/触发器。使用DBMS_REDEFINITION包进行。第1种方法最明显的优点就是操作简单,一条命令就搞定,节约空间,不需要额外存储。但是对于小表来说可行,对于大业务的大表来说,有可能就是一场灾难,因为在使用这个方法的时候会对整个表加排他锁,会导致所有对该表的操作均处于等待,而大表做此操作往往需要很长的时间,长时间对表加排他锁,其他操作的等待会一直累积,造成的后果小则业务不响应,大则系统hang住,所以此法需要慎用,仅用于小业务的小表上。第2种方法解决了第1种方法的绝大多数问题,表数据仅在删除原表和改表名之间不可用,而这个过程非常短,所以其解决了对表加排他锁的问题。但是其操作相对比较复杂,需要提前做好每步的内容;需要即时将约束和触发器建上,不然可能影响业务的正确性和一致性;在创建索引完成之前,整个表的访问均走全

文档评论(0)

1亿VIP精品文档

相关文档