ORA-14099: all rows in table do not qualify for specified partition
來源:程序員人生 發布時間:2015-02-04 08:59:45 閱讀次數:4238次
1.
創建分區表
create table range_part_range(id number, deal_date date, contents varchar2(1000))
partition by range(deal_date)
(
partition p1 values less than (to_date('2015-01⑵1', 'yyyy-mm-dd')),
partition p2 values less than (to_date('2015-01⑵2', 'yyyy-mm-dd')),
partition p3 values less than (to_date('2015-01⑵3', 'yyyy-mm-dd')),
partition p_max values less than (maxvalue)
);
插入記錄
insert into range_part_range values(1, to_date('2015-01⑵1', 'yyyy-mm-dd'), 'a');
insert into range_part_range values(2, to_date('2015-01⑵2', 'yyyy-mm-dd'), 'b');
insert into range_part_range values(3, to_date('2015-01⑵3', 'yyyy-mm-dd'), 'c');
檢索記錄
select count(*) from range_part_range;
COUNT(*)
----------
3
select count(*) from range_part_range partition(p1);
COUNT(*)
----------
0
select count(*) from range_part_range partition(p2);
COUNT(*)
----------
1
select count(*) from range_part_range partition(p3);
COUNT(*)
----------
1
select count(*) from range_part_range partition(p_max);
COUNT(*)
----------
1
2.
創建普通表,用于分區交換
create table range_tbl (id number, deal_date date, contents varchar2(1000));
插入記錄
insert into range_tbl values(1000, to_date('2015-01⑵5', 'yyyy-mm-dd'), 'j');
3.
履行分區交換
alter table range_part_range exchange partition p3 with table range_tbl
*
ERROR at line 1:
ORA⑴4099: all rows in table do not qualify for specified partition
注意:此處range_tbl中的數據明顯不是在p3分區的范圍以內,而是在p_max分區范圍內,因此報了錯。
4. 解決方案1:換1個正確的分區
alter table range_part_range exchange partition p_max with table range_tbl;
select * from range_tbl;中記錄現在是原來p_max的記錄,
select * from range_part_range partition(p_max);中記錄現在是原來range_tbl的記錄。
解決方案2:使用without validation
alter table range_part_range exchange partition p3 with table range_tbl without validation;
select * from range_tbl;中記錄現在是原來p3的記錄,
select * from range_part_range partition(p3);中記錄現在是原來range_tbl的記錄。
總結:
1. 對交換分區,普通表中若有數據,要確保其值在交換的分區范圍內,否則會提示毛病。
2. 盡可能不要用without validation,這樣會繞開校驗,像上例,p3分區會包括1個不在其分區范圍內的數據,有可能擾亂了分區的目的。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈