create table IXP.ESBTLOG(
UUID VARCHAR(32),
UUID_POS VARCHAR(20),
MSG_ID VARCHAR(100),
ESB_CODE VARCHAR(20) ,
CLI_ID CHAR(3),
CLI_ID_BOCS CHAR(2),
SERV_ID CHAR(3),
SERV_TRAN_CODE VARCHAR(20),
SERV_TCODE VARCHAR(20),
ESB_RET_CODE VARCHAR(20),
ERR_MSG VARCHAR(200),
TRACE_NO VARCHAR(32),
TRAN_DATE CHAR(8),
TRAN_TIME CHAR(6),
TXN_STATUS CHAR(1),
JOURNAL_NO VARCHAR(32),
EXT_UUID VARCHAR(32),
TXN_TOKEN VARCHAR(32),
NODE_NAME VARCHAR(32),
TRAN_BEGIN_TIME TIMESTAMP,
TRAN_END_TIME TIMESTAMP,
SP1_BEGIN_TIME TIMESTAMP,
SP1_END_TIME TIMESTAMP,
USER_BOCS VARCHAR(20),
WKSTATION VARCHAR(20),
RET_TRAN_DATE VARCHAR(20),
RET_TRAN_TIME VARCHAR(20),
RET_AC_DATE VARCHAR(20),
RET_TRACE_NO VARCHAR(20),
AP_TRACE_NO VARCHAR(20),
BR_NO VARCHAR(20),
TM_SMP TIMESTAMP default current timestamp
)PARTITION BY RANGE(TM_SMP)
(
PARTITION PARTMAX starting '9999-12-31-00.00.00.000000' INCLUSIVE ending MAXVALUE EXCLUSIVE
)in USERSPACE1
注意:倒数三行是创建分区表的关键,此例中此TM_SMP为分区字段,第一个分区名为PARTMAX,从'9999-12-31-00.00.00.000000'到无穷大都是它的分区范围。我们还可以在EXCLUSIVE后面继 续定义其它的分区,定义规则与定义PARTMAX分区相同,当然定义每个分区需以逗号分隔。最后一行in USERSPACE1表示分区表创建在USERSPACE1表空间中。我们还能添加,删除表分区。
db2 "alter table ESBTLOG add partition part20181118 STARTING '2018-11-18-00.00.00.000000' INCLUSIVE ENDING '2018-11-19-00.00.00.000000' EXCLUSIVE"
其思路是:detach分区到一张临时表(该 *** 作会创建临时表,临时表已存在会报错,detach是分离分区的意思),再将临时表删除。
db2 "alter table ixp.esbtlog detach partition PART20181118 into table tb_temp"
db2 "drop table tb_temp"
A. 查询该表共有多少分区
db2 "select substr(TABNAME ,1,11) t_name,substr(DATAPARTITIONNAME ,1,12) part_name,DATAPARTITIONID ,substr(LOWVALUE,1,28) low_value,substr(HIGHVALUE,1,28) high_value from syscat.datapartitions where tabname='ESBTLOG' order by datapartitionid"
B. 显示每个分区有多少数据(没有数据的不会显示)
db2 "select substr(tm_smp,1,10) as tran_day,count(*) from esbtlog where 1=1 group by substr(tm_smp,1,10)"
C. 查询某个分区有多少数据量
db2 "select count(*) from ixp.esbtlog where substr(tm_smp,1,10)='2019-01-08'"
1. 请注意上方例子中的名称和分区范围。
2. 要想将一个已存在的表改成分区表,需要先将原表数据保存下来,删除表。再新建分区表,设定好表的分区及其范围,将原数据导入进去。
1) 了解分区定义分区定义可以从节点配置文件(db2nodes.cfg)得到,其位于实例所有者的主目录中,它包含一些配置信息,告诉 DB2 有哪些服务器参与分区数据库环境的实例。分区数据库环境中的每个实例都有一个 db2nodes.cfg 文件。对于每个参与实例的服务器,db2nodes.cfg 文件必须包含一个条目。当创建实例时,会自动创建 db2nodes.cfg 文件并对拥有实例的服务器添加条目。这里我们假设有4个分区。
2) 创建数据库
create db dpfdb;
默认会创建3个分区组IBMCATGROUP(只在0号分区上)
IBMTEMPGROUP ,IBMDEFAULTGROUP(在所有分区上),如果用户没有创建其他分区组,所创建的表空间会默认放在IBMDEFAULTGROUP上
3) 创建分区组
我们在 1到3号分区建立一个分区组
CREATE DATABASE PARTITION GROUP USERGROUP ON DBPARTITIONNUMS(1,2,3);
4) 创建表空间
CREATE TABLESPACE TS IN USERGROUP MANAGED BY DATABASE USING (file '/DB2containers/TScontainer $N' 10000)
有4个containers被创建
/DB2containers/TScontainer0 - on DATABASE PARTITION 0
/DB2containers/TScontainer1 - on DATABASE PARTITION 1
/DB2containers/TScontainer2 - on DATABASE PARTITION 2
/DB2containers/TScontainer3 - on DATABASE PARTITION 3
5) 创建表
CREATE TABLE DPFTABLE (ID INTEGER NOT NULL,
NAME CHAR(20) NOT NULL)
IN TS
PARTITIONING KEY (ID) USING HASHING;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)