设为首页 加入收藏

TOP

一个完整的以在线重定义方式普通表转分区表的方案(一)
2015-07-24 12:13:55 来源: 作者: 【 】 浏览:103
Tags:一个 完整 在线 定义 方式 普通 分区表 方案

1. 转分区表原因

生产数据库,一张表,一亿多行数据,绝大部分查询按月为维度做时间范围查

询,未分区状态下,查询IO量大,计划以分区截剪的方式减少IO量,提升前前台查询性能

2. 实施目的

将未分区的oXX_XXt_owner.id_oXXXdx_mX表以(stat_XXcle)字段为分区键,以在定义的方式转换成按月分区表的时间范围分区表,利且在线重定义的特性,保留权限的不漏赋以及极少时间的影响生产。

3. 注意事项

(1) 数据库若是双节点,只需在其中一个节点的数据库上实施。

(2) 实施中部分命令执行时间较长,命令一旦执行后请不要中断命令的执行一条命令执行完毕后,不能再次重复执行该命令。

(3) 执行命令的数据库用户需要为sys或者system用户。

4.实施步骤

4.1. 创建中间表

CREATE TABLE OXX_XXT_OWNER.ID_OXXXDX_MX_TMP

(

iXx_data_id VARCHAR2 (42),

oXg_no VARCHAR2 (16),

iXx_id VARCHAR2 (24),

iXx_code VARCHAR2 (16),

PXRIOD VARCHAR2 (8),

stat_XXcle VARCHAR2 (16),

……

)

TABLESPACE OXXXIEW

PARTITION BY RANGE

(STAT_XXCLE)

(

PARTITION ONXXDX_MIN VALUES LESS THAN ('20140101'),

PARTITION ONXXDX_2014_01 VALUES LESS THAN ('20140201'),

PARTITION ONXXDX_2014_02 VALUES LESS THAN ('20140301'),

PARTITION ONXXDX_2014_03 VALUES LESS THAN ('20140401'),

……

PARTITION ONXXDX_2018_02 VALUES LESS THAN ('20180301'),

PARTITION ONXXDX_2018_03 VALUES LESS THAN ('20180401'),

PARTITION ONXXDX_2018_04 VALUES LESS THAN ('20180501'),

PARTITION ONXXDX_2018_05 VALUES LESS THAN ('20180601'),

PARTITION ONXXDX_2018_06 VALUES LESS THAN ('20180701'),

PARTITION ONXXDX_2018_07 VALUES LESS THAN ('20180801'),

PARTITION ONXXDX_2018_08 VALUES LESS THAN ('20180901'),

PARTITION ONXXDX_2018_09 VALUES LESS THAN ('20181001'),

PARTITION ONXXDX_2018_10 VALUES LESS THAN ('20181101'),

PARTITION ONXXDX_2018_11 VALUES LESS THAN ('20181201'),

PARTITION ONXXDX_2018_12 VALUES LESS THAN ('20190101'),

PARTITION ONXXDX_MAX VALUES LESS THAN (MAXVALUE));

4.2. 表在线重定义

4.2.1. 异常回退措施(正常情况不用执行,用于失败回滚用的)

若执行完以下步骤3.2.3开始 表在线重定义,在执行3.2.4,3.2.5,3.2.6时报错,命令不能执行,则执行以下命令回退 表在线重定义,并中断整个表的实施过程。

BEGIN

DBMS_REDEFINITION.ABORT_REDEF_TABLE(

UNAME => 'OXX_XXT_OWNER',

ORIG_TABLE => 'ID_OXXXDX_MX',

INT_TABLE => 'ID_OXXXDX_MX_TMP');

END;

/

4.2.2. 验证表能否能在线重定义

BEGIN

DBMS_REDEFINITION.CAN_REDEF_TABLE(

UNAME => 'OXX_XXT_OWNER',

TNAME => 'ID_OXXXDX_MX',

OPTIONS_FLAG => DBMS_REDEFINITION.CONS_USE_PK);

END;

/

4.2.3. 开始表在线重定义

BEGIN

DBMS_REDEFINITION.START_REDEF_TABLE(

UNAME => 'OXX_XXT_OWNER',

ORIG_TABLE => 'ID_OXXXDX_MX',

INT_TABLE => 'ID_OXXXDX_MX_TMP',

OPTIONS_FLAG => DBMS_REDEFINITION.CONS_USE_PK);

END;

/

4.2.4. 复制原表上的依赖对象

DECLARE

num_errors PLS_INTEGER;

BEGIN

DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(

'OXX_XXT_OWNER',

'ID_OXXXDX_MX',

'ID_OXXXDX_MX_TMP',

DBMS_REDEFINITION.CONS_ORIG_PARAMS,

TRUE,

TRUE,

TRUE,

TRUE,

num_errors);

END;

/

4.2.5. 同步原表与中间表的数据

BEGIN

DBMS_REDEFINITION.SYNC_INTERIM_TABLE('OXX_XXT_OWNER',

'ID_OXXXDX_MX',

'ID_OXXXDX_MX_TMP');

END;

/

4.2.6. 完成表在线重定义

BEGIN

DBMS_REDEFINITION.FINISH_REDEF_TABLE(

UNAME => 'OXX_XXT_OWNER',

ORIG_TABLE => 'ID_OXXXDX_MX',

INT_TABLE => 'ID_OXXXDX_MX_TMP');

END;

/

4.3. 添加表注释

comment on column OXX_XXT_OWNER.ID_OXXXDX_MX.dim_code1

is 'XX代码1';

4.4. 重建含有stat_XXcle列的索引为本地分区索引

DROP INDEX OXX_XXT_OWNER. IDX_ID_OXXXDX_MX

DROP INDEX OXX_XXT_OWNER.IDX_ID_OXXXDX_MX2;

DROP INDEX OXX_XXT_OWNER.IDX_ID_OXXXDX_MX3



CREATE UNIQUE INDEX OXX_XXT_OWN
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MongDB基础学习(四) 下一篇Truncatetable会同时删除表相应的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: