日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

DB2 9表分区

發(fā)布時(shí)間:2023/12/29 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DB2 9表分区 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

DB2 9表分區(qū)

開(kāi)始之前

CREATE TABLE 語(yǔ)句的 PARTITION BY 子句指定了表數(shù)據(jù)的分區(qū)。該定義中使用的列被稱(chēng)為表分區(qū)鍵列。

關(guān)于該特性的詳細(xì)說(shuō)明可參見(jiàn) “Table partitioning in DB2 9”(developerWorks,2006 年 5 月)。

表分區(qū)特性提供以下收益:

  • 表數(shù)據(jù)可輕易實(shí)現(xiàn)轉(zhuǎn)入和轉(zhuǎn)出
  • 對(duì)大型表的管理更加輕松
  • 靈活的索引放置
  • 更高的業(yè)務(wù)智能樣式查詢(xún)的性能

關(guān)于本教程

本教程中的練習(xí)將引領(lǐng)您使用表分區(qū)特性,并演示了表數(shù)據(jù)的轉(zhuǎn)入轉(zhuǎn)出、更輕松的大型表管理、靈活的索引放置和對(duì)業(yè)務(wù)智能樣式查詢(xún)的性能改善。

這些練習(xí)旨在演示上述各領(lǐng)域內(nèi)的一個(gè)或多個(gè)任務(wù)。

目標(biāo)

本教程的目標(biāo)是在以下方面探究 DB2 9 范圍分區(qū)的特性和優(yōu)點(diǎn):

  • 創(chuàng)建范圍分區(qū)表

  • 分區(qū)的轉(zhuǎn)入和轉(zhuǎn)出

  • 分區(qū)表的管理

  • 索引管理和放置

先決條件

本教程的目標(biāo)讀者是那些技能和經(jīng)驗(yàn)剛剛邁入中級(jí)水平的 DB2 專(zhuān)業(yè)人員。要學(xué)習(xí)本教程,您應(yīng)該熟悉 DB2 命令行、DB2 管理工具的使用,還應(yīng)具備 SQL 實(shí)踐經(jīng)驗(yàn)。

系統(tǒng)需求

要運(yùn)行本教程的示例,需要具備以下條件:

  • DB2 9 Data Server
  • Microsoft? Windows? 2000 或更高版本,以及一個(gè)具有管理員權(quán)限的帳戶(hù),或具有根訪問(wèn)權(quán)限的 Linux?(驗(yàn)證版)。
  • 確保系統(tǒng)中的 Java Runtime Environment 是 1.4.2 或更高版本。
  • 參考 DB2 9 系統(tǒng)需求頁(yè)面 確保您的硬件符合要求。

可通過(guò)上面的鏈接獲取 DB2 9 Express C。關(guān)于安裝 DB2 的步驟請(qǐng)參考 “DB2 XML 評(píng)估指南”(developerWorks,2006 年 6 月)。若未改動(dòng) DB2 的配置,安裝后 DB2 將自動(dòng)啟動(dòng)。

使用 partition.zip 文件提供的示例腳本和數(shù)據(jù)演示本教程的概念。將其內(nèi)容解壓縮到 scripts 子目錄(C:\scripts 或 home/userid/scripts)。本教程中將該目錄簡(jiǎn)稱(chēng)為 stmm_scripts。教程假設(shè)您使用的是 DB2 默認(rèn)安裝目錄,并且所有的 DB2 練習(xí)都通過(guò)一個(gè)數(shù)據(jù)庫(kù)管理員 ID 執(zhí)行。

創(chuàng)建分區(qū)表

這個(gè)實(shí)驗(yàn)將探討創(chuàng)建分區(qū)表、將數(shù)據(jù)載入分區(qū)表以及使用 describe 命令來(lái)說(shuō)明表范圍的方法:

  • 您將登錄并為所有的練習(xí)設(shè)置基本環(huán)境。
  • 您將創(chuàng)建不同格式的分區(qū)表并加載數(shù)據(jù)。
  • 您將使用 DB2 命令和 SQL 查看結(jié)果。
  • 將對(duì) DB2 9 表范圍分區(qū)進(jìn)行概述。
  • 登錄和基本指令

    圖 1. 基本設(shè)置

  • 登錄到您的機(jī)器,如圖 1 所示,使用 db2inst1。

  • 打開(kāi)終端窗口(Linux)或 DB2 命令窗口(windows)。

  • 切換到 scripts 子目錄。

    清單 1. 切換目錄

    cd c:\scripts

  • 使用db2start 命令啟動(dòng) DB2,并連接到 SAMPLE 數(shù)據(jù)庫(kù)。

    清單 2. StartDB2
    db2start db2 connect to SAMPLE
  • 創(chuàng)建基本分區(qū)表

    這一節(jié)將介紹分區(qū)表的基本創(chuàng)建和加載。您將創(chuàng)建不同格式的表、驗(yàn)證創(chuàng)建結(jié)果、加載數(shù)據(jù)并對(duì)表進(jìn)行查詢(xún)。

  • 使用如下的數(shù)據(jù)定義語(yǔ)言(DDL)創(chuàng)建具有四個(gè)范圍的 LINEITEM 表:
  • 清單 3. 創(chuàng)建表

    CREATE TABLE LINEITEM ( l_orderkey DECIMAL(10,0) NOT NULL,l_partkey 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 '1/1/1992' ENDING '30/06/1992',STARTING '1/7/1992' ENDING '31/12/1992',STARTING '1/1/1993' ENDING '30/6/1993',STARTING '1/7/1993' ENDING '31/12/1993')
  • 創(chuàng)建該表的 SQL 語(yǔ)句位于 EX1-6.sql 文件中,可使用如下命令運(yùn)行該文件:

    清單 4. 運(yùn)行 EX1-6

    db2 –vtf EX1-6.sql

  • 使用下面的命令說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)的范圍:

    清單 5. 說(shuō)明

    db2 describe data partitions for table LINEITEM

    圖 2. 說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍
  • 注意:創(chuàng)建了四個(gè)數(shù)據(jù)分區(qū)。其中的范圍包括邊界值。

  • 將數(shù)據(jù)導(dǎo)入到 LINEITEM 表。該操作的導(dǎo)入命令位于 EX1-8.sql 文件中,可使用如下命令運(yùn)行:

    清單 6. 帶有拒絕的加載

    db2 –vtf EX1-8.sql

    圖 3. 將數(shù)據(jù)導(dǎo)入到 LINEITEM 表
  • 注意:導(dǎo)入時(shí)拒絕了 729 行數(shù)據(jù),這是因?yàn)樗鼈儾痪哂形挥诋?dāng)前 LINEITEM 表的數(shù)據(jù)分區(qū)定義范圍內(nèi)的 l_shipdate。

  • 標(biāo)量函數(shù)可用于顯示行所屬的數(shù)據(jù)分區(qū)號(hào)(datapartitionnum)。執(zhí)行以下示例 SQL 查看標(biāo)量函數(shù)的輸出:

    清單 7. 查詢(xún) - 匹配日期的分區(qū)
  • db2 “select datapartitionnum(l_shipdate) as PartitionId, l_shipdate from lineitem where l_shipdate between01/06/1992and31/07/1992order by l_shipdate”
    圖 4. 標(biāo)量函數(shù)的輸出

  • 注意:標(biāo)量函數(shù)(datapartitionnum)返回的值和 describe 命令返回的是同一個(gè) PartitionId。該語(yǔ)句的子句間使用的謂詞范圍超出了 PartitionId 0 和 PartitionId 1 的邊界
  • 具有全部范圍的分區(qū)表

  • 創(chuàng)建具有兩個(gè)額外數(shù)據(jù)分區(qū)的新 LINEITEM 表,其中一個(gè)分區(qū)用來(lái)捕獲低于當(dāng)前范圍的值,另一個(gè)分區(qū)用來(lái)捕獲高于當(dāng)前范圍的值。首先使用下面的命令刪除現(xiàn)有的 LINEITEM 分區(qū)表:

    清單 8. 刪除表

    db2 drop TABLE LINEITEM

  • 然后使用如下 DDL 創(chuàng)建 LINEITEM 表的新版本:

    清單 9. 創(chuàng)建表
    CREATE TABLE LINEITEM ( l_orderkey DECIMAL(10,0) NOT NULL,l_partkey 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/1992' ENDING '30/06/1992',STARTING '1/7/1992' ENDING '31/12/1992',STARTING '1/1/1993' ENDING '30/6/1993',STARTING '1/7/1993' ENDING '31/12/1993',ENDING MAXVALUE)
  • 創(chuàng)建該表的 SQL 位于 EX1-10.sql 文件中,可使用下列命令運(yùn)行:

    清單 10. 運(yùn)行 EX1-10

    db2 –vtf EX1-10.sql

  • 使用下面的命令說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍。

    清單 11. 說(shuō)明

    db2 describe data partitions for table LINEITEM

    圖 5. 說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍
  • 注意:新的 MINVALUE 范圍具有一個(gè)最高值,該值和下一個(gè)數(shù)據(jù)分區(qū)開(kāi)始部分的值相等,但它并不包含該值。MAXVALUE 范圍具有一個(gè)最低值,該值和前一個(gè)范圍結(jié)束部分的值相等,但它不包含該值。這將創(chuàng)建一個(gè)無(wú)間隙的連續(xù)范圍。

  • 將數(shù)據(jù)導(dǎo)入到 LINEITEM 表中。該操作的導(dǎo)入命令位于 EX1-8.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 12. 全面加載

    db2 –vtf EX1-8.sql

    圖 6. 將數(shù)據(jù)導(dǎo)入到 LINEITEM 表中
  • 具有生成范圍的分區(qū)表

  • 創(chuàng)建一個(gè)新 LINEITEM 表,它具有從 1992 年 1 月 1 日到 1998 年 12 月 31 日按月劃分的數(shù)據(jù)分區(qū)生成范圍。同樣,添加 minvalue 和 maxvalue 范圍來(lái)存放具有超過(guò)此范圍的 l_shipdate 的值的行。首先使用以下命令刪除現(xiàn)有的 LINEITEM 分區(qū)表:

    清單 13. 刪除表

    db2 drop TABLE LINEITEM

    然后使用如下 DDL 創(chuàng)建 LINEITEM 表的新版本:

    清單 14. 創(chuàng)建表
  • 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/1992' ENDING '31/12/1998' EVERY 1 MONTH,ENDING MAXVALUE);
  • 創(chuàng)建該表的 SQL 位于 EX1-13.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 15. 運(yùn)行 EX1-13

    db2 –vtf EX1-13.sql

  • 使用如下命令來(lái)說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍:

    清單 16. 說(shuō)明

    db2 describe data partitions for table LINEITEM

    圖 7. 說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍
  • 注意:創(chuàng)建了 86 個(gè)數(shù)據(jù)分區(qū),但是沒(méi)有包括這些范圍的最高值,因?yàn)檫@些最高值將和之后的數(shù)據(jù)分區(qū)的最低值重疊。

  • 將數(shù)據(jù)導(dǎo)入到 LINEITEM 表。此操作的導(dǎo)入命令位于 EX1-8.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 17. 加載并生成

    db2 –vtf EX1-8.sql

    圖 8. 將數(shù)據(jù)導(dǎo)入到 LINEITEM 表
  • 使用下面的 SQL 來(lái)驗(yàn)證 LINEITEM 表每一個(gè)數(shù)據(jù)分區(qū)的行數(shù):

    清單 18. 查詢(xún)數(shù)據(jù)
    db2 “select year(l_shipdate) as year, month(l_shipdate) as month, count(*) as count from lineitemgroup by year(l_shipdate), month(l_shipdate)order by 1, 2

    使用以下的 SQL 語(yǔ)句驗(yàn)證 LINEITEM 表的每一個(gè)數(shù)據(jù)分區(qū)的行數(shù):

    清單 19. 查詢(xún)數(shù)據(jù)腳本
    db2 –vtf EX1-16.sql
    圖 9. 檢驗(yàn)行數(shù)

  • 注意:執(zhí)行加載操作后,86 個(gè)范圍中有 82 個(gè)范圍包含一個(gè)或多個(gè)行。
  • 放置分區(qū)表

    該實(shí)驗(yàn)探討放置分區(qū)表以及使用 describe 命令說(shuō)明表內(nèi)的范圍和放置情況的方法:

  • 您將為數(shù)據(jù)放置練習(xí)創(chuàng)建新的表空間。
  • 你將創(chuàng)建不同格式的分區(qū)表。
  • 您將使用 db2 命令和 SQL 查看結(jié)果。
  • 基本環(huán)境設(shè)置

  • 使用

    describe data partitions

    命令以及

    show detail

    方法來(lái)顯示表空間的分區(qū)放置。

    清單 20. 創(chuàng)建表

    db2 describe data partitions for table LINEITEM show detail

    圖 10. 表空間的分區(qū)放置
  • 注意:TableSpID 列給出了包含分區(qū)的表空間的 ID 號(hào)。在本例中,TableSpID 是 ‘3’。

  • 使用

    list tablespaces

    命令標(biāo)識(shí)與 TableSpId 相關(guān)聯(lián)的表空間。

    清單 21. 說(shuō)明

    db2 list tablespaces

    圖 11. 標(biāo)識(shí)表空間
  • 注意:相應(yīng)值為 ‘2’ 的 TableSpID 是 USERSPACE1 或默認(rèn)的表空間。

  • 現(xiàn)在將創(chuàng)建五個(gè)表空間來(lái)說(shuō)明不同的放置選項(xiàng)。使用如下命令:

    清單 22. 說(shuō)明
  • db2 create tablespace dms_d1 managed by database using (file 'c:\ts1' 10000); db2 create tablespace dms_d2 managed by database using (file 'c:\ts2' 10000); db2 create tablespace dms_d3 managed by database using (file 'c:\ts3' 10000); db2 create tablespace dms_d4 managed by database using (file 'c:\ts4' 10000); db2 create tablespace dms_i1 managed by database using (file 'c:\ts5' 10000);
  • 創(chuàng)建該表空間的 SQL 位于 EX2-3.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 23. 查詢(xún)數(shù)據(jù)腳本

    db2 –vtf EX2-3.sql

  • 創(chuàng)建一個(gè)新的 LINEITEM 表,具有位于 dms_d1 和 dms_d2 表空間的生成分區(qū)集。首先,使用如下命令刪除現(xiàn)有的 LINEITEM 分區(qū)表:

    清單 24. 刪除表

    db2 drop TABLE LINEITEM

    然后,使用下面的 DDL 創(chuàng)建 LINEITEM 表的新版本:

    清單 25. 創(chuàng)建表
  • CREATE TABLE LINEITEM (l_orderkey DECIMAL(10,0) NOT NULL,l_partkey 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))IN DMS_D1, DMS_D2PARTITION BY RANGE(l_shipdate) (STARTING MINVALUE,STARTING '1/1/1992' ENDING '31/12/1998' EVERY 1 MONTH,ENDING MAXVALUE);
  • 創(chuàng)建該表的 SQL 位于 EX2-4.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 26. 運(yùn)行 EX2-4

    db2 –vtf EX2-4.sql

  • 使用下面的命令說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍:

    清單 27. 說(shuō)明

    db2 describe data partitions for table LINEITEM show detail

    圖 12. 說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍
  • 圖 13. 分區(qū)

  • 注意:TableSpID 列給出了包含分區(qū)的表空間的 ID 號(hào)。在本例中,TableSpID 為 4(對(duì)應(yīng)于 DMS_D1)或 5(對(duì)應(yīng)于 DMS_D2)。本例中將生成的分區(qū)依次分配給指定的表空間。
  • 分區(qū)的顯式放置

  • 創(chuàng)建一個(gè)具有四個(gè)數(shù)據(jù)分區(qū)的新 LINEITEM 表,每一個(gè)數(shù)據(jù)分區(qū)被顯式地放在表空間中。首先使用如下命令刪除現(xiàn)有的 LINEITEM 表:

    清單 28. 刪除表

    db2 drop TABLE LINEITEM

    然后使用下面的 DDL 創(chuàng)建 LINEITEM 表的新版本:

    清單 29. 創(chuàng)建表
  • CREATE TABLE LINEITEM(l_orderkey DECIMAL(10,0) NOT NULL,l_partkey 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 IN DMS_D1,STARTING '1/1/1992' ENDING '31/12/1992' IN DMS_D2,STARTING '1/1/1993' ENDING '31/12/1993' IN DMS_D3,ENDING MAXVALUE IN DMS_D4 );
  • 創(chuàng)建表的 SQL 位于 EX2-6.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 30. 運(yùn)行 EX2-6

    db2 –vtf EX2-6.sql

  • 使用下面的命令說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍:

    清單 31. 說(shuō)明

    db2 describe data partitions for table LINEITEM show detail

    圖 14. 說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍
  • 注意:在本例中,每一個(gè)分區(qū)被放置在一個(gè)不同的 TableSpID 中,這個(gè) TableSpID 和創(chuàng)建表的 DDL 中指定的表空間是相對(duì)應(yīng)的。

  • 創(chuàng)建一個(gè)具有四個(gè)數(shù)據(jù)分區(qū)的 LINEITEM 表,每一個(gè)數(shù)據(jù)分區(qū)被顯式地放在表空間并且索引被放在表空間 DMS_I1 中。 在這一步中,將引入命名分區(qū)的概念,而不是使用默認(rèn)的生成名稱(chēng)。 首先,使用下面的命令刪除現(xiàn)有的 LINEITEM 分區(qū)表:

    清單 32. 刪除表

    db2 drop TABLE LINEITEM

    然后,使用以下的 DDL 創(chuàng)建 LINEITEM 表的新版本:

    清單 33. 創(chuàng)建表
  • CREATE TABLE LINEITEM (l_orderkey DECIMAL(10,0) NOT NULL,l_partkey 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)) INDEX IN DMS_I1 PARTITION BY RANGE(l_shipdate) ( PART JAN1992 STARTING '1/1/1992' ENDING '30/6/1992' IN DMS_D1,PART JULY1992 STARTING '1/7/1992' ENDING '31/12/1992' IN DMS_D2,PART JAN 1993 STARTING '1/1/1993' ENDING '30/6/1993' IN DMS_D3,PART JULY1993 STARTING '1/7/1993' ENDING '31/12/1993' IN DMS_D4);
  • 創(chuàng)建表的 SQL 位于 EX2-8.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 34. 運(yùn)行 EX2-8

    db2 –vtf EX2-8.sql

  • 在 LINEITEM 表中創(chuàng)建一個(gè)索引,并將它放置在表空間 DMS_I1 中。使用如下 SQL:

    清單 35. 索引

    db2 “create index I_LINEITEM on LINEITEM(L_SHIPDATE) in DMS_I1”

  • 使用下面的 SQL 檢驗(yàn)和該表相關(guān)聯(lián)的索引的位置:

    清單 36. 說(shuō)明

    db2 “select tabname, index_tbspace from syscat.tables where tabname = ‘LINEITEM’”

    圖 15. 檢驗(yàn)索引的位置

  • 注意:索引空間是 DMS_I1。如果沒(méi)有為分區(qū)表指定表空間,那么默認(rèn)情況下索引位于連接著的第一個(gè)表空間。 在 CREATE TABLE 中定義表空間是很好的實(shí)踐。然而,無(wú)論您是否在創(chuàng)建表語(yǔ)句 ID 中指定索引表空間,這并不限制您將來(lái)放置索引的位置。您可以在 CREATE INDEX 語(yǔ)句本身顯式地指定索引表空間。 同一分區(qū)表的不同索引可以放置在不同的表空間。

  • 管理分區(qū)表

    這個(gè)實(shí)驗(yàn)將查看如何管理和操作分區(qū)表:

  • 您將添加和刪除分區(qū)。
  • 您將執(zhí)行對(duì)分區(qū)的轉(zhuǎn)入轉(zhuǎn)出操作。
  • 在執(zhí)行查看操作時(shí)將使用 DB2 命令和 SQL。
  • 使用現(xiàn)有的表添加一個(gè)新的分區(qū)

  • 將數(shù)據(jù)導(dǎo)入 LINEITEM 表。創(chuàng)建表空間的 SQL 位于 EX3-1.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 37. 導(dǎo)入數(shù)據(jù)

    db2 –vtf EX3-1.sql

    圖 16. 將數(shù)據(jù)導(dǎo)入到 LINEITEM 表
  • 注意:分區(qū)表中的記錄數(shù),以及將進(jìn)行連接和分離的記錄數(shù)對(duì)于說(shuō)明數(shù)據(jù)庫(kù)中的數(shù)據(jù)何時(shí)可用非常重要。

  • 創(chuàng)建一個(gè)名為 NP_LINEITEM 的新表。腳本 EX3-2.sql 創(chuàng)建一個(gè)具有 87 行的新表 NP_LINEITEM:

    清單 38. 新分區(qū)

    db2 –vtf EX3-2.sql

    圖 17. 將數(shù)據(jù)導(dǎo)入到 NP_LINEITEM 表
  • 使用下面的命令說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍:

    清單 39. 說(shuō)明
    db2 describe data partitions for table LINEITEM show detail
    圖 18. LINEITEM 表的分區(qū)

  • 注意:LINEITEM 表目前包含 4 個(gè)數(shù)據(jù)分區(qū)。

  • 使用Alter語(yǔ)句將一個(gè)新的分區(qū)連接(轉(zhuǎn)入)到現(xiàn)有的 LINEITEM 表。

    清單 40. 新分區(qū)
  • ALTER TABLE LINEITEM ATTACH PARTITION JAN1994 STARTING '1/1/1994' ENDING '30/6/1994' FROM NP_LINEITEM

    可以使用以下命令運(yùn)行腳本 EX3-4:

    清單 41. 新分區(qū)
    db2 –vtf EX3-4.sql
    圖 19. 腳本 EX3-4

  • 注意:LINEITEM 表被置于 SET INTEGRITY PENDING 狀態(tài)。

  • 連接后,使用

    describe data partitions

    命令來(lái)說(shuō)明為 LINEITEM 表創(chuàng)建的分區(qū)范圍:

    清單 42. 說(shuō)明

    db2 describe data partitions for table LINEITEM show detail

    圖 20. LINEITEM 表的分區(qū)
  • 注意

    :新數(shù)據(jù)分區(qū)(JAN1994)PartitionId 4 現(xiàn)在連接到了 LINEITEM 表。然而連接的分區(qū)的 AccessMode 值為 ‘N’ 并且 Status 的值為 ‘A’。 AccessMode 可能的值有:

    • D = 沒(méi)有數(shù)據(jù)移動(dòng)
    • F = 完全訪問(wèn)
    • N = 不訪問(wèn)
    • R = 只讀訪問(wèn)

    Status 可能的值有:

    • A = 數(shù)據(jù)分區(qū)是新連接的
    • D = 數(shù)據(jù)分區(qū)是分離的
    • I = 只有在執(zhí)行異步索引清除時(shí)才對(duì)條目位于目錄的分離的數(shù)據(jù)分區(qū)進(jìn)行維護(hù);當(dāng)所有引用分離數(shù)據(jù)分區(qū)的索引記錄刪除后,將刪除 STATUS 值為 ‘I’ 的行。
    • Empty string = 數(shù)據(jù)分區(qū)是可見(jiàn)的(普通狀態(tài))
  • 運(yùn)行兩個(gè)select count語(yǔ)句來(lái)檢查連接語(yǔ)句涉及的兩個(gè)表中數(shù)據(jù)的可用性。

    清單 43. Count Lineitem

    db2 “select count(*) from lineitem”

    圖 21. select count 語(yǔ)句的結(jié)果
  • [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-fHcMiLd2-1576419249173)(https://www.ibm.com/developerworks/cn/education/data/dm0612read/s25a.jpg)]

    注意:LINEITEM 表最初的分區(qū)是可用的,但是 PartitionId 4 中的新數(shù)據(jù)仍不可見(jiàn)。

    清單 44. Count np-lineitem
    db2 “select count(*) from np_lineitem”
    圖 22. select count 語(yǔ)句的結(jié)果

  • 注意:NP_LINEITEM 表現(xiàn)在是一個(gè)未定義的對(duì)象,在 LINEITEM 表內(nèi)只能將其作為一個(gè)分區(qū)使用。

  • 創(chuàng)建一個(gè)異常表并與 SET INTEGRITY 語(yǔ)句結(jié)合使用。執(zhí)行該操作的 DDL 位于 EX3-7.sql 文件,可使用下面的命令運(yùn)行該文件:

    清單 45. 異常表

    db2 –vtf EX3-7.sql

  • 對(duì) LINEITEM 分區(qū)表運(yùn)行set integrity語(yǔ)句 。

    清單 46. 設(shè)置完整性
  • SET INTEGRITY FOR LINEITEM <br> ALLOW WRITE ACCESS <br> IMMEDIATE CHECKED <br> FOR EXCEPTION IN LINEITEM USE LINEITEM_EX

    執(zhí)行該操作的 SQL 位于 EX3-8.sql 文件中,可以使用下面的命令運(yùn)行該文件:

    清單 47. 設(shè)置完整性
    db2 –vtf EX3-8.sql
    圖 23. EX3-8.sql 文件

  • 注意:SET INTEGRITY 對(duì)于檢查新連接的數(shù)據(jù)是否在范圍內(nèi)是必需的,它還執(zhí)行對(duì)索引和其他獨(dú)立對(duì)象(例如物化查詢(xún)表)所有必需的維護(hù)工作。只有得到 SET INTEGRITY 語(yǔ)句的允許,新的數(shù)據(jù)才能變?yōu)榭梢?jiàn)。然而,當(dāng)運(yùn)行 SET INTEGRITY 時(shí),可以對(duì) LINEITEM 表中的現(xiàn)有數(shù)據(jù)進(jìn)行完全訪問(wèn),包括讀和寫(xiě)操作。 用戶(hù)應(yīng)該執(zhí)行 SET INTEGRITY 事務(wù)從而能夠使用整個(gè)表。當(dāng)運(yùn)行 SET INTEGRITY 時(shí),不能夠?qū)Ρ韴?zhí)行 DDL 或其他實(shí)用類(lèi)型的操作。 在這個(gè)練習(xí)中,在 NP_LINEITEM 表中創(chuàng)建并被連接到 LINEITEM 表的所有的行,都在連接語(yǔ)句指定的范圍內(nèi)。如果這些行中存在超出此范圍的行,則需要在 SET INTEGRITY 語(yǔ)句中創(chuàng)建一個(gè)異常表來(lái)防止語(yǔ)句發(fā)生錯(cuò)誤。所以推薦您始終在 SET INTEGRITY 語(yǔ)句中包含一個(gè)異常表。如果沒(méi)有提供異常表的話,SET INTEGRITY 語(yǔ)句發(fā)現(xiàn)的錯(cuò)誤將導(dǎo)致語(yǔ)句失敗并且所有的工作都必須從頭做起。如果使用大量數(shù)據(jù)時(shí),這可能是一個(gè)長(zhǎng)期操作。有一點(diǎn)值得注意,如果 SET INTEGRITY 操作失敗,所有工作都需要重做,與之相比較,LOAD 僅僅拋棄存在問(wèn)題的行。

  • 對(duì) LINEITEM 表運(yùn)行select countSQL 以檢查連接的分區(qū)中數(shù)據(jù)的可用性:

    清單 48. Count Lineitem

    db2 “select count(*) from lineitem”

    圖 24. select count 語(yǔ)句的結(jié)果
  • [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ReUztOvx-1576419249176)(https://www.ibm.com/developerworks/cn/education/data/dm0612read/s26b.jpg)]

  • 注意:成功執(zhí)行 SET INTEGRITY 操作后,LINEITEM 表應(yīng)包含 PartitionId 4 的數(shù)據(jù)。
  • 從分區(qū)表中分離一個(gè)分區(qū)

  • 使用describe data partitions show detail
    命令來(lái)標(biāo)識(shí)一個(gè)分區(qū)的 PartitionName,您將把這個(gè)分區(qū)從 LINEITEM 分區(qū)表中分離(轉(zhuǎn)出)出來(lái)。

    清單 49. 說(shuō)明表

    db2 describe data partitions for table LINEITEM show detail

    圖 25. LINEITEM 表的分區(qū)
  • 注意:將分離最早的分區(qū)范圍 PartitionId 0。該分區(qū)的 PartitionName 是 JAN1992。將在 DETACH 操作中使用它來(lái)標(biāo)識(shí)被轉(zhuǎn)出的分區(qū)。同樣還需注意成功執(zhí)行了 SET INTEGRITY 操作后,分區(qū) JAN1994 的 AccessMode 的值為 ‘F’,Status 值為空。TableSpId、PartObjId 和 LongTblSpId 的結(jié)果可能和這里顯示的不一樣。

  • 使用

    Alter

    語(yǔ)句將 JAN1992 從 LINEITEM 表中分離(轉(zhuǎn)出)。

    清單 50. Alter 表

    ALTER TABLE LINEITEM DETACH PARTITION JAN1992 INTO LINEITEM_JAN1992

    創(chuàng)建文件的 SQL 位于 EX3-11.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 51. Alter 表

    db2 –vtf EX3-11.sql.

    注意:將 JAN1992 成功分離后,將創(chuàng)建一個(gè)新的表 LINEITEM_JAN1992。在DETACH操作中沒(méi)有涉及數(shù)據(jù)移動(dòng),并且位于相同表空間的新表的行為和它作為 LINEITEM 分區(qū)表的一部分時(shí)是一樣的。此時(shí)不需要對(duì) LINEITEM 表運(yùn)行SET INTEGRITY語(yǔ)句,因?yàn)闆](méi)有對(duì) LINEITEM 表定義的 MQTs。 還有一點(diǎn)值得注意,如果從 Multi-Dimensional Clustering(MDC)分離一個(gè)分區(qū)從而創(chuàng)建了一個(gè)新表時(shí),這個(gè)表也將是一個(gè) MDC。這個(gè)規(guī)則同樣適用于下面這個(gè)情況:從一個(gè)分布式表中分離分區(qū)從而在相同的分區(qū)組創(chuàng)建分布式表。執(zhí)行DETACH操作后產(chǎn)生的表使用 MDC 索引定義而不是其他的索引。對(duì)于 MDC,在首次訪問(wèn)連接的表時(shí)將重新構(gòu)建索引。在這種情況下,將自動(dòng)對(duì)分離的分區(qū)進(jìn)行索引清除操作。將從執(zhí)行DETACH操作的用戶(hù) ID 繼承索引的模式、權(quán)限和表空間。

  • 運(yùn)行兩個(gè)select count語(yǔ)句檢查DETACH語(yǔ)句涉及的兩個(gè)表中的數(shù)據(jù)的可用性。

    清單 52. Count Lineitem_jan1992

    db2 “select count(*) from lineitem_jan1992”

    圖 26. select count 語(yǔ)句的結(jié)果
  • [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-EgIPyQFS-1576419249177)(https://www.ibm.com/developerworks/cn/education/data/dm0612read/s28a.jpg)]

    注意:創(chuàng)建的 LINEITEM_JAN1992 表包含 38 行,它被包含在 LINEITEM 分區(qū)表的 JAN1992 分區(qū)中。

    清單 53. Count lineitem
    db2 “select count(*) from lineitem”
    圖 27. select count 語(yǔ)句的結(jié)果

  • 注意:此時(shí) LINEITEM 表完全可用,并且不包括 PART0 中的數(shù)據(jù)。

  • 當(dāng)數(shù)據(jù)被移動(dòng)到分區(qū)表中,或當(dāng)希望將數(shù)據(jù)加載到或直接插入分區(qū)表中時(shí),一個(gè)更合適的方法是向現(xiàn)有的分區(qū)表添加一個(gè)空的分區(qū)。使用下面的命令向現(xiàn)有的 LINEITEM 表添加一個(gè)空的分區(qū):

    清單 54. 說(shuō)明
  • db2 “ALTER TABLE LINEITEM ADD PARTITION JULY1994 STARTING '1/7/1994' ENDING '31/12/1994'
    圖 28. 向現(xiàn)有的 LINEITEM 表添加一個(gè)空的分區(qū)

    使用 describe data partitions show detail 命令來(lái)檢驗(yàn) PartitionName 為 JULY1994 的分區(qū)是否被添加到 LINEITEM 中:

    清單 55. 說(shuō)明
    db2 describe data partitions for table LINEITEM show detail
    圖 29. LINEITEM 表的分區(qū)

    分區(qū)表的訪問(wèn)計(jì)劃

    本實(shí)驗(yàn)將研究如何在訪問(wèn)計(jì)劃中描述分區(qū)表:

  • 您將更新分區(qū)表中的統(tǒng)計(jì)信息。

  • 您將使用 db2expln 命令并分析結(jié)果。

  • 您將在執(zhí)行查看的操作中使用 DB2 命令和 SQL 。

  • 對(duì) LINEITEM 表執(zhí)行RUNSTATS操作:

    清單 56. Runstats

    db2 runstats on table db2inst1.lineitem

  • 說(shuō)明以下 SQL 語(yǔ)句并檢查說(shuō)明輸出:

    清單 57. 說(shuō)明

    db2 “select l_shipdate,sum(l_quantity) from LINEITEM group by l_shipdate”

    要進(jìn)行說(shuō)明的 SQL 位于 EX4-2.sql 文件,可以使用下面的命令運(yùn)行該文件:

    清單 58. 說(shuō)明輸出

    db2expln –d SAMPLE –t –f EX4-2.sql

    圖 30. 說(shuō)明輸出
  • [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-0PqTV96B-1576419249179)(https://www.ibm.com/developerworks/cn/education/data/dm0612read/s30.jpg)]

  • 注意:該 SQL 執(zhí)行了 LINEITEM 表的索引掃描。說(shuō)明輸出中有一個(gè)關(guān)于表分區(qū)的要點(diǎn)需要注意,所訪問(wèn)的表是被分區(qū)的,并且在掃描過(guò)程中所有數(shù)據(jù)分區(qū)都將被訪問(wèn)。

  • 說(shuō)明下面的 SQL 語(yǔ)句并檢查說(shuō)明輸出:

    清單 59. 說(shuō)明
  • db2 “select l_shipdate, l_partkey, l_returnflag from LINEITEM where l_shipdate between '01/01/1993' and '31/08/1993' and l_partkey = 49981

    要進(jìn)行說(shuō)明的 SQL 語(yǔ)句位于 EX4-3.sql 文件中,可使用下面的命令運(yùn)行該文件:

    清單 60. 說(shuō)明輸出
    db2expln –d SAMPLE –t –f EX4-3.sql
    圖 31. 說(shuō)明輸出

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-8wvYnGp1-1576419249180)(https://www.ibm.com/developerworks/cn/education/data/dm0612read/s31.jpg)]

  • 注意:這個(gè) SQL 語(yǔ)句執(zhí)行了 LINEITEM 表的索引掃描。在本例中,可以看到優(yōu)化器能夠執(zhí)行數(shù)據(jù)分區(qū)排除操作。在說(shuō)明輸出中要注意的是關(guān)于表分區(qū),訪問(wèn)的表是被分區(qū)的,將執(zhí)行分區(qū)排除功能以及刪除活動(dòng)數(shù)據(jù)分區(qū)的值。 在本例中,活動(dòng)的數(shù)據(jù)分區(qū)為 1-2。這里引用的是 syscat.datapartitions 中的序列號(hào)(seqno)而不是 describe data partitions 命令中的 PartitionId。

  • 使用下面的 SQL 確定在前面說(shuō)明示例中活動(dòng)的分區(qū)的名稱(chēng):

    清單 61. 說(shuō)明
  • db2 “select seqno,datapartitionname from syscat.datapartitions where tabname = ‘LINEITEM’ order by seqno”
    圖 32. 分區(qū)名稱(chēng)

  • 注意:序列號(hào) 1 和 2 分別映射的是 JAN1993 和 JULY1993 分區(qū)名稱(chēng)。
  • 結(jié)束語(yǔ)

    本教程基于 IBM DB2 9 Data Partitioning 特性。您已在以下幾個(gè)方面獲得了第一手的經(jīng)驗(yàn):

    • 如何定義分區(qū)表
    • 如何將分區(qū)表放置在底層磁盤(pán)子系統(tǒng)
    • 如何維護(hù)分區(qū)表
    • 如何使用 DB2 Explain 說(shuō)明分區(qū)表

    范圍分區(qū)將數(shù)據(jù)映射到基于關(guān)鍵值范圍的分區(qū),用戶(hù)為每一個(gè)分區(qū)建立關(guān)鍵值范圍。例如,企業(yè)通常希望以月份為單位,將銷(xiāo)售數(shù)據(jù)劃分到各月的分區(qū)中。與 MDC 功能集合使用時(shí),范圍分區(qū)將更加方便地定位數(shù)據(jù),從而加快通過(guò)復(fù)雜查詢(xún)檢索信息的速度。

    下載資源

    本文的示例腳本和數(shù)據(jù) (exfiles.zip | 60KB)
    鏈接:https://pan.baidu.com/s/1cDtoMvkfUQZ_tmhHrcrocA
    提取碼:7zev

    參考

    https://www.ibm.com/developerworks/cn/education/data/dm0612read/dm0612read.html?from=singlemessage&isappinstalled=0#ibm-pcon

    總結(jié)

    以上是生活随笔為你收集整理的DB2 9表分区的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 三级网站在线免费观看 | 成人av一区二区三区在线观看 | 国产精品熟女一区二区不卡 | 日韩六区 | av九九九 | 日韩一区二区视频在线观看 | 亚洲第一色在线 | 超碰123| 亚洲av无码潮喷在线观看 | 97在线观视频免费观看 | 一级成人免费视频 | 东京久久 | 女~淫辱の触手3d动漫 | 色综合五月婷婷 | 在线亚洲人成电影网站色www | 天天操夜夜操视频 | 亚洲爱情岛论坛永久 | 人人草人人爱 | 日日干,夜夜操 | 天天综合网入口 | 一本久道综合色婷婷五月 | 中文不卡av | 91蜜桃网 | 想要xx视频 | 日韩av在线网址 | 中文字幕高潮 | 亚洲热热 | 一区二区免费在线视频 | 成人国产精品免费观看动漫 | 99一级片 | 国产资源第一页 | 日本伦理片在线播放 | 欧美性欧美zzzzzzzzz | 国产精品偷伦视频免费观看了 | 精品一区二区三区电影 | 天天插天天搞 | 91免费国产在线观看 | 精品一区二区三区蜜桃 | 国产一区中文字幕 | 九九视频这里只有精品 | 黄瓜视频在线免费看 | 国产综合在线播放 | 欧美成人看片黄a免费看 | 亚洲精品欧美激情 | 色香av | 久久精品男人的天堂 | 真实人妻互换毛片视频 | 亚洲欧美另类综合 | 欧美日韩在线观看成人 | 亚洲在线免费 | 国精品人妻无码一区二区三区喝尿 | 自由成熟xxxx色视频 | 国产av一区二区三区传媒 | 爱乃なみ加勒比在线播放 | 伊人成人在线观看 | 国产免费一区视频观看免费 | 中文字幕在线视频网 | 久操视频在线播放 | 国产精品51麻豆cm传媒 | 免看黄大片aa | 久久一热| 妺妺窝人体色WWW精品 | 欧美日韩国产综合网 | www.久久成人 | 69影院少妇在线观看 | 亚洲AV午夜成人片 | 善良的女邻居在线观看 | 国产麻豆一级片 | 制服丝袜在线视频 | 久久久久伊人 | 深爱婷婷网 | 欧美草逼视频 | 这里精品 | 蜜臀av一区二区三区有限公司 | 欧美美女一级片 | 国产农村妇女aaaaa视频 | 朝桐光在线视频 | 90岁肥老奶奶毛毛外套 | 操xxxx| 在线观看视频www | 播放灌醉水嫩大学生国内精品 | 黄页网址大全免费观看 | 精品在线视频一区二区三区 | 亚洲成人黄色网 | 久久免费看少妇高潮v片特黄 | 乌克兰少妇性做爰 | 精品久久久久久久久久久久久久久久久 | 国产免费av片在线 | 色撸撸在线观看 | 日韩美在线 | 红桃av在线 | 婷婷射丁香 | 五十路黄色片 | 久久私人影院 | 国产老熟女一区二区三区 | 成人av电影网站 | 精品伦精品一区二区三区视频密桃 | jizz在线观看| 久久传媒 |