1. 表分區說明
在db2數據庫中,可對數據表按某個字段進行分區,分區好處是:可擴展表的存儲能力、對於大量數據表使用分區字段可提高查詢效率。表分區不同於數據庫分區,需要在創建表的時候設置分區邏輯。
在定義表分區的字段時,有幾個原則:1.不支持創建只包含長數據類型的多分區表,2.不能改變分區鍵定義,3.分區鍵應該包含最頻繁連接的列,4.分區鍵應該由經常參與group by字句的組成,5.任何主鍵或唯一鍵必須包含分區列
2.創建表分區
在DB2V10.5進行操作。在創建表時設置分區的列,並設定分區的字段范圍,已varchar類型的字段 創建表分區 sql如下:
CREATE TABLE TABLE_TEST_HAOTD( DATADATE VARCHAR(8) NOT NULL, DATA1 VARCHAR(10), DATA2 VARCHAR(10) ) PARTITION BY RANGE(DATADATE) (PART "DATAMIN" STARTING(MINVALUE) ENDING('20180101') EXCLUSIVE IN "DATA_TBS_8K",PART "P20180101" STARTING('20180101') ENDING('20180102') EXCLUSIVE IN "DATA_TBS_8K")
上SQL中,對表TABLE_TEST_HAOTD按DATADATE創建了按日期天分區:小於20180101的和20180101的兩個分區
3.添加分區與刪除分區
表在創建分區時可創建完全部分區,也可以后續添加分區,若一次性把所有分區創建完則后續無法繼續添加分區,繼續添加其他日期分區SQL如下:
ALTER TABLE TABLE_TEST_HAOTD ADD PARTITION "P20180102" STARTING '20180102' ENDING '20180103' exclusive IN DATA_TBS_8k; ALTER TABLE TABLE_TEST_HAOTD ADD PARTITION "P20180103" STARTING '20180103' ENDING '20180104' exclusive IN DATA_TBS_8k; ALTER TABLE TABLE_TEST_HAOTD ADD PARTITION "P20180104" STARTING '20180104' ENDING '20180105' exclusive IN DATA_TBS_8k; ALTER TABLE TABLE_TEST_HAOTD ADD PARTITION "P20180105" STARTING '20180105' ENDING '20180106' exclusive IN DATA_TBS_8k;
分區是無法直接刪除,先卸載分區,再進行drop操作
ALTER TABLE TABLE_TEST_HAOTD DETACH PARTITION P20180101 INTO TABLE TMP_TESTHAOTD_P20180101
再進行刪除操作(上述SQL執行是若表TMP_TESTHAPTD_P20180101存在會報錯)
DROP TABLE TMP_HAOTDTEST_P20180101
需要注意的是:DETACH操作是異步的,所以執行卸載后立馬執行刪除操作容易出現刪除失敗
查詢表已建分區情況:
SELECT * FROM SYSCAT.DATAPARTITIONS WHERE TABNAME='表名稱'
4.問題說明
添加分區時若出現下面報錯:
DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0636N Range specified for data partition "PXXXX" is not valid. Reason code="10". SQLSTATE=56016
上面錯誤是分區創建完畢,無法添加新的分區,需要檢查分區的創建是否重復