db2 數據表分區


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

    上面錯誤是分區創建完畢,無法添加新的分區,需要檢查分區的創建是否重復


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM