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

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

源表表结构如下

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

相关推荐
现在,此刻19 分钟前
高可用与高性能数据库配置实践分析(pgSql && clickhouse)
数据库·clickhouse
谅望者1 小时前
数据分析笔记02:数值方法
大数据·数据库·笔记·数据挖掘·数据分析
dreams_dream1 小时前
django模型数据查询
数据库·django·sqlite
郏国上1 小时前
由于图片视频替换和删除导致阿里云上存在大量系统不再使用的文件如何处理
数据库·mongodb·阿里云
百***27112 小时前
UNION 和 UNION ALL 的区别:深入解析 SQL 中的合并操作
数据库·sql·oracle
xie_pin_an2 小时前
Redis 核心命令速查表
数据库·redis·缓存
喵行星2 小时前
MySQL XtraBackup 使用文档(全量 + 增量备份与恢复)
数据库·mysql·adb
苦学编程的谢3 小时前
Redis_11_类型补充+命令补充+RESP
数据库·redis·缓存
一 乐3 小时前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·小程序
hzk的学习笔记3 小时前
Redisson 和 Jedis 的区别
数据库·redis·缓存