导航:首页 > 编程大全 > db2数据库分区表

db2数据库分区表

发布时间:2023-05-27 23:35:27

『壹』 db2中建立了分区表,如何快速清除一个分区的

参考吧,网络一下那含轿州么多答案谈蔽。帆铅网页链接

『贰』 DB2分区表的创建,求各位帮帮忙 解释一下下面这段代码。俺实在看不懂了

在芦脊 schema RHETTE上创建 test4表,含 col1,col2两型渣字段陪租渗,按 col2进行表分区,DATAPARTION1 存放 col2 1-10
DATAPARTION2 存放 col2 11-20

『叁』 db2 表数据分区 是否可以修改

1.创建分区表,INCLUSIVE(包含),exclusive(不包含)
CREATE TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" ( "REPORT_DATE" DATE, "MA_ACCT_NO" VARCHAR(100), "TRANS_DATE" DATE, "ORG_UNIT_ID" VARCHAR(15), "ORG_PROD_ID" VARCHAR(15), "CURR_CD" VARCHAR(15), "ACCT_NO" VARCHAR(15), "TRANS_NUM" VARCHAR(15), "TRANS_NO" VARCHAR(15), "TRANS_DIF" VARCHAR(15), "DEPOSIT_CHAR" VARCHAR(15), "DEPOSIT_BAL" DECIMAL(18,2), "TRANS_AMT" DECIMAL(18,2), "TRANS_TYPE" CHARACTER(1), "FLG" CHARACTER(1), "RATE" DECIMAL(18,6), "TRXMEM" DECIMAL(4,0)) IN "MA_DATA" INDEX IN "MA_INDEX" PARTITION BY RANGE ( "REPORT_DATE" NULLS LAST ) ( PARTITION PART0 STARTING '2010-12-10' INCLUSIVE ENDING '2010-12-20' INCLUSIVE ) ;
ALTER TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" DATA CAPTURE NONE LOCKSIZE ROW APPEND OFF NOT VOLATILE;
COMMENT ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" IS '活期交易明细表';
COMMENT ON "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" ( "REPORT_DATE" IS '数据日期', "MA_ACCT_NO" IS '管会账号', "TRANS_DATE" IS '营业日期', "ORG_UNIT_ID" IS '行所号', "ORG_PROD_ID" IS '业务品种 ', "CURR_CD" IS '币别', "ACCT_NO" IS '帐号', "TRANS_NUM" IS '交易序号', "TRANS_NO" IS '交易代号', "TRANS_DIF" IS '交易区别', "DEPOSIT_CHAR" IS '存款性质 ', "DEPOSIT_BAL" IS '存款余额', "TRANS_AMT" IS '交易金额', "TRANS_TYPE" IS '交易别', "FLG" IS '连动标志', "RATE" IS '汇率' );
GRANT CONTROL ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" TO USER "DB2INST2";
GRANT SELECT, INSERT, UPDATE, ALTER, DELETE, INDEX, REFERENCES ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" TO USER "DB2INST2" WITH GRANT OPTION;
GRANT SELECT, INSERT, UPDATE, ALTER, DELETE, INDEX, REFERENCES ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" TO USER "DB2INST2" WITH GRANT OPTION;
GRANT SELECT, INSERT, UPDATE, ALTER, DELETE, INDEX, REFERENCES ON TABLE "MABAS"."BAS_MID_TRANS_LIST_CK_BAK" TO USER "MAPUB" WITH GRANT OPTION;
2.增加分区,注意这里的INCLUSIVE,exclusive,这时只有2011-01-31的数据可以进行insert
alter table MABAS.BAS_MID_TRANS_LIST_CK_BAK add partition LIST_CK_bak0131 STARTING '2011-01-31' INCLUSIVE ENDING '2011-02-01' exclusive
3.insert 数据
insert into MABAS.BAS_MID_TRANS_LIST_CK_BAK select * from MABAS.BAS_MID_TRANS_LIST_CK where report_date=date('2011-01-31');
4.转移分区到临里表
alter table MABAS.BAS_MID_TRANS_LIST_CK_BAK detach partition LIST_CK_bak0131 into MABAS.BAS_MID_TRANS_LIST_CK_BAK1
5.删除生成的分区迁移表,注意这时分区表的分区(LIST_CK_bak0131)己经不存在了,如果要insert必须新增该分区
drop table MABAS.BAS_MID_TRANS_LIST_CK_BAK1
以下为应用写的shell脚本,并参照syscat.datapartitions 进行判断,如果有则删除分区,否则进行新建,以下为具体的脚本。
. /home/odSUSEr1/.profile#配置文件SYSNAME=GDBMAMADS_HOME=/home/odsuser1/gdbma/etl#DS ConfigDSConfigFile=$MADS_HOME/dsconfig_gdbma#MARPT ETL2数据库#DB信息DBNAME=`awk 'FS="=" {if ($0~/^MABASDBName/) print $2}' $DSConfigFile`DBUSR=`awk 'FS="=" {if ($0~/^MABASDBUser/) print $2}' $DSConfigFile`DBPWD=`awk 'FS="=" {if ($0~/^MABASDBPassword/) print $2}' $DSConfigFile`DBSCHEMA=`awk 'FS="=" {if ($0~/^MABASDBSchema/) print $2}' $DSConfigFile`DBPWD=`$MADS_HOME/Encrypt/discrypt.sh $DBPWD`dbname=$DBNAMEuser=$DBUSRpasswd=$DBPWD#连接数据库db2 connect to $DBNAME user $DBUSR using $DBPWD >/dev/nulldb2 set schema=$DBSCHEMA;#传递参数JOB_NAME=$1DELETE_DATE=$2#DELETE_DBSCHEMA=$1#DELETE_TAB=$2#DELETE_COL=$3#DELETE_TYPE=$4#DELETE_DATE=$5#DELETE_VALUE=$6
delete_tab="select SCH_NAME,TAB_NAME,IF_PARTITION,TAB_DATE,DEL_VALUE from mabas.s_job_info_m t where JOB_NAME = '"$JOB_NAME"' "DEL_DATA=`db2 -t "$delete_tab"`if [ $? -ne 0 ]thenecho "$SDATA"fiecho "$DEL_DATA" | sed -e '4,/^$/!d;/^$/d'|#循环读取job,然后调度while read SCH_NAME TAB_NAME IF_PARTITION TAB_DATE DEL_VALUEdo#判断删除方式#分区字段拼写if [ "$IF_PARTITION" = 'Y' ] then #分区进行拼写 partiton_name=`db2 -tx "select upper('p'||replace(varchar(date('"$DELETE_DATE"')),'-','')) from sysibm.sysmmy1 "` tmp_tab=`db2 -tx "select upper('tmp'||substr(replace(replace(varchar(current timestamp),'-',''),'.',''),5,10)) from sysibm.sysmmy1 "` #判断分区是否存在 vi_result=`db2 -tx "select count(*) from syscat.datapartitions t where tabschema = upper('"$SCH_NAME"') and tabname = upper('"$TAB_NAME"') and datapartitionname=upper('"$partiton_name"') "` #对分区进行操作 if [ "$DEL_VALUE" = '-' ] then #判断分区是否存在 if [ $vi_result -ne 0 ] then #进行分区数据到临时表 alter_parition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME detach partition $partiton_name into $SCH_NAME.$tmp_tab"` #删除临时表 drop_tmp=`db2 -tx "drop table $SCH_NAME.$tmp_tab"` #分区结束 partition_end=`db2 -tx "select varchar(date('"$DELETE_DATE"') +1 days) from sysibm.sysmmy1"` #增加分区 add_partition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME add partition $partiton_name STARTING '"$DELETE_DATE"' INCLUSIVE ENDING '"$partition_end"' exclusive "` else #分区结束 partition_end=`db2 -tx "select varchar(date('"$DELETE_DATE"') +1 days) from sysibm.sysmmy1"` #增加分区 add_partition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME add partition $partiton_name STARTING '"$DELETE_DATE"' INCLUSIVE ENDING '"$partition_end"' exclusive "` fi else if [ $vi_result -ne 0 ] then #进行分区数据到临时表 drop_parition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME detach partition $partiton_name into $SCH_NAME.$tmp_tab "` #备份临时表中不属于该条件的数据 delete_tab_date=`db2 -tx "delete from $SCH_NAME.$tmp_tab where "$DEL_VALUE" "` #分区结束 partition_end=`db2 -tx "select varchar(date('"$DELETE_DATE"') +1 days) from sysibm.sysmmy1"` #增加分区 add_partition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME add partition $partiton_name STARTING '"$DELETE_DATE"' INCLUSIVE ENDING '"$partition_end"' exclusive "` #insert 不符合删除条件的数据 insert_date=`db2 -tx "insert into $SCH_NAME.$TAB_NAME select * from $SCH_NAME.$tmp_tab "` else #分区结束 partition_end=`db2 -tx "select varchar(date('"$DELETE_DATE"') +1 days) from sysibm.sysmmy1"` #增加分区 add_partition=`db2 -tx "alter table $SCH_NAME.$TAB_NAME add partition $partiton_name STARTING '"$DELETE_DATE"' INCLUSIVE ENDING '"$partition_end"' exclusive "` fi fielse #直接删除表 if [ "$DEL_VALUE" = "-" ] then delete_tab_data=`db2 -tx "delete from $SCH_NAME.$TAB_NAME where date("$TAB_DATE") = DATE('"$DELETE_DATE"') "` else delete_tab_data=`db2 -tx "delete from $SCH_NAME.$TAB_NAME where date("$TAB_DATE") = DATE('"$DELETE_DATE"') and $DEL_VALUE "` fifidone

『肆』 db2数据库 怎么按日或者按月 自动创建表分区

CREATE TABLE lineitem(l_orderkey DECIMAL(10,0) NOT NULL, l_cpartkey INTEGER, l_suppkey INTEGER, l_linenumber INTEGER, l_quantity DECIMAL(12,2), l_extendedprice DECIMAL(12,2), l_discount DECIMAL(12,2), l_tax DECIMAL(12,2), l_returnflag CHAR(1), l_linestatus CHAR(1), l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHAR(25), l_shipmode CHAR(10), l_comment VARCHAR(44)) PARTITION BY RANGE(l_shipdate) (STARTING MINVALUE, STARTING '1/1/2000' ENDING '31/12/2020' EVERY 1 YEAR(按月就是 MONTH), ENDING MAXVALUE);

『伍』 如何建立DB2分区数据库

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;

『陆』 db2 查看表分区语句与创建表分区

创建分区:ALTER TABLE tablename ADD PARTITION statis_month STARTING'201301'
INCLUSIVE ENDING '20090102' INCLUSIVE。

查询分区select * from syscat.datapartitions t where tabschema =模式名 and tabname = 表名

『柒』 db2 分区表分区键还要建索引吗

DB2 V9.7 使用分区索引的索引组织方案,即索引数据根据表的分区方唤察案分布到多个索引分区和侍茄中,每个索引分区都谈纯只引用对应数据分区中的表行。
创建方式:Create index idx_t1_l_partkey on t1(l_partkey) partitioned;

『捌』 db2表分区

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

   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. 要想将一个已存在的表改成分区表,需要先将原表数据保存下来,删除表。再新建分区表,设定好表的分区及其范围,将原数据导入进去。

阅读全文

与db2数据库分区表相关的资料

热点内容
4kb的txt文件差不多多少字 浏览:984
u盘文件突然变成exe 浏览:164
现在哪些学校初中有学编程的 浏览:402
word查找全选 浏览:599
开工报告附什么文件资料 浏览:150
分区工具app怎么用 浏览:212
安卓坚果云文件路径 浏览:591
sqllog文件 浏览:236
如何在电脑中找到文件路径 浏览:830
数据结构访问和查找有什么区别 浏览:401
怎么清空icloud内的数据 浏览:338
微信锁屏后音乐停止 浏览:668
applepay苹果手机卡 浏览:835
一个14mb的文件能储存多少万汉字 浏览:478
腾讯文档里如何导出数据 浏览:979
java面试题csdn 浏览:410
rpgnvp是什么文件 浏览:594
如何将一列数据复制到excel 浏览:488
sd卡怎么恢复excel文件 浏览:282
gdblinux内核多核调试 浏览:24

友情链接