普通表在线重定义为分区表

普通表在线转换成分区表示例

源表表结构如下

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';

相关推荐
惊起白鸽4503 小时前
MySQL全量,增量备份与恢复
数据库·mysql
暮雨疏桐4 小时前
MySQL SQL Mode及其说明
数据库·sql·mysql·sql mode
Tangcan-4 小时前
【MySQL】数据库基础
数据库·mysql
蔡蓝5 小时前
Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁
数据库·mysql
jstart千语5 小时前
【Redis】分布式锁的实现
数据库·redis·分布式
一把年纪学编程6 小时前
【牛马技巧】word统计每一段的字数接近“字数统计”
前端·数据库·word
极小狐6 小时前
极狐GitLab 通用软件包存储库功能介绍
java·数据库·c#·gitlab·maven
钢铁男儿6 小时前
C# 方法(可选参数)
数据库·mysql·c#
陆少枫6 小时前
MySQL基础关键_013_常用 DBA 命令
数据库·mysql
赵渝强老师6 小时前
【赵渝强老师】在PostgreSQL中使用file_fdw访问外部文件系统
数据库·postgresql