[英]Oracle Partition by ID and subpartition by DATE with interval
我正在處理的模式有少量客戶,每個客戶有大量數據。
在確定分區策略時,我的第一個想法是按 customer_id 分區,然后按范圍以天為間隔進行子分區。 但是,您不能在子分區中使用間隔。
最終,我想要一種在創建新客戶時自動為新客戶創建分區的方法,並且還為客戶的數據創建每日自動子分區。 所有應用程序查詢都在 customer_id 級別,並指定了各種日期范圍。
這篇文章幾乎相同,但答案涉及反轉分區策略,我仍然想找到一種方法來完成范圍-范圍間隔分區。 一種方法可能是讓每月的數據庫作業為未來的幾天/幾個月創建子分區,但這感覺不對。
也許我的假設是錯誤的,即當前的數據結構將從范圍-范圍間隔分區策略中受益更多。 我們有一些客戶的數據使其他客戶相形見絀,所以我在考慮隔離客戶數據的方法。
關於更好方法的任何想法/建議?
再次感謝你!
更新
這是我提出的一個例子:
CREATE TABLE PART_TEST(
CUSTOMER_ID NUMBER,
LAST_MODIFIED_DATE DATE
)
PARTITION BY RANGE (CUSTOMER_ID)
INTERVAL (1)
SUBPARTITION BY RANGE (LAST_MODIFIED_DATE)
SUBPARTITION TEMPLATE
(
SUBPARTITION subpart_1206_min values LESS THAN (TO_DATE('12/2006','MM/YYYY')),
SUBPARTITION subpart_0107 values LESS THAN (TO_DATE('01/2007','MM/YYYY')),
SUBPARTITION subpart_0207 values LESS THAN (TO_DATE('02/2007','MM/YYYY')),
...
...
...
SUBPARTITION subpart_max values LESS THAN (MAXVALUE)
)
(
PARTITION part_1 VALUES LESS THAN (1)
)
我目前在模板中有 290 個子分區。 除了一個障礙外,這似乎有效。 在我的測試中,我發現 CUSTOMER_ID 大於 3615 的任何記錄都會因 ORA-14400 失敗:插入的分區鍵未映射到任何分區
您可以在日期上創建RANGE INTERVAL
分區,然后在其上創建LIST
或RANGE
子分區。 會是這樣的:
CREATE TABLE MY_PART_TABLE
(
CUSTOMER_ID NUMBER NOT NULL,
THE_DATE TIMESTAMP(0) NOT NULL,
OTHER_COLUMNS NUMBER
)
PARTITION BY RANGE (THE_DATE) INTERVAL (INTERVAL '1' MONTH)
SUBPARTITION BY RANGE (CUSTOMER_ID)
SUBPARTITION TEMPLATE (
SUBPARTITION CUSTOMER_GROUP_1 VALUES LESS THAN (10),
SUBPARTITION CUSTOMER_GROUP_2 VALUES LESS THAN (20),
SUBPARTITION CUSTOMER_GROUP_3 VALUES LESS THAN (30),
SUBPARTITION CUSTOMER_GROUP_4 VALUES LESS THAN (40),
SUBPARTITION CUSTOMER_GROUP_5 VALUES LESS THAN (MAXVALUE)
)
(PARTITION VALUES LESS THAN ( TIMESTAMP '2015-01-01 00:00:00') );
CREATE TABLE MY_PART_TABLE
(
CUSTOMER_ID NUMBER NOT NULL,
THE_DATE TIMESTAMP(0) NOT NULL,
OTHER_COLUMNS NUMBER
)
PARTITION BY RANGE (THE_DATE) INTERVAL (INTERVAL '1' MONTH)
SUBPARTITION BY LIST (CUSTOMER_ID)
SUBPARTITION TEMPLATE (
SUBPARTITION CUSTOMER_1 VALUES (1),
SUBPARTITION CUSTOMER_2 VALUES (2),
SUBPARTITION CUSTOMER_3_to_6 VALUES (3,4,5,6),
SUBPARTITION CUSTOMER_7 VALUES (7)
)
(PARTITION VALUES LESS THAN ( TIMESTAMP '2015-01-01 00:00:00') );
請注意,對於第二個解決方案,客戶的數量(即 ID)是固定的。 如果您獲得新客戶,則必須更改表並相應地修改 SUBPARTITION TEMPLATE。
每當插入或更新新值時,Oracle 都會自動創建每月分區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.