最近,需要在DB2的分區(qū)表中增加新的分區(qū),用于存儲(chǔ)數(shù)據(jù),因此,就研究了DB2表的分區(qū)機(jī)制。現(xiàn)在總結(jié),實(shí)現(xiàn)的方式共有三種,分別是:
1)、創(chuàng)建臨時(shí)表,將原表數(shù)據(jù)導(dǎo)入臨時(shí)表,之后將原表重建,擴(kuò)大分區(qū);
2)、通過(guò)ALTER TABLE TAB_NAME ADD PARTITION,為表增加分區(qū);
3)、創(chuàng)建臨時(shí)分區(qū)表,向臨時(shí)分區(qū)表中導(dǎo)入數(shù)據(jù),之后將臨時(shí)分區(qū)表設(shè)置為主表的一個(gè)分區(qū)。
下面將分別說(shuō)明三種方式的具體實(shí)現(xiàn):
前提:原分區(qū)表PART_MAIN,建表SQL為:
[sql]
<span style="font-size:14px;">CREATE TABLE PART_MAIN(
P_ID VARCHAR(10),
P_DATE DATE
)
PARTITION BY RANGE(P_DATE) (
PARTITION OTHERS STARTING MINVALUE ENDING '2012-03-31',
PARTITION P201204 STARTING '2012-04-01' ENDING '2012-04-30',
PARTITION P201205 STARTING '2012-05-01' ENDING '2012-05-31',
PARTITION P201206 STARTING '2012-06-01' ENDING '2012-06-30'
)
;</span>
需要為PART_MAIN表,增加2012-12-01--2012-12-31的數(shù)據(jù)分區(qū)。
方法一:
a、創(chuàng)建臨時(shí)表
[sql]
<span style="font-size:14px;">CREATE TABLE TMP_PART_MAIN LIKE PART_MAIN;</span>
b、將數(shù)據(jù)導(dǎo)入臨時(shí)表中
[sql]
<span style="font-size:14px;">INSERT INTO TMP_PART_MAIN SELECT *
FROM PART_MAIN;</span>
c、重建原表
[sql]
<span style="font-size:14px;">DROP TABLE PART_MAIN;</span>
[sql]
<span style="font-size:14px;">CREATE TABLE PART_MAIN(
P_ID VARCHAR(10),
P_DATE DATE
)
PARTITION BY RANGE(P_DATE) (
PARTITION OTHERS STARTING MINVALUE ENDING '2012-03-31',
PARTITION P201204 STARTING '2012-04-01' ENDING '2012-04-30',
PARTITION P201205 STARTING '2012-05-01' ENDING '2012-05-31',
PARTITION P201206 STARTING '2012-06-01' ENDING '2012-06-30',
PARTITION P201212 STARTING '2012-12-01' ENDING '2012-12-31'
)
;</span>
d、將數(shù)據(jù)從臨時(shí)表導(dǎo)入原表中
[sql]
<span style="font-size:14px;">INSERT INTO PART_MAIN SELECT * FROM TMP_PART_MAIN;</span>
注:該方法是最簡(jiǎn)單的一種實(shí)現(xiàn)方式,不需要掌握DB2分區(qū)知識(shí),就可以實(shí)現(xiàn),對(duì)于老鳥(niǎo)來(lái)說(shuō),這種方式是不屑使用的。下面的方法將是技術(shù)提升階段。
方法二:
a、為表增加分區(qū)
[sql]
ALTER TABLE PART_MAIN ADD PARTITION P201212 STARTING '2012-12-01' ENDING '2012-12-31'
;
b、增加分區(qū)OK,插入數(shù)據(jù)即可
注:該方法是最直接的,只要記住ALTER TABLE TAB_NAME ADD PARTITION命令就OK。
方法三:
a、創(chuàng)建臨時(shí)分區(qū)表
[sql]
CREATE TABLE PART_OTHER (
P_ID VARCHAR(10),
P_DATE DATE
)
PARTITION BY RANGE(P_DATE) (
PARTITION P201212 STARTING '2012-12-01' ENDING '2012-12-31'
)
;
b、往臨時(shí)表中增加數(shù)據(jù)(此步可以省略,在最后一步執(zhí)行)
c、將臨時(shí)分區(qū)表設(shè)為原表的一個(gè)分區(qū)
[sql]
ALTER TABLE PART_MAIN ATTACH
PARTITION P201212 STARTING '2012-12-01' ENDING '2012-12-31'
FROM PART_OTHER
;
注:此命令執(zhí)行后,臨時(shí)分區(qū)表PART_OTHER,將不以表的方式存在,而是作為PART_MAIN表的一個(gè)分區(qū)。
d、為原表新增加的分區(qū),設(shè)置訪問(wèn)權(quán)限
[sql]
SET INTEGRITY FOR PART_MAIN
ALLOW WRITE ACCESS
IMMEDIATE CHECKED
;
OK,分區(qū)增加完成,可以往新分區(qū)中增加數(shù)據(jù)了。
注:該方法實(shí)現(xiàn)起來(lái)過(guò)于繁瑣,建議了解就好。