当前位置: 代码迷 >> Oracle管理 >> 关于hash分区解决方法
  详细解决方案

关于hash分区解决方法

热度:197   发布时间:2016-04-24 04:08:01.0
关于hash分区
现我有一张表数据量很大,需要清理14年5月份前的数据,如何对SYNC_RELATION_NO字段进行hash分区?

CREATE TABLE BIG_TABLE_T
(
  SYNC_RELATION_NO    NUMBER(10)                NOT NULL,
  SYNC_ACTION         NUMBER(2)                 NOT NULL,
  SYNC_WHERE          VARCHAR2(1000 BYTE)
)

------解决思路----------------------
 CREATE TABLE BIG_TABLE_T
(
    SYNC_RELATION_NO    NUMBER(10)                NOT NULL,
    SYNC_ACTION         NUMBER(2)                 NOT NULL,
    SYNC_WHERE          VARCHAR2(1000 BYTE)
)
PARTITION BY HASH (SYNC_RELATION_NO)
(
    Partition SYNC1,
    Partition SYNC2,
    Partition SYNC3
);?

------解决思路----------------------
引用:
 CREATE TABLE BIG_TABLE_T
(
    SYNC_RELATION_NO    NUMBER(10)                NOT NULL,
    SYNC_ACTION         NUMBER(2)                 NOT NULL,
    SYNC_WHERE          VARCHAR2(1000 BYTE)
)
PARTITION BY HASH (SYNC_RELATION_NO)
(
    Partition SYNC1,
    Partition SYNC2,
    Partition SYNC3
);?

散列分区
允许用户对不具有逻辑范围的数据进行分区 
通过在分区键上执行HASH函数决定存储的分区
将数据平均地分布到不同的分区
散列分区语法:
PARTITION BY HASH (column_name)
PARTITIONS number_of_partitions;

PARTITION BY HASH (column_name)
( PARTITION part1 [TABLESPACE tbs1],
  PARTITION part2 [TABLESPACE tbs2],
  ...
  PARTITION partN [TABLESPACE tbsN]);
------解决思路----------------------
CREATE TABLE BIG_TABLE_T
(
  SYNC_RELATION_NO    NUMBER(10)                NOT NULL,
  SYNC_ACTION         NUMBER(2)                 NOT NULL,
  SYNC_WHERE          VARCHAR2(1000 BYTE),
  SYNC_DATE           DATA
)
partition by range (SYNC_DATE)
subpartition by hash (SYNC_RELATION_NO)
subpartitions 3 store in (dinya_space07,dinya_space08,dinya_space09) 
(partition date1 values less than (to_date('20130501','YYYYMMDD')),
 partition date2 values less than (to_date('20140501','YYYYMMDD')),
 partition date3 values less than (maxvalue)
);

如果非要HASH分区并且你还要区分时间段的话 可以创建为复合分区 也就是子分区  小弟也是刚学不知道写错没有 大概就是这样
------解决思路----------------------
按照你的说法不适合建hash分区,你要清理14年5月份前的数据,需要建立针对时间的
列表分区或者范围分区比较合适。
hash分区建表语句:
CREATE TABLE BIG_TABLE_T
(
  SYNC_RELATION_NO    NUMBER(10)                NOT NULL,
  SYNC_ACTION         NUMBER(2)                 NOT NULL,
  SYNC_WHERE          VARCHAR2(1000 BYTE)
)
  partition by hash(SYNC_RELATION_NO    )
  partitions 9;    (9代表9个分区,你需要分几个分区,就写成几个)
  相关解决方案