我用磁區創建了下表:
CREATE TABLE FRD_TBL_H (DAT NUMBER(8), DATST NUMBER(8), MEST VARCHAR2(1 CHAR), MEST1 VARCHAR2(1 CHAR), BELD CHAR(11 CHAR),VALID_FROM DATE, VALID_TO DATE)
PARTITION BY RANGE(valid_to)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
( PARTITION p0 VALUES LESS THAN (TO_DATE('01-01-1999', 'DD-MM-YYYY')))
ENABLE ROW MOVEMENT;
我試圖通過將 valid_to 值保持為 null 來將資料插入到此表中,并且我嘗試將 valid_to 值設定為 '01-01-1999' 但出現以下錯誤:
ORA-14300: partitioning key maps to a partition outside maximum permitted number of partitions
我在 valid_to 列上按月進行了磁區,因為該表有 7000 萬行,并且我在下面僅對歷史化邏輯進行查詢:
MERGE INTO FRD_TBL_H e
USING FRD_TBL h
ON (e.beld = h.beld)
WHEN MATCHED THEN
UPDATE SET e.valid_from = sysdate
where e.valid_to = 01.01.1999
uj5u.com熱心網友回復:
Oracle 中最大磁區數為1024K - 1 = 1048575
您可能正在做的事情如下。您使用天磁區創建了表。(不是您發布的月份)。
CREATE TABLE FRD_TBL_H (DAT NUMBER(8), DATST NUMBER(8), MEST VARCHAR2(1 CHAR), MEST1 VARCHAR2(1 CHAR), BELD CHAR(11 CHAR),VALID_FROM DATE, VALID_TO DATE)
PARTITION BY RANGE(valid_to)
INTERVAL(NUMTODSINTERVAL(1, 'DAY'))
( PARTITION p0 VALUES LESS THAN (TO_DATE('01-01-1999', 'DD-MM-YYYY')))
ENABLE ROW MOVEMENT;
并使用了足夠高的 valid_to日期,例如DATE'4999-01-01'
insert into FRD_TBL_H( VALID_TO) values (DATE'4999-01-01');
ORA-14300: partitioning key maps to a partition outside maximum permitted number of partitions
一個簡單的計算表明,磁區限制確實被打破了
select 1024*1024-1 max_part, DATE'4999-01-01' - TO_DATE('01-01-1999', 'DD-MM-YYYY') day_diff from dual;
MAX_PART DAY_DIFF
---------- ----------
1048575 1095728
所以這是預期的行為。
真正的問題是,為什么要valid_to用作磁區鍵而不是valid_from.
與valid_from你將
null或虛擬值沒有問題列不會改變,所以不需要行移動
大多數查詢都使用謂詞
:1 >= valid_from,因此修剪可以正常作業
要獲得對開放(最后)版本的有效訪問,您可以使用具有日期范圍磁區的復合磁區和開放/封閉版本的串列子磁區。validfrom
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448720.html
下一篇:我怎樣才能加入4張桌子
