本文主要是介绍普通表在线重定义为分区表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
普通表在线转换成分区表示例
源表表结构如下:
CREATE TABLE EDC_SEPERATOR
(
SEPERATOR_ID NUMBER(15) NOT NULL,
EQUIPMENTINFO NVARCHAR2(20),
RECORD NVARCHAR2(50),
TITLE NVARCHAR2(50),
ID NVARCHAR2(50),
TESTDATE NVARCHAR2(50),
TESTTIME VARCHAR2(50 BYTE),
COMT NVARCHAR2(50),
OPERATOR NVARCHAR2(50),
CLASSIFIC NVARCHAR2(50),
BIN NVARCHAR2(50),
UOC NVARCHAR2(50),
ISC NVARCHAR2(50),
RSERIEC NVARCHAR2(50),
RSH NVARCHAR2(50),
FF NVARCHAR2(50),
ETA NVARCHAR2(50),
IREV2 NVARCHAR2(50),
TCELL NVARCHAR2(50),
TMONICELL NVARCHAR2(50),
INSOL NVARCHAR2(50),
UMPP NVARCHAR2(50),
IMPP NVARCHAR2(50),
PMPP NVARCHAR2(50),
JSC NVARCHAR2(50),
ENTITY_RRN NUMBER(15),
SORTER_SEQ NUMBER(15),
IMPORTTIME DATE,
DBIMPORTTIME DATE
)
在源表上面建立索引
CREATE INDEX INDX_EDC_SEPERATOR ON EDC_SEPERATOR(IMPORTTIME);
CREATE INDEX INDX3_EDC_SEPERATOR ON EDC_SEPERATOR(COMT);
开始在线重定义源表
如果有主键,基于主键重定义
BEGIN
DBMS_REDEFINITION.CAN_REDEF_TABLE('AHERN', 'EDC_SEPERATOR');
END;
/
没有主键,基于 row_id 重定义
BEGIN
DBMS_REDEFINITION.CAN_REDEF_TABLE('AHERN',
'EDC_SEPERATOR',
DBMS_REDEFINITION.CONS_USE_ROWID);
END;
/
首先创建重定义需要的中间表
注意:中间表创建为与源表表结构一致的分区表,以时间字段IMPORTTIME分区键,按月自动分区。
CREATE TABLE TMP_P
(
SEPERATOR_ID NUMBER(15) NOT NULL,
EQUIPMENTINFO NVARCHAR2(20),
RECORD NVARCHAR2(50),
TITLE NVARCHAR2(50),
ID NVARCHAR2(50),
TESTDATE NVARCHAR2(50),
TESTTIME VARCHAR2(50 BYTE),
COMT NVARCHAR2(50),
OPERATOR NVARCHAR2(50),
CLASSIFIC NVARCHAR2(50),
BIN NVARCHAR2(50),
UOC NVARCHAR2(50),
ISC NVARCHAR2(50),
RSERIEC NVARCHAR2(50),
RSH NVARCHAR2(50),
FF NVARCHAR2(50),
ETA NVARCHAR2(50),
IREV2 NVARCHAR2(50),
TCELL NVARCHAR2(50),
TMONICELL NVARCHAR2(50),
INSOL NVARCHAR2(50),
UMPP NVARCHAR2(50),
IMPP NVARCHAR2(50),
PMPP NVARCHAR2(50),
JSC NVARCHAR2(50),
ENTITY_RRN NUMBER(15),
SORTER_SEQ NUMBER(15),
IMPORTTIME DATE,
DBIMPORTTIME DATE
)
PARTITION BY RANGE (IMPORTTIME)
INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
(
PARTITION P1 VALUES LESS THAN (to_date('20180101','YYYYMMDD'))
) TABLESPACE USERS
开始在线重定义
BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE('AHERN',
'EDC_SEPERATOR',
'TMP_P',
NULL,
2);
END;
/
在线同步
BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE('AHERN', 'EDC_SEPERATOR', 'TMP_P');
END;
/
中间表创建索引
CREATE INDEX INDX_P_SEPERATOR ON TMP_P(IMPORTTIME);
CREATE INDEX INDX3_P_SEPERATOR ON TMP_P (COMT);
完成重定义
BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE('AHERN', 'EDC_SEPERATOR', 'TMP_P');
END;
/
删除中间表
DROP TABLE tmp_p;
检查是否已经分区
SELECT TABLE_NAME, PARTITIONED
FROM DBA_TABLES
WHERE TABLE_NAME = 'EDC_SEPERATOR';
这篇关于普通表在线重定义为分区表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!