博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle 11g 通过在线重定义方式修改表结构
阅读量:5158 次
发布时间:2019-06-13

本文共 2992 字,大约阅读时间需要 9 分钟。

今天因为要对一套数据库的数据抽取进行io优化,希望通过修改表结构将抽取io降下来,因为抽取只针对标签HAVE_FLAG为“0”的值进行抽取,抽取之后更新HAVE_FLAG为其他值,所以计划将HAVE_FLAG在时间分区里面再按照“0”和其他值进行list分区,控制SQL扫描的范围,再配合索引,降低IO。

准备工作

提取表和索引的语句。

SELECT DBMS_METADATA.GET_DDL(OBJECT_TYPE => 'TABLE', NAME => 'CONTACT_CLSLIST') ||  DBMS_METADATA.GET_DEPENDENT_DDL(OBJECT_TYPE => 'INDEX',  BASE_OBJECT_NAME => 'CONTACT_CLSLIST') FROM DUAL ;

根据生产表的结构修改中间表

CREATE TABLE "INCRCBPS8"."CONTACT_CLSLIST_TEST"   (    "CUST_ID" NUMBER(38,0),        "CONTACT_SEQ" NUMBER(38,0),        "CONTACT_CLASS_SEQ" NUMBER(38,0),        "CONTACT_CLASS_CODE" CHAR(1),        "CONTACT_NO" VARCHAR2(680),        "CONTACT_EXT" VARCHAR2(680),        "FROM_BRANCH" VARCHAR2(30),        "TRANS_ID" VARCHAR2(60),        "COMMIT_TIMESTAMP" VARCHAR2(20),        "COMMIT_CSN" NUMBER,        "OP_SEQ" NUMBER,        "LAST_OP_FLAG" VARCHAR2(20),        "LAST_TIME" DATE DEFAULT SYSDATE,        "HAVE_FLAG" VARCHAR2(50) DEFAULT '0',        "HAVE_FLAG_1" VARCHAR2(50) DEFAULT '0',        "HAVE_FLAG_2" VARCHAR2(50) DEFAULT '0',        "HAVE_FLAG_3" VARCHAR2(50) DEFAULT '0',        "HAVE_FLAG_4" VARCHAR2(50) DEFAULT '0'   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255  NOLOGGING  STORAGE(  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)  TABLESPACE "CMDS"  PARTITION BY RANGE ("LAST_TIME") INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))  SUBPARTITION BY LIST ("HAVE_FLAG")  SUBPARTITION TEMPLATE (    SUBPARTITION "SUBP0" VALUES ( '0' ),    SUBPARTITION "SUBOTHER" VALUES ( default ) ) (PARTITION "P1"  VALUES LESS THAN (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255  STORAGE(  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)  TABLESPACE "CMDS"  NOLOGGING )

中间表创建完毕之后,创建相关索引

将步骤1的SQL中的表名CONTACT_CLSLIST替换为CONTACT_CLSLIST_TEST创建中间表

中间表新增字段remark01

alter table CONTACT_CLSLIST_TEST add remark01 varchar2(10) default 'A';

检查能否进行重定义,过程执行成功即说明可以重定义,因为测试表没有主键,所以要写上用rowid,如果有主键,就是CONS_USE_PK

beginDBMS_REDEFINITION.CAN_REDEF_TABLE('cmds','CONTACT_CLSLIST',DBMS_REDEFINITION.CONS_USE_ROWID);end;/

如果有主键,就是CONS_USE_PK

beginDBMS_REDEFINITION.CAN_REDEF_TABLE('cmds','CONTACT_CLSLIST',DBMS_REDEFINITION.CONS_USE_PK);end;/

开始重定义表

运行start_redef_table过程

BEGIN  dbms_redefinition.start_redef_table(uname => CMDS,orig_table => 'CONTACT_CLSLIST', int_table => 'CONTACT_CLSLIST_TEST', options_flag => DBMS_REDEFINITION.cons_use_rowid); END; /

开始同步中间表

BEGIN  dbms_redefinition.sync_interim_table(uname => 'CMDS',orig_table => 'CONTACT_CLSLIST',int_table => 'CONTACT_CLSLIST_TEST');  END;/

完成同步

BEGIN  dbms_redefinition.finish_redef_table(uname => 'CMDS',orig_table => 'CONTACT_CLSLIST',int_table => 'CONTACT_CLSLIST_TEST');  END;/

删除中间表

drop table CONTACT_CLSLIST_TEST;

修改索引名称

alter index "IDX_CONTACT_CLSLIST_NO_mid" rename to IDX_CONTACT_CLSLIST_NO;  alter index "IDX_CONTACT_CLSLIST_INDEX_mid" rename to IDX_CONTACT_CLSLIST_INDEX;

执行完以上的9个步骤,新增字段就创建成功了。

转载于:https://www.cnblogs.com/wangrongxin/p/5787539.html

你可能感兴趣的文章
查询数据库锁
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
面试时被问到的问题
查看>>
注解小结
查看>>
list control控件的一些操作
查看>>
判断字符串在字符串中
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
CSS属性值currentColor
查看>>
Real-Time Rendering 笔记
查看>>
实验四2
查看>>
多路复用
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
kubernetes_book
查看>>
侧边栏广告和回到顶部
查看>>
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
海上孤独的帆
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>