【Oracle】ORA-14400: inserted partition key does not map to any partition
元旦假日後工作第一天,同事說一個遠古專案後臺查不到某表2016年以後被寫入的資料。(該專案仍在提供服務,但早已停止更新)
業務大致是這樣的:有一張表是存放“贈送禮物”的記錄表。
產品這邊贈送了一個禮物給另外一個小號,然後後臺查詢不到。
找不到文件,手動查到該表:
COMMENT ON COLUMN "*"."SEND_LOG"."SEND_TIME" IS '贈送時間';
根據SEND_TIME降序排,發現最後一個rows的日期是2015-12-31 22:53:11,的確沒有2016年的資料。
手動新增資料:
在DB執行新增資料,to_date('2016-01-01','YYYY-MM-DD'),發現報錯:
ORA-14400: inserted partition key does not map to any partition
無法對映到任何分割槽?原來這張是分割槽表,大概是分割槽的問題。
檢查一下該表表分割槽:
發現high_value欄位內容為:
並發現非MAXVALUE分割槽,直接新增分割槽。
專案遠古,文件也不知道存哪,查了一下增長資料,資料量不大,手動新增後兩年分割槽,間隔為半年。
……
再新增一個MAXVALUE
順便測試了一下為帶有MAXVALUE的分割槽表新增新的分割槽:
如果普通新增則會報錯:
ORA-14074: partition bound must collate higher than that of the last partition
通過SPLIT PARTITION新增新分割槽:
作者微信公眾號(持續更新)
業務大致是這樣的:有一張表是存放“贈送禮物”的記錄表。
產品這邊贈送了一個禮物給另外一個小號,然後後臺查詢不到。
找不到文件,手動查到該表:
COMMENT ON COLUMN "*"."SEND_LOG"."SEND_TIME" IS '贈送時間';
根據SEND_TIME降序排,發現最後一個rows的日期是2015-12-31 22:53:11,的確沒有2016年的資料。
手動新增資料:
在DB執行新增資料,to_date('2016-01-01','YYYY-MM-DD'),發現報錯:
ORA-14400: inserted partition key does not map to any partition
無法對映到任何分割槽?原來這張是分割槽表,大概是分割槽的問題。
檢查一下該表表分割槽:
-
SELECT table_name, partition_name, high_value, partition_position, tablespace_name
-
FROM user_tab_partitions
-
WHERE table_name='SEND_LOG'
- ORDER BY partition_position
發現high_value欄位內容為:
-
TO_DATE(' 2011-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
-
TO_DATE(' 2011-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
-
TO_DATE(' 2011-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
-
TO_DATE(' 2011-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
-
…………
-
TO_DATE(' 2015-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
- TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
並發現非MAXVALUE分割槽,直接新增分割槽。
專案遠古,文件也不知道存哪,查了一下增長資料,資料量不大,手動新增後兩年分割槽,間隔為半年。
-
ALTER TABLE SEND_LOG ADD PARTITION p45 VALUES
-
LESS THAN (TO_DATE('2016-06-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS')) TABLESPACE *;
-
-
ALTER TABLE SEND_LOG ADD PARTITION p46 VALUES
- LESS THAN (TO_DATE('2018-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')) TABLESPACE *;
……
再新增一個MAXVALUE
- ALTER TABLE SEND_LOG ADD PARTITION p49 VALUES LESS THAN (maxvalue) TABLESPACE *;
順便測試了一下為帶有MAXVALUE的分割槽表新增新的分割槽:
-
CREATE TABLE partition_test(id number, create_time date)
-
PARTITION BY RANGE(create_time)(
-
PARTITION p1 VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')),
-
PARTITION p2 VALUES LESS THAN (TO_DATE('2016-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')),
- PARTITION p3 VALUES LESS THAN (maxvalue));
如果普通新增則會報錯:
-
ALTER TABLE partition_test ADD PARTITION p4 VALUES
- LESS THAN (TO_DATE('2017-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')) ;
ORA-14074: partition bound must collate higher than that of the last partition
通過SPLIT PARTITION新增新分割槽:
-
ALTER TABLE partition_test SPLIT PARTITION p3 AT (TO_DATE('2017-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
- INTO (partition, partition p3);
作者微信公眾號(持續更新)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1970665/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- partition table update partition-key result in changing tablespace
- oracle partitionOracle
- oracle partition by group by,詳解partition by和group by對比Oracle
- partition table and partition indexIndex
- PARTITION partition01
- PARTITION partition02
- PARTITION partition04
- oracle partition的方法Oracle
- oracle分割槽partition及分割槽索引partition index(一)Oracle索引Index
- oracle composite partition組合分割槽_composite partition rangeOracle
- Pruning、Reference Partition、Exchange Partition
- partition timestamp(0) not use partition
- 自動SPLIT ORACLE PARTITIONOracle
- 關於 Partition 1 does not end on cylinder boundary 的理解
- [Oracle] Partition table exchange Heap tableOracle
- Oracle 分割槽(partition)技術Oracle
- Oracle分割槽表(Partition Table)Oracle
- PARTITION SPILT
- hive partitionHive
- over (partition by)
- exchange partition
- split partition
- Clique Partition
- oracle分割槽及分割槽索引partition_partition index_維護(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(二)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(三)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- Partition Pruning和Partition-Wise Joins
- oracle reference partition引用分割槽(一)Oracle
- oracle list partition列表分割槽(一)Oracle
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- sql shard/partitionSQL
- Partition Pruning
- partition table test
- partition table(1)
- partition table(2)
- exchange partition(轉)
- When to Partition a Table