先前未考虑数据量问题,在建立表的时候没有给表建立分区,现在数据量剧增,需要给表加分区,如何做??原先表A 有个字段名为 Status, int型,现在需要根据Status分区,如何做???
看介绍都是在创建表的时候在结束语句加partition by range(Status) 来创建,但是我开始建表的时候没有,该怎么办呀??
高手help、、、多谢
看介绍都是在创建表的时候在结束语句加partition by range(Status) 来创建,但是我开始建表的时候没有,该怎么办呀??
高手help、、、多谢
create table TB_NAME
(
ID NUMBER,
JE NUMBER(10,2),
IDATE DATE
)
partition by range (IDATE)
(
partition PART_01 values less than (TO_DATE(' 2007-01-01', 'SYYYY-MM-DD')),
partition PART_02 values less than (TO_DATE(' 2008-01-01', 'SYYYY-MM-DD')),
partition PART_03 values less than (TO_DATE(' 2009-01-01', 'SYYYY-MM-DD')),
partition PART_04 values less than (MAXVALUE)
);
Oracle9i以上版本,利用在线重定义功能对已有表进行分区
Drop table t;
CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);
INSERT INTO T
SELECT ROWNUM, SYSDATE - ROWNUM FROM DBA_OBJECTS WHERE ROWNUM <= 5000;
COMMIT;
EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T');
PL/SQL 过程已成功完成。
CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME)
(PARTITION P1 VALUES LESS THAN (TO_DATE('2004-7-1', 'YYYY-MM-DD')),
PARTITION P2 VALUES LESS THAN (TO_DATE('2005-1-1', 'YYYY-MM-DD')),
PARTITION P3 VALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')),
PARTITION P4 VALUES LESS THAN (MAXVALUE));
表已创建。
EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T', 'T_NEW');
PL/SQL 过程已成功完成。
EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'T', 'T_NEW');
PL/SQL 过程已成功完成。
SELECT COUNT(*) FROM T;
COUNT(*)
----------
5000
SELECT COUNT(*) FROM T PARTITION (P3);
COUNT(*)
----------
1096
优点:保证数据的一致性,在大部分时间内,表T都可以正常进行DML操作。只在切换的瞬间锁表,具有很高的可用性。这种方法具有很强的灵活性,对各种不同的需要都能满足。而且,可以在切换前进行相应的授权并建立各种约束,可以做到切换完成后不再需要任何额外的管理操作。