oracle与db2分区的区别-LMLPHP

ORACLEDB2都引入了partition的概念.但是区别还是相当大的.

ORACLE的分区是表的分区,每张表可以按某一列的值将数据进行组织,索引,和查询.每个分区可以放在不同的表空间里,各分区可以单独操作.

DB2的分区是数据库分区,它的每个分区可以视为一个独立的数据库,有自已的后台进程,内存结构和存储磁盘,分区的数据库的每个分区上的表空间是一致的,也就是说,一个分区数据库中的表,就好像把数据分区放在不同的数据库中一样.在分区数据库中建表,如不指定分区键,系统认为表的第一个字段是分区键.

 

在最新未公开发布的DB2 V9.1中,也支持了表分区的概念,其用法与ORACLE的用法类似.

ORACLE的分区表建表语句:

CREATE TABLE product_information

( product_id NUMBER(6)

, product_name VARCHAR2(50)

, product_description VARCHAR2(2000)

, category_id NUMBER(2)

, weight_class NUMBER(1)

, warranty_period INTERVAL YEAR TO MONTH

, supplier_id NUMBER(6)

, product_status VARCHAR2(20)

, list_price NUMBER(8,2)

, min_price NUMBER(8,2)

, catalog_url VARCHAR2(50)

CONSTRAINT product_status_lov

CHECK (product_status in (’orderable’

,’planned’

,’under development’

,’obsolete’)

) )

PARTITION BY HASH (product_id)

PARTITIONS 5

STORE IN (prod_ts1, prod_ts2, prod_ts3, prod_ts4, prod_ts5);

 

DB2的分区数据库的建表语句:

CREATE TABLE DEPT_INFOMATION

(OP_TIME VARCHAR(140),

DEPT_NO VARCHAR(140),

DEPT_NAME VARCHAR(140),

UP_DEPT_NO VARCHAR(140),

UP_DEPT_NAME VARCHAR(140),

DEPT_FUNC_DEPICT VARCHAR(140),

FOUND_TIME VARCHAR(140),

DIS_FOUND_TIME VARCHAR(140),

COUNTRY VARCHAR(140),

EMPL_COUNT VARCHAR(140)

)

DATA CAPTURE NONE

IN TBS_ODS

INDEX IN TBS_IDX

PARTITIONING KEY

(DEPT_NO

) USING HASHING

NOT LOGGED INITIALLY;

 

DB2 V9.1的建分区表的语句:

CREATE TABLE sales (year INT, month INT)

IN tbsp1, tbsp2, tbsp3, tbsp4, tbsp5, tbsp6, tbsp7, tbsp8

PARTITION BY RANGE(year, month)

(STARTING FROM (2001, 1) ENDING (2001,3) IN tbsp1,

ENDING (2001,6) IN tbsp2, ENDING (2001,9)

IN tbsp3, ENDING (2001,12) IN tbsp4,

ENDING (2002,3) IN tbsp5, ENDING (2002,6)

IN tbsp6, ENDING (2002,9) IN tbsp7,

ENDING (2002,12) IN tbsp8)

12-23 20:07