《DB2创建分区表及相关操作》
- 1 基本概念
- 2 操作
- 2.1 查看数据库中存在的分区表
- 2.2 查看分区表详细
- 2.3 断开对数据表的访问连接
- 2.4 备份数据
- 2.5 拆离分区
- 2.6 添加分区
- 2.7 导入数据
- 2.8 校验前后数据
- 2.9 删除临时表数据
1 基本概念
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑
对表进行分区。分区后的表称为分区表。
表进行分区后,逻辑上表仍然是一张完整的表
,只是将表中的数据在物理上存放到多个“表空间”(物理文件上
),这样查询数据时,不至于每次都扫描整张表而只是从当前的分区查到所要的数据大大提高了数据查询的速度。
优点:
A 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
B 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用
C 如果表的某个分区出现故障,需要修复数据,只修复该分区即可。例如:数据清理时对分区进行清理,只需要清理相关日期的分区即可。
D 均衡I/O:可以把不同的分区映射到不同磁盘以平衡I/O,改善整个系统性能。
2 操作
2.1 查看数据库中存在的分区表
select t.TABSCHEMA,t.TABNAME as Tablename,t.c as NumPartion from (select TABSCHEMA,TABNAME,count(*) as c from sysibm.SYSDATAPARTITIONS group by (TABSCHEMA,TABNAME)) as t where t.c>1
2.2 查看分区表详细
db2 describe data partitions for table DB2INST1.TBL_EXTERNALPAYMENTAFINFO
或
db2 describe data partitions for table DB2INST1.TBL_EXTERNALPAYMENTAFINFO show detail
//说明:这里的表要加模式名
1、英文含义
PartitionId | Inclusive | Low Value | High Value |
---|---|---|---|
分区序列 | 包含(这里对边界进行判断) | 分区起始 | 分区结束 |
2、N—不包含边界; Y—包含边界
3、序列是系统自动分配
4、拆分:将一个分区拆分两个新分区,拆离后的分区将独立存在。
5、添加分区指的是:将最后一个分区拆离,添加新的分区后,再将最后一个分区的数据导入。
2.3 断开对数据表的访问连接
说明:应用访问分区数据可能导致拆分失败;数据如果写入已拆离不存在的分区则可能丢失数据。
1、停止应用
2、数据库中执行命令:db2 force applications all
2.4 备份数据
1-备份整表的数据;注意要统计表的数据量
2-db2 “export to ./path ……”
3-db2 “select count(1) from tblname with ur”
2.5 拆离分区
查看分区表
db2 describe data partitions for table DB2INST1. TBL_EXTERNALPAYMENTAFINFO
拆离分区至新的表
db2 ALTER TABLE DB2INST1.TBL_EXTERNALPAYMENTAFINFO DETACH PARTITION OTHERS2 INTO TBL_EXTERNALPAYMENTAFINFO_2017
说明:
1、ALTER 和 DETACH PARTITION 都为固定格式detach 拆离
2、TBL_EXTERNALPAYMENTAFINFO_2017是新建的表名,可以任意,一般为了方便与原表相似。
3、拆离后的分区数据放在表TBL_EXTERNALPAYMENTAFINFO_2017中
4、OTHERS2 是最后一个分区的分区ID,同表中的109
5、拆离分区会自动创建表,无需提前创建。
6、拆离分区需要等一会,几秒钟到1-3分钟。此时,sysibm.SYSDATAPARTITIONS中原表的DATAPARTITIONNAME分区显示为SQL210110102024000情况。
2.6 添加分区
说明:添加新增的分区,脚本如下。
CONNECT TO BIZ;
ALTER TABLE DB2INST1.TBL_DOMESTICPAYMENTAFINFO ADD PART DATAPT108 STARTING(MINVALUE) ENDING('2017-01-01') EXCLUSIVE IN TBS_RPDATA1;
ALTER TABLE DB2INST1.TBL_DOMESTICPAYMENTAFINFO ADD PART DATAPT109 STARTING('2017-01-01') ENDING('2017-02-01') EXCLUSIVE IN TBS_RPDATA1;
ALTER TABLE DB2INST1.TBL_DOMESTICPAYMENTAFINFO ADD PART DATAPT110 STARTING('2017-02-01') ENDING('2017-03-01') EXCLUSIVE IN TBS_RPDATA1;
ALTER TABLE DB2INST1.TBL_DOMESTICPAYMENTAFINFO ADD PART DATAPT111 STARTING('2017-03-01') ENDING('2017-04-01') EXCLUSIVE IN TBS_RPDATA1;
ALTER TABLE DB2INST1.TBL_DOMESTICPAYMENTAFINFO ADD PART DATAPT112 STARTING('2017-04-01') ENDING('2017-05-01') EXCLUSIVE IN TBS_RPDATA1;
---
---
ALTER TABLE DB2INST1.TBL_DOMESTICPAYMENTAFINFO ADD PART DATAPT154 STARTING('2020-10-01') ENDING('2020-11-01') EXCLUSIVE IN TBS_RPDATA1;
ALTER TABLE DB2INST1.TBL_DOMESTICPAYMENTAFINFO ADD PART DATAPT155 STARTING('2020-11-01') ENDING('2020-12-01') EXCLUSIVE IN TBS_RPDATA1;
ALTER TABLE DB2INST1.TBL_DOMESTICPAYMENTAFINFO ADD PART DATAPT156 STARTING('2020-12-01') ENDING('2021-01-01') EXCLUSIVE IN TBS_RPDATA1;
ALTER TABLE DB2INST1.TBL_DOMESTICPAYMENTAFINFO ADD PART OTHERS2 STARTING('2021-01-01') ENDING(MAXVALUE) EXCLUSIVE IN TBS_RPDATA1;
COMMIT WORK;
CONNECT RESET;
TERMINATE;
2.7 导入数据
说明:导入拆离分区备份的数据。
2.8 校验前后数据
说明:验证添加分区后数据是否与拆分前数据量相同。
2.9 删除临时表数据
db2 drop table DB2INST2.TBL_EXTERNALPAYMENTAFINFO_2017