Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1083336
  • 博文数量: 106
  • 博客积分: 9093
  • 博客等级: 中将
  • 技术积分: 2770
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-01 17:22
文章分类

全部博文(106)

文章存档

2014年(1)

2012年(29)

2011年(32)

2010年(20)

2008年(24)

分类:

2008-04-16 11:54:51

放置分区表

该实验探讨放置分区表以及使用 describe 命令说明表内的范围和放置情况的方法:

  1. 您将为数据放置练习创建新的表空间。
  2. 你将创建不同格式的分区表。
  3. 您将使用 db2 命令和 SQL 查看结果。

  1. 使用 describe data partitions 命令以及 show detail 方法来显示表空间的分区放置。



                                
    db2 describe data partitions for table LINEITEM show detail




    命令窗口


    注意:TableSpID 列给出了包含分区的表空间的 ID 号。在本例中,TableSpID 是 ‘3’。

  2. 使用 list tablespaces 命令标识与 TableSpId 相关联的表空间。



                                
    db2 list tablespaces




    命令窗口


    注意:相应值为 ‘2’ 的 TableSpID 是 USERSPACE1 或默认的表空间。

  3. 现在将创建五个表空间来说明不同的放置选项。使用如下命令:



                                
    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);


    创建该表空间的 SQL 位于 EX2-3.sql 文件中,可使用下面的命令运行该文件:



                                
    db2 –vtf EX2-3.sql


  4. 创建一个新的 LINEITEM 表,具有位于 dms_d1 和 dms_d2 表空间的生成分区集。首先,使用如下命令删除现有的 LINEITEM 分区表:



                                
    db2 drop TABLE LINEITEM


    然后,使用下面的 DDL 创建 LINEITEM 表的新版本:



                                
    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_D2
    PARTITION BY RANGE(l_shipdate)
    (STARTING MINVALUE,
    STARTING '1/1/1992'
    ENDING '31/12/1998' EVERY 1 MONTH,
    ENDING MAXVALUE);


    创建该表的 SQL 位于 EX2-4.sql 文件中,可使用下面的命令运行该文件:



                                
    db2 –vtf EX2-4.sql


  5. 使用下面的命令说明为 LINEITEM 表创建的分区范围:



                                
    db2 describe data partitions for table LINEITEM show detail




    命令窗口





    命令窗口


    注意:TableSpID 列给出了包含分区的表空间的 ID 号。在本例中,TableSpID 为 4(对应于 DMS_D1)或 5(对应于 DMS_D2)。本例中将生成的分区依次分配给指定的表空间。

  1. 创建一个具有四个数据分区的新 LINEITEM 表,每一个数据分区被显式地放在表空间中。首先使用如下命令删除现有的 LINEITEM 表:



                                
    db2 drop TABLE LINEITEM


    然后使用下面的 DDL 创建 LINEITEM 表的新版本:



                                
    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 );


    创建表的 SQL 位于 EX2-6.sql 文件中,可使用下面的命令运行该文件:



                                
    db2 –vtf EX2-6.sql

  2. 使用下面的命令说明为 LINEITEM 表创建的分区范围:



                                
    db2 describe data partitions for table LINEITEM show detail




    命令窗口


    注意:在本例中,每一个分区被放置在一个不同的 TableSpID 中,这个 TableSpID 和创建表的 DDL 中指定的表空间是相对应的。

  3. 创建一个具有四个数据分区的 LINEITEM 表,每一个数据分区被显式地放在表空间并且索引被放在表空间 DMS_I1 中。

    在这一步中,将引入命名分区的概念,而不是使用默认的生成名称。

    首先,使用下面的命令删除现有的 LINEITEM 分区表:



                                
    db2 drop TABLE LINEITEM


    然后,使用以下的 DDL 创建 LINEITEM 表的新版本:



                                
    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);


    创建表的 SQL 位于 EX2-8.sql 文件中,可使用下面的命令运行该文件:



                                
    db2 –vtf EX2-8.sql

  4. 在 LINEITEM 表中创建一个索引,并将它放置在表空间 DMS_I1 中。使用如下 SQL:



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


  5. 使用下面的 SQL 检验和该表相关联的索引的位置:



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




    命令窗口

    注意:索引空间是 DMS_I1。如果没有为分区表指定表空间,那么默认情况下索引位于连接着的第一个表空间。

    在 CREATE TABLE 中定义表空间是很好的实践。然而,无论您是否在创建表语句 ID 中指定索引表空间,这并不限制您将来放置索引的位置。您可以在 CREATE INDEX 语句本身显式地指定索引表空间。

    同一分区表的不同索引可以放置在不同的表空间。

阅读(2264) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~