Oracle分区拆分分区问题

时间:2019-02-11 06:41:36

标签: oracle indexing database-partitioning

我们有一个大约2TB的VLDB,并且每个日期都对表进行分区。我们还为这些分区提供了索引映射。但是对于2019年,截至2019年10月1日的所有数据都进入一个分区,因为打字错误导致创建了一个具有较高值01/10/2019的单个子分区。

我们正在尝试使用拆分分区来更正此问题,即将直到2019年2月10日的数据移至单个分区,然后删除空分区并为每个日期创建单个分区。一切正常。

索引映射带来了问题,因为从10月1日到12月31日已经存在映射,因此我们无法删除这些映射。因此,我们试图创建从2月11日到9月30日的映射。由于数据量大,该脚本花费的时间很长。在此之后,当我们尝试重建索引时,索引也进入了不可用状态!

有没有更好的方法可以做到这一点。

代码示例-

CREATE TABLE My_Table (
  id             NUMBER(9,0)  NOT NULL,
  source_system  VARCHAR(20),
  eod_date                  NUMBER(9,0)  NOT NULL,
  other columns
  )
  TABLESPACE XYZ001td
  PARTITION BY LIST (source_system)
  SUBPARTITION BY RANGE (
    eod_date
  )
  (
    PARTITION p_XYZ VALUES ('XYZ')
      NOCOMPRESS
      (
        SUBPARTITION XYZ_20181227 VALUES LESS THAN (20181228) TABLESPACE XYZ_20181227_td,
        SUBPARTITION XYZ_20181228 VALUES LESS THAN (20181229) TABLESPACE XYZ_20181228_td,
        SUBPARTITION XYZ_20181229 VALUES LESS THAN (20181230) TABLESPACE XYZ_20181229_td,
        SUBPARTITION XYZ_20181230 VALUES LESS THAN (20181231) TABLESPACE XYZ_20181230_td,
        SUBPARTITION XYZ_20181231 VALUES LESS THAN (20190101) TABLESPACE XYZ_20181231_td
        **SUBPARTITION XYZ_20191001 VALUES LESS THAN (20191002) TABLESPACE XYZ_20191001_td,**
        SUBPARTITION XYZ_20191002 VALUES LESS THAN (20191003) TABLESPACE XYZ_20191002_td,
        SUBPARTITION XYZ_20191003 VALUES LESS THAN (20191004) TABLESPACE XYZ_20191003_td,
      )
   )
/

CREATE INDEX inx_my_table_01
  ON My_table (
    source_system,
    eod_date    
  )
  TABLESPACE XYZ001td
  GLOBAL PARTITION BY HASH (
    source_system,
    eod_date
  )
  (
    PARTITION XYZ_20181227
      TABLESPACE XYZ_20181227_ti
      LOGGING,
    PARTITION XYZ_20181228
      TABLESPACE XYZ_20181228_ti
      LOGGING,
    PARTITION XYZ_20181229
      TABLESPACE XYZ_20181229_ti
      LOGGING,
    PARTITION XYZ_20181230
      TABLESPACE XYZ_20181230_ti
      LOGGING,
    PARTITION XYZ_20181231
      TABLESPACE XYZ_20181231_ti
      LOGGING
  )

2 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解问题。但是我认为以下步骤可能会有所帮助

创建一个临时表并将所有2019年数据复制到该表 删除所有2019分区和索引。 重新创建分区并重新插入数据 创建本地索引

答案 1 :(得分:0)

我们不能删除全局哈希分区索引

ORA-14330:无法删除全局哈希分区索引的分区

有什么方法可以插入中间索引映射而不触及现有索引映射