Oracle:如何删除特定分区的子分区

Han*_*örr 7 oracle partitioning oracle11g database-partitioning

我正在使用带有区间分区的oracle 11表,并像这样列出子分区(简化):

CREATE TABLE LOG
(
  ID NUMBER(15, 0) NOT NULL PRIMARY KEY
, MSG_TIME DATE NOT NULL
, MSG_NR VARCHAR2(16 BYTE)
) PARTITION BY RANGE (MSG_TIME) INTERVAL (NUMTOYMINTERVAL (1,'MONTH'))
  SUBPARTITION BY LIST (MSG_NR)
    SUBPARTITION TEMPLATE (
     SUBPARTITION login VALUES ('FOO')
   , SUBPARTITION others VALUES (DEFAULT)
   )
   (PARTITION oldvalues VALUES LESS THAN (TO_DATE('01-01-2010','DD-MM-YYYY')));
Run Code Online (Sandbox Code Playgroud)

如何在不知道子系统的(系统生成的)名称的情况下删除特定月份的特定子分区?有一个语法"alter table ... drop subpartition for(subpartition_key_value,...)"但我没有看到指定我删除子分区的月份的方法.该分区管理指南没有给出任何的例子,无论是.8}

Han*_*örr 3

事实证明,“subpartition for”语法确实有效,尽管这似乎是 Oracle 不想告诉您的秘密。:-)

ALTER TABLE TB_LOG_MESSAGE DROP SUBPARTITION FOR 
      (TO_DATE('01.02.2010','DD.MM.YYYY'), 'FOO')
Run Code Online (Sandbox Code Playgroud)

这将删除包含 MSG_TIME 2010/02/01 和 MSG_NR FOO 的子分区。(不一定存在具有精确的 MSG_TIME 和 MSG_NR 的实际行。但是,如果不存在这样的子分区,则会引发错误。)

  • 如果您在谷歌上搜索“drop subpartition for”,您实际上会找到涵盖该语法的专利申请。8-{} 软件专利会变得更加邪恶吗?http://www.patentstorm.us/applications/20080313133/description.html (3认同)