【问题标题】:Oracle Automatic LIST partition using virtual column not allowing REFERENCE partition on child table使用虚拟列的 Oracle 自动 LIST 分区不允许子表上的 REFERENCE 分区
【发布时间】:2020-03-05 07:03:26
【问题描述】:

我尝试使用虚拟列在测试表上创建分区。这种方法适用于 PARENT 或独立表。但是,如果 PARENT 表是使用虚拟列分区的,我无法在 CHILD 表上创建 REFERENCE 分区。创建 CHILD 表时出现以下错误

ORA-14659: Partitioning method of the parent table is not supported

Oracle 版本详情: Oracle Database 12c 企业版 12.2.0.1.0 - 64 位生产 PL/SQL 版本 12.2.0.1.0 - 生产

请在下面找到脚本。

--######################PARENT TABLE###########################################
DROP TABLE BILL_HEADER_TST;

CREATE TABLE BILL_HEADER_TST
(
   BILL_HDR_SID   NUMBER (30) NOT NULL,
   TCN                VARCHAR2 (21 BYTE) NOT NULL,
   TCN_DATE           DATE,
   PROGRAM_CID        NUMBER,
   CONSTRAINT XPKBILL_HEADER_TST PRIMARY KEY (BILL_HDR_SID),
   PARTN_KEY          NUMBER

                            AS (   PROGRAM_CID
                                || TO_NUMBER (TO_CHAR (TCN_DATE, 'YYYYMM')))
                            VIRTUAL
)
PARTITION BY LIST (PARTN_KEY)   AUTOMATIC (PARTITION PDEFAULT VALUES (1201401));


------------------LOCAL INDEXES------------------------------------------------

CREATE INDEX XIE33BILL_HEADER_TST
   ON BILL_HEADER_TST (TCN_DATE)
   LOCAL;


CREATE INDEX XIE38BILL_HEADER_TST
   ON BILL_HEADER_TST (PROGRAM_CID)
   LOCAL;

---------------------INDEXES---------------------------------------------------
CREATE UNIQUE INDEX XAK1BILL_HEADER_TST
   ON BILL_HEADER_TST (TCN)
   LOGGING
   NOPARALLEL;


--#############CHILD TABLE#####################################################   
DROP TABLE BILL_LINE_TST;

CREATE TABLE BILL_LINE_TST
(
   BILL_LINE_SID                 NUMBER (30) NOT NULL,
   BILL_HDR_SID               NUMBER (30) NOT NULL,
   CLM_TYPE_CID                   NUMBER (3),
   PROGRAM_CID                    NUMBER,
   CONSTRAINT XPKBILL_LINE_TST PRIMARY KEY (BILL_LINE_SID),
   CONSTRAINT XFK17_BILL_LINE_TST FOREIGN KEY
      (BILL_HDR_SID)
       REFERENCES BILL_HEADER_TST (BILL_HDR_SID) ON DELETE CASCADE
)
PARTITION BY REFERENCE (XFK17_BILL_LINE_TST)
ENABLE ROW MOVEMENT;


【问题讨论】:

  • 我能够使用 INTERVAL 而不是 AUTOMATIC 创建检查 CREATE TABLE BILL_HEADER_TST 的最后一行 PARTITION BY LIST (PARTN_KEY) INTERVAL (PARTITION PDEFAULT VALUES (1201401));

标签: oracle oracle12c database-partitioning data-partitioning


【解决方案1】:

来自 SQL 语言手册

自动列表分区受“列表分区限制”中列出的限制。以下附加限制适用:

  • 自动列表分区表必须至少有一个分区 创建时。因为新分区是自动创建的 新的和未知的分区键值,自动 列表分区表不能有 DEFAULT 分区。
  • 索引组织不支持自动列表分区 表或外部表。
  • 不支持自动列表分区的表包含 可变数组列。
  • 您不能在自动创建本地域索引 列表分区表。您可以在 自动列表分区表。
  • 自动列表分区表不能是子表或 用于参考分区的父表。
  • 子分区不支持自动列表分区 水平。

【讨论】:

  • 谢谢康纳。我相信你的观点是不支持我正在尝试的场景。 自动列表分区表不能是子表或引用分区的父表是否有任何解决方法可以实现这一点?
  • 我认为您需要“在家发展”它,即将父属性引入子表,并使用常规分区。您仍然可以享受分区连接等的所有好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多