• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            DB2 V9表分區 4

            Posted on 2010-04-15 23:40 Prayer 閱讀(1050) 評論(0)  編輯 收藏 引用 所屬分類: DB2
            手工生成方法為PARTITION BY子句中列示的每個范圍創建一個新數據分區?這種語法格式提高了定義范圍時的靈活性,從而增加了數據和LOB布置選項?對清單12所創建的示例分區表TEST3,如果用手工方式創建,可以在DB2CLP窗口中,連上數據庫,先發出DROP TABLE命令,刪除示例分區表TEST3,再發出CREATE TABLE命令創建示例分區表TEST3,其分區鍵RQ允許錄入的時間段為“2007-01-01”到“2007-12-31”,具體如清單13所示:

            - - 清單13 .手工創建示例分區表TEST3 


            C:\> DB2 CONNECT TO DB2TEST1 數據庫連接信息 數據庫服務器 = DB2 / NT 9.1.0 SQL 授權標識 = RHETTE 本地數據庫別名 = DB2TEST1 C:\> db2 drop table test3 DB20000I SQL命令成功完成?
            C:\> db2 CREATE TABLE TEST3 ( ID INTEGER NOT NULL , RQ DATE NOT NULL , IMAGE BLOB (1 M ) NOT NULL LOGGED NOT COMPACT ) PARTITION BY RANGE (RQ NULLS LAST) (PARTITION DATAPATITION1 STARTING FROM ('2007-01-01') INCLUSIVE ENDING AT ('2007-02-01') EXCLUSIVE IN TABLESPACE1 LONG IN LARGETBS1 , PARTITION DATAPATITION2 STARTING FROM ('2007-02-01') INCLUSIVE ENDING AT ('2007-03-01') EXCLUSIVE IN TABLESPACE2 LONG IN LARGETBS2 , PARTITION DATAPATITION3 STARTING FROM ('2007-03-01') INCLUSIVE ENDING AT ('2007-04-01') EXCLUSIVE IN TABLESPACE3 LONG IN LARGETBS3 , PARTITION DATAPATITION4 STARTING FROM ('2007-04-01') INCLUSIVE ENDING AT ('2007-05-01') EXCLUSIVE IN TABLESPACE1 LONG IN LARGETBS1 , PARTITION DATAPATITION5 STARTING FROM ('2007-05-01') INCLUSIVE ENDING AT ('2007-06-01') EXCLUSIVE IN TABLESPACE2 LONG IN LARGETBS2 ,PARTITION DATAPATITION6 STARTING FROM ('2007-06-1') INCLUSIVE ENDING AT ('2007-07-1') EXCLUSIVE IN TABLESPACE3 LONG IN LARGETBS3 , PARTITION DATAPATITION7 STARTING FROM ('2007-07-01') INCLUSIVE ENDING AT ('2007-08-01') EXCLUSIVE IN TABLESPACE1 LONG IN LARGETBS1 , PARTITION DATAPATITION8 STARTING FROM ('2007-08-01') INCLUSIVE ENDING AT ('2007-09-01') EXCLUSIVE IN TABLESPACE2 LONG IN LARGETBS2 , PARTITION DATAPATITION9 STARTING FROM ('2007-09-01') INCLUSIVE ENDING AT ('2007-10-01') EXCLUSIVE IN TABLESPACE3 LONG IN LARGETBS3 , PARTITION DATAPATITION10 STARTING FROM ('2007-10-01') INCLUSIVE ENDING AT ('2007-11-01') EXCLUSIVE IN TABLESPACE1 LONG IN LARGETBS1 , PARTITION DATAPATITION11 STARTING FROM ('2007-11-01') INCLUSIVE ENDING AT ('2007-12-01') EXCLUSIVE IN TABLESPACE2 LONG IN LARGETBS2 , PARTITION DATAPATITION12 STARTING FROM ('2007-12-01') INCLUSIVE ENDING AT ('2007-12-31') EXCLUSIVE IN TABLESPACE3 LONG IN LARGETBS3) INDEX IN USERSPACE1 DB20000I SQL命令成功完成?



                這樣我們通過手工方式創建了示例分區表TEST3,用來對表數據進行分區的列是RQ,表數據將存儲在下列表空間中:TABLESPACE1,TABLESPACE2和TABLESPACE3?缺省情況下,索引將存儲在以下表空間中:USERSPACE1?此語句生成12個數據分區,每個數據分區包含1個鍵值:

            ? (RQ) >= ( ' 2007-01-01 ' ) , (RQ) < (' 2007-02-01 ' )
            ? (RQ) >= ( ' 2007-02-01 ' ) , (RQ) < (' 2007-03-01 ' )
            ? . . . . . .
            ? (RQ) >= ( ' 2007-12-01 ' ) , (RQ) <= (' 2007-12-31 ' ) 

                每個數據分區通過PARTITION命令進行了命名,名字分別DATAPARTITION1,DATAPARTITION2, . . . . . . DATAPARTITION12? 

                接下來我們對示例分區表TEST3插入數據,在DB2CLP窗口中,發出INSERT INTO命令,具體如清單14所示:

            - - 清單14 .對示例分區表TEST3插入一條記錄 

            C:\> DB2 INSERT INTO TEST3 VALUES ( 1 , '2007-01-10' , blob ( 'the first rows' ) ) DB20000I SQL命令成功完成?

                命令成功完成,把行插入示例分區表時,根據該行的鍵值以及它所處的范圍自動將其放入正確的數據分區,這樣我們數據就插入到了數據分區DATAPARTITION1中了?如果該行處于對該表定義的所有范圍之外,插入就會失敗,并且將把以下錯誤返回給應用程序,比如我們插入一條如清單15所示的記錄,RQ的值為'2006-01-10',不在'2007-01-01'和'2007-12-31'的范圍內:

            - - 清單15 .對示例分區表TEST3插入一條分區鍵范圍外的記錄 

            C:\> DB2 INSERT INTO TEST3 VALUES (1 , '2006-01-10' , blob ( 'the first rows' ) ) DB21034E 該命令被當作 SQL語句來處理,因為它不是有效的“命令行處理器”命令&#65377;在 SQL 處理期間,它返回: SQL0327N 無法將行插入表 " RHETTE.TEST3 " 中,因為它在定義的數據分區范圍之外&#65377; SQLSTATE = 22525


                此時我們對查看示例分區表中的記錄,通過在WHERE子句中指定分區鍵的值,可以能夠避免掃描不相關的數據,直接從DATAPARTITION1數據分區中得到想要的記錄,從而提高查詢處理性能,具體如清單16所示:

            - - 清單16 .查詢示例分區表TEST3 

            C:\> db2 select id,rq from test3 where rq='2007-01-10' ID RQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 2007-01-10 1 條記錄已選擇&#65377;


                如果想在范圍之間允許存在間隔,可以使用MINVALUE和MAXVALUE指定間隔的范圍,MINVALUE表示最小的值,就是比你插入的任何值都會小的意思,MAXVALUE表示最大的值,就是比你插入的任何值都要大的意思?對示例分區表TEST3,我們可以增量兩個數據分區:
            ? 數據分區OTHERS1,范圍從MINVALUE到 ” 2007-01-01” ,不包含” 2007-01-01”;所有比” 2007-01-01 ”小的值,都會放入到此分區中?
            ? 數據分區OTHERS2,范圍從 ” 2008-01-01” 到MAXVALUE,包含” 2008-01-01”;所有比 ” 2008-01-01” 大的值,都會放入到此分區中?
            具體如清單17中藍色標記部分所示:

            - - 清單17 .手工創建示例分區表TEST3 

            C:\> db2 drop table test3 DB20000I SQL命令成功完成? C:\> db2 CREATE TABLE TEST3 ( ID INTEGER NOT NULL , RQ DATE NOT NULL , IMAGE BLOB (1 M ) NOT NULL LOGGED NOT COMPACT ) PARTITION BY RANGE (RQ NULLS LAST) (PARTITION DATAPATITION1 STARTING FROM ('2007-01-01') INCLUSIVE ENDING AT ('2007-02-01') EXCLUSIVE IN TABLESPACE1 LONG IN LARGETBS1 , PARTITION DATAPATITION2 STARTING FROM ('2007-02-01') INCLUSIVE ENDING AT ('2007-03-01') EXCLUSIVE IN TABLESPACE2 LONG IN LARGETBS2 , PARTITION DATAPATITION3 STARTING FROM ('2007-03-01') INCLUSIVE ENDING AT ('2007-04-01') EXCLUSIVE IN TABLESPACE3 LONG IN LARGETBS3 , PARTITION DATAPATITION4 STARTING FROM ('2007-04-01') INCLUSIVE ENDING AT ('2007-05-01') EXCLUSIVE IN TABLESPACE1 LONG IN LARGETBS1 , PARTITION DATAPATITION5 STARTING FROM ('2007-05-01') INCLUSIVE ENDING AT ('2007-06-01') EXCLUSIVE IN TABLESPACE2 LONG IN LARGETBS2 ,PARTITION DATAPATITION6 STARTING FROM ('2007-06-1') INCLUSIVE ENDING AT ('2007-07-1') EXCLUSIVE IN TABLESPACE3 LONG IN LARGETBS3 , PARTITION DATAPATITION7 STARTING FROM ('2007-07-01') INCLUSIVE ENDING AT ('2007-08-01') EXCLUSIVE IN TABLESPACE1 LONG IN LARGETBS1 , PARTITION DATAPATITION8 STARTING FROM ('2007-08-01') INCLUSIVE ENDING AT ('2007-09-01') EXCLUSIVE IN TABLESPACE2 LONG IN LARGETBS2 , PARTITION DATAPATITION9 STARTING FROM ('2007-09-01') INCLUSIVE ENDING AT ('2007-10-01') EXCLUSIVE IN TABLESPACE3 LONG IN LARGETBS3 , PARTITION DATAPATITION10 STARTING FROM ('2007-10-01') INCLUSIVE ENDING AT ('2007-11-01') EXCLUSIVE IN TABLESPACE1 LONG IN LARGETBS1 , PARTITION DATAPATITION11 STARTING FROM ('2007-11-01') INCLUSIVE ENDING AT ('2007-12-01') EXCLUSIVE IN TABLESPACE2 LONG IN LARGETBS2 , PARTITION DATAPATITION12 STARTING FROM ('2007-12-01') INCLUSIVE ENDING AT ('2007-12-31') EXCLUSIVE IN TABLESPACE3 LONG IN LARGETBS3 ,PARTITION OTHERS1 STARTING FROM (MINVALUE) EXCLUSIVE ENDING AT ('2007-01-01') EXCLUSIVE IN TABLESPACE1 LONG IN LARGETBS1 , PARTITION OTHERS2 STARTING FROM ('2008-01-01') INCLUSIVE ENDING AT (MAXVALUE) EXCLUSIVE IN TABLESPACE2 LONG IN LARGETBS2 ) INDEX IN USERSPACE1 DB20000I SQL命令成功完成?


                此時我們再次插入清單15中所插入的值,就可以成功了,具體如清單18所示:

            - - 清單18 .對示例分區表TEST3插入一條記錄 

            C:\> DB2 INSERT INTO TEST3 VALUES (1,'2006-01-10' , blob ( ' the first rows ' ) ) DB20000I SQL命令成功完成?



                對清單10中,把數值型的列作為表分區鍵,也可以用手工的方式進行創建,具體如清單19所示:

            - - 清單19 .創建示例分區表TEST4 

            C:\> DB2 CREATE TABLE RHETTE.TEST4 ( COL1 INTEGER NOT NULL , COL2 BIGINT NOT NULL ) PARTITION BY RANGE ( COL2 NULLS LAST ) ( PARTITION DATAPARTION1 STARTING FROM ( 1 ) INCLUSIVE ENDING AT ( 10 ) INCLUSIVE IN TABLESPACE1 , PARTITION DATAPARTITION2 STARTING FROM ( 11 ) INCLUSIVE ENDING AT ( 20 ) INCLUSIVE ) DB20000I SQL命令成功完成?

                使用手工方式創建分區表可以將多個列用作表分區鍵,比如我們在DB2CLP窗口中創建示例分區表TEST5,具體如清單20所示:

            - - 清單20 .創建示例分區表TEST5 

            C:\> DB2 CREATE TABLE TEST5 ( year INT , month INT ) PARTITION BY RANGE( year , month ) ( STARTING FROM ( 2007 , 1 ) ENDING ( 2007 , 3 ) IN TABLESPACE1 , ENDING ( 2007 , 6 ) IN TABLESPACE2 , ENDING ( 2007 , 9 ) IN TABLESPACE3 ) DB20000I SQL命令成功完成?
                命令成功完成,這樣我們就成功地創建了示例分區表TEST5,其包含3個數據分區,即2007年前3個季度,每個季度一個數據分區?需要注意的是,當將多個列用作表分區鍵時,將把這些列視為組合鍵(類似于索引中的組合鍵),其中,后面的列依賴于前面的列?指定的每個起始值或結束值(所有列一起)不能超出512個字符?此限制與 SYSCAT.DATAPARTITIONS目錄視圖中的LOWVALUE和HIGHVALUE 列大小對應?如果指定超出512個字符的起始值或結束值,就會導致錯誤SQL0636N,原因碼為9? 表分區是多列的,而不是多維的?在表分區中,使用的所有列都包含在單個維中?
            另外,還可以將生成列用作表分區鍵?接下來我們在DB2CLP窗口中,創建示例分區表TEST6,其包含 12 個數據分區的表,即每個月一個數據分區?對于任何年份,一月份的所有行都將被放到第一個數據分區中,二月份的行將被放到第二個數據分區中,依此類推,具體如清單21所示:
            - - 清單21 .創建示例分區表TEST6 

            C:\> DB2 CREATE TABLE TEST6 ( RQ date,YF int GENERATED ALWAYS AS ( month( RQ ) ) ) PARTITION BY RANGE ( YF ) (STARTING FROM 1 ENDING AT 12 EVERY 1 ) DB20000I SQL命令成功完成?



                命令成功完成,這樣我們成功創建了示例分區表TEST6,需要注意的是對于表分區鍵中使用的生成列,不能改變或刪除其表達式?不允許對表分區鍵中使用的列添加生成列表達式?對于表分區鍵中使用的列,如果嘗試添加?刪除或改變該列的生成列表達式,就會導致錯誤(SQL0270N,原因碼為52)?
            超级碰碰碰碰97久久久久| 午夜精品久久久久久影视777| 久久精品卫校国产小美女| 亚洲第一极品精品无码久久| 久久久久99精品成人片试看 | 成人久久精品一区二区三区| 久久青草国产精品一区| 亚洲美日韩Av中文字幕无码久久久妻妇 | 无码人妻精品一区二区三区久久| 久久久久亚洲AV无码网站| 久久成人精品| 国产Av激情久久无码天堂| 思思久久99热免费精品6| 久久精品国产91久久麻豆自制| 亚洲国产成人久久综合野外| 久久精品国产秦先生| 亚洲中文久久精品无码ww16| 久久99精品久久久久久噜噜| 精品久久久久久无码专区| 国产香蕉久久精品综合网| 久久本道久久综合伊人| 久久天堂电影网| 久久66热人妻偷产精品9| 久久强奷乱码老熟女网站| 久久久噜噜噜久久中文字幕色伊伊| 久久99国产精品久久| 久久精品麻豆日日躁夜夜躁| 欧美精品乱码99久久蜜桃| 久久人人超碰精品CAOPOREN| 国内精品久久久久久久久电影网| 久久国产乱子精品免费女| 国产精品一久久香蕉国产线看| 精品国产乱码久久久久软件| 亚洲国产成人精品久久久国产成人一区二区三区综 | 精品久久久无码21p发布| 久久夜色撩人精品国产| 久久人人爽人人爽人人片AV麻豆| 国产精品日韩欧美久久综合| 99久久免费国产精品| 久久激情五月丁香伊人| 久久亚洲AV永久无码精品|