我们有一个大约 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
)
我不确定我是否完全理解这个问题。但我认为以下步骤可能会有所帮助
创建一个临时表并将所有 2019 年数据复制到该表删除所有 2019 分区和索引。重新创建分区并重新插入数据创建本地索引
我们不能删除全局哈希分区索引
ORA-14330:无法删除全局哈希分区索引的分区
有没有办法在不接触现有索引映射的情况下插入中间索引映射