oracle的subpartition

来源:互联网 发布:php 输出文本文件 编辑:程序博客网 时间:2024/05/16 04:51
 刚对partition有一点点了解之后现在又在工作中遇到了subpartition,真是搞得我莫名其妙。

我的建表语句:


CREATE TABLE O_APACHE_LOG_ZYTMP
(
  PLATFORMID    NUMBER(3),
  PRODUCTID     NUMBER(5),
  IP            VARCHAR2(15 BYTE),
  DEAL_DATE     DATE,
  SUB_PATH      VARCHAR2(500 BYTE),
  URL_PARA      VARCHAR2(500 BYTE),
  REQ_CODE      NUMBER(8),
  SEND_BYTE     NUMBER(12),
  UAID          VARCHAR2(50 BYTE),
  UASTR         VARCHAR2(200 BYTE),
  GATEWAY       VARCHAR2(200 BYTE),
  MSISDN        VARCHAR2(11 BYTE),
  MID           VARCHAR2(14 BYTE),
  CITYID        NUMBER(5),
  PROVINCEID    NUMBER(5),
  DOMAIN_NAME   VARCHAR2(50 BYTE),
  VISIT_PERIOD  NUMBER(2),
  FN01          VARCHAR2(200 BYTE),
  FN02          VARCHAR2(20 BYTE),
  FN03          VARCHAR2(50 BYTE),
  FN04          VARCHAR2(20 BYTE),
  FN05          VARCHAR2(20 BYTE),
  FN06          VARCHAR2(20 BYTE),
  FN07          VARCHAR2(20 BYTE),
  FN08          VARCHAR2(20 BYTE),
  FN09          VARCHAR2(20 BYTE),
  FN10          VARCHAR2(20 BYTE),
  FN11          VARCHAR2(20 BYTE),
  FN12          VARCHAR2(20 BYTE),
  FC01          VARCHAR2(20 BYTE),
  FC02          VARCHAR2(20 BYTE),
  FC03          VARCHAR2(20 BYTE),
  FC04          VARCHAR2(20 BYTE),
  FC05          VARCHAR2(20 BYTE),
  FC06          VARCHAR2(20 BYTE),
  FC07          VARCHAR2(20 BYTE),
  FC08          VARCHAR2(20 BYTE),
  FC09          VARCHAR2(20 BYTE),
  FC10          VARCHAR2(20 BYTE),
  FC11          VARCHAR2(20 BYTE),
  FC12          VARCHAR2(20 BYTE),
  FC13          VARCHAR2(20 BYTE),
  FC14          VARCHAR2(20 BYTE),
  PIC_FLAG      NUMBER(1),
  BRAND_ID      NUMBER(1),
  PID           VARCHAR2(3)
)
TABLESPACE TBS_DW01 
PCTFREE    10
INITRANS   1
MAXTRANS   255
PARTITION BY RANGE (DEAL_DATE)
SUBPARTITION BY HASH (PID)
(  PARTITION P20080101 VALUES LESS THAN (TO_DATE(' 2008-01-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    NOLOGGING
    TABLESPACE TBS_DW01
    PCTFREE    0
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               )
    SUBPARTITIONS 8 STORE IN (TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01),  
    。。。。。。

  PARTITION P20080630 VALUES LESS THAN (TO_DATE(' 2008-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    NOLOGGING
    TABLESPACE TBS_DW01
    PCTFREE    0
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                BUFFER_POOL      DEFAULT
               )
    SUBPARTITIONS 8 STORE IN (TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01,TBS_DW01)
)
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;


基本上就是这个吧,当然也是照别人抄的。

我特别想直接用一下subpartition结果发现不管我怎么写都得不到。

select * from  o_apache_log_zytmp subpartition (p00)这样天真的想法我一上午都沉醉其中,后来仔细查书才发现丢人丢大了。以下的做法才是正途!


select table_name,partition_name,subpartition_name,tablespace_name from user_tab_subpartitions
where table_name='O_APACHE_LOG_ZYTMP'

表的结果截取:

    TABLE_NAME PARTITION_NAME SUBPARTITION_NAME TABLESPACE_NAME
1 O_APACHE_LOG_ZYTMP P20080630 SYS_SUBP25421 TBS_DW01
2 O_APACHE_LOG_ZYTMP P20080630 SYS_SUBP25422 TBS_DW01
3 O_APACHE_LOG_ZYTMP P20080630 SYS_SUBP25423 TBS_DW01
4 O_APACHE_LOG_ZYTMP P20080630 SYS_SUBP25424 TBS_DW01
5 O_APACHE_LOG_ZYTMP P20080630 SYS_SUBP25425 TBS_DW01
6 O_APACHE_LOG_ZYTMP P20080630 SYS_SUBP25426 TBS_DW01

终于明白自己有多白痴了,突然想明白这样建表不好!我换

我想换成create table 的时候 SUBPARTITION TEMPLATE(SUBPARTITION sp1 TABLESPACE TBS_DW01)  这样的,因为这样得到的SUBPARTITION_NAME是有规律的,我可以写到sql语句里。关于SUBPARTITION TEMPLATE我将粘一篇别人写的网志作为说明。

 

来源:http://zhaoyan0922-photo.blog.163.com/blog/static/26238441200812852518464/