mysql表在线转成分区表_11g普通表在线转换分区表

本文详细记录了在Oracle 11g数据库中,如何通过创建过渡分区表并使用DBMS_REDEFINITION进行在线转换,将用户表转变为分区表的过程。该操作包括创建分区表、设置分区策略、执行转换、同步和完成转换,并讨论了分区表索引的创建和性能影响。
摘要由CSDN通过智能技术生成

本帖最后由 灯和树 于 2016-5-4 14:58 编辑

由于业务系统数据量增大,对其用户表在线完成分区表转换过程,记录如下,11g数据库支持。创建过渡分区表

根据USER_ID创建分区表

CREATE TABLE SDP_SMECD.TEST_T_USER_ID

(

USER_ID            NUMBER(13) not null,

SUBSCRIBER_ID      VARCHAR2(100),

SMARTCARD_ID       VARCHAR2(100),

TVCODE             VARCHAR2(32),

STB_SEQID          NUMBER(13),

PASSWORD           VARCHAR2(20),

REGION_CODE        VARCHAR2(32),

USER_CODE          VARCHAR2(100) not null,

USER_NAME          VARCHAR2(200),

USER_ALIAS         VARCHAR2(100),

REGISTER_TIME      DATE,

STATUS             VARCHAR2(2) not null,

TOKEN              VARCHAR2(32),

BUSINESS_AREA_CODE VARCHAR2(8),

SERV_TYPES         CHAR(10) not null,

CREDIT_GRADE       VARCHAR2(2),

CREDIT             NUMBER(8),

USER_LEVEL         VARCHAR2(2),

PAY_TYPE           NUMBER(2),

REMAIN_CREDIT      NUMBER(8),

USER_CLASS         NUMBER(2) not null,

STB_SN             VARCHAR2(32),

IMS_ACCOUNT        VARCHAR2(20),

BIND_USER_ID       NUMBER(13),

USER_TYPE          NUMBER(2),

USER_OWNER         NUMBER(2),

UPDATE_TIME        DATE,

BOSS_AREACODE      VARCHAR2(15),

VIDEO_TYPE         VARCHAR2(150)

)

PARTITION by RANGE(user_id)

INTERVAL (2000000)

(

PARTITION TEST_T_USER_UPT_PARTP1 VALUES LESS THAN (3877397)

tablespace TS_TEST_BIG_SEGMENT

pctfree 20    ---增加pctfree,表update较频繁,故pctfree加大,默认为10

)

tablespace TS_TEST_BIG_SEGMENT

pctfree 20;---增加pctfree在线转换普通表为分区表

exec dbms_redefinition.can_redef_table('SDP_SMECD','TEST_T_USER');

exec dbms_redefinition.start_redef_table('SDP_SMECD', 'TEST_T_USER', 'TEST_T_USER_ID');

--220s

--如果start成功不需要执行abort

exec dbms_redefinition.abort_redef_table('SDP_SMECD', 'TEST_T_USER', 'TEST_T_USER_ID');

exec dbms_redefinition.sync_interim_table('SDP_SMECD', 'TEST_T_USER', 'TEST_T_USER_ID');   --14s

exec dbms_redefinition.finish_redef_table('SDP_SMECD', 'TEST_T_USER', 'TEST_T_USER_ID'); -1s创建分区表的索引创建全局分区主键

alter table SDP_SMECD.TEST_T_USER

add constraint PK_TEST_T_USER_USERID primary key (USER_ID)

using index local

tablespace TS_TEST_BIG_SEGMENT

pctfree 10;创建非前缀本地分区

create index  SDP_SMECD.IND_TEST_T_USER_UPT ON SDP_SMECD.TEST_T_USER(update_time) local

tablespace TS_TEST_BIG_SEGMENT

pctfree 20;

select /*+index(seg IDX_USER_UPDATE_TIME)*/

seg.*

from SDP_SMECD.TEST_T_USER seg

where update_time > sysdate - 130

and update_time < sysdate - 100;

注意:提示执行索引的语句中必须使用表的别名

索引名前不需要加模式

select /*+index(seg IDX_USER_UPDATE_TIME)*/

seg.*

from SDP_SMECD.T_USER seg

where update_time > sysdate - 130

and update_time < sysdate - 100;

分区表update_time索引和普通表的update_time索引I/O吞吐率相差无几。

而且如果在DATE日期上面创建索引,范围稍微大点,数据库会默认选择全表扫描。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值