如何建立DB2分区数据库

如何建立DB2分区数据库,第1张

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;

     表分区可扩展表的存储能力、对于大量数据表使用分区字段可提高查询效率。

   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.在db2ad、db2db和db2ap上均执行:

[sql] view plaincopy

db2set db2comm=tcpip

db2set db2codepage=1386

2.新建数据库:

[sql] view plaincopy

db2 create db <dbname>using codeset gbk territory CN collate using identity

3.连接上数据库:

[sql] view plaincopy

db2 "connect to <dbname>"

4.创建缓冲池 + 建立表空间;

1).删除旧的表空间:

[sql] view plaincopy

db2 drop tablespace tablespace1, tablespace2, tablespace3

2).新建缓冲池:

[sql] view plaincopy

db2 create bufferpool bp32k all nodes size -1 pagesize 32k

bp32k为该缓冲池的名称;

32K为页大小;

size=-1表示使用缺省的buffpage,而buffpage可以通过db2 get db cfg|grep -i buff参数查看到;

3).新建表空间:

[sql] view plaincopy

db2 "create regular tablespace tablespace1 pagesize 32k managed by database using(file '/usr/yixiayizi/tablespace1' 5g) bufferpool bp32k"

db2 "create regular tablespace tablespace2 pagesize 32k managed by database using(file '/usr/yixiayizi/tablespace2' 10g) bufferpool bp32k"

db2 "create regular tablespace tablespace3 pagesize 32k managed by database using(file '/usr/yixiayizi/tablespace3' 2g) bufferpool bp32k"

注意(file '/usr/yixiayizi/tablespace1' 5g)的设置:

第一个参数:

当指向外置盘时,file改为device;

当指向文件路径时,为file;

第二个参数:需要是绝对路径;

第三个参数:该表空间的大小;

关于表空间和缓冲池的说明见如下网页:

http://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html

5.调整表空间大小:

[sql] view plaincopy

ALTER TABLESPACE <tablespace1>RESIZE ( FILE '/cstp/usr/db2ad/db2ad/ <tablespace1>' 5g )

6.调整缓冲池大小:

[sql] view plaincopy

db2 alter bufferpool bp32k size 2g

--------------------------------------------------------------------------------------------

远程客户端的配置网络:

1.db2ad账户下:

1). 首先查看/etc/services中db2各个服务的端口号:

more /etc/services

可以看到如下信息:

DB2_db2ad 60040/tcp

DB2_db2ad_1 60041/tcp

DB2_db2ad_2 60042/tcp

DB2_db2ad_END 60043/tcp

2).

[sql] view plaincopy

db2 update dbm cfg using SVCENAME DB2_db2ad

这样在服务端实例对应的端口号就是60040;

------------

2.db2db账户下:

1).

[sql] view plaincopy

db2 catalog tcpip node <node_name>remote 172.17.252.214 server 60040

(上面 *** 作的反编目:db2 uncatalog node <node_name>)

2).db2 list node directory可以看到如下信息:

Node Directory

Number of entries in the directory = 1

Node 1 entry:

Node name = <node_name>

Comment=

Directory entry type = LOCAL

Protocol = TCPIP

Hostname = 172.17.252.214

Service name = 60040

3).

[sql] view plaincopy

db2 catalog db <dbname>at node <node_name>

(上面 *** 作的反编目:db2 uncatalog db <dbname>)

4).db2 list db directory可以看到如下信息:

System Database Directory

Number of entries in the directory = 1

Database 1 entry:

Database alias = <dbname>

Database name= <dbname>

Node name= <node_name>

Database release level = c.00

Comment =

Directory entry type = Remote

Catalog database partition number= -1

Alternate server hostname=

Alternate server port number =

--编目系统数据库目录

-----------------------

授权:

在db2ad账户下,给db2db授权使用表空间:

[sql] view plaincopy

db2 "grant use of tablespace <tablespace1>to user db2db"

db2 "grant use of tablespace <tablespace2>to user db2db"

db2 "grant use of tablespace <tablespace3>to user db2db"

二、建表

切换到db2db用户,执行建表的sql语句:

db2 -vf tmp.sql


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9933637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存