資料庫版本:oracle11g 11.2.0.4.0
目前庫有張表需要磁區,做范圍磁區,按照每個月自動磁區,但是現在有個問題,就是磁區的時間欄位有null值,插入資料時會報ORA-14300。
解決方法一:就是在插入資料時,將NULL值轉化為一個時間。
解決方法二:插入NULL值時,自動將NULL放入另一個磁區,插入非NULL值,也就是時間時,寫入時間磁區。
方法一這個好解決,但方法二不知道怎么弄。
下面是使用RANGE-LIST創建磁區,但插入資料時還是會報ORA-14300錯誤。
現在就是想創建復合磁區,把正常的時間寫入RANGE磁區,如果有NULL值寫入LIST磁區。
都是同一個磁區欄位,例如:CREATE_TIME
不知道怎么來實作,請高人解答,謝謝!
下面是RANGE-LIST,但插入資料會報報ORA-14300錯誤:
CREATE TABLE T_TEST
(
TABLE_ID VARCHAR2(64) NOT NULL,
CREATE_TIME DATE DEFAULT SYSDATE
)
PARTITION BY RANGE (CREATE_TIME)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) STORE IN (TBS_TEST_DATA)
SUBPARTITION BY LIST(CREATE_TIME)
SUBPARTITION TEMPLATE(
SUBPARTITION SP_0 VALUES(NULL) TABLESPACE TBS_TEST_DATA)
(PARTITION P_0 VALUES LESS THAN (TO_DATE('1970-01-01', 'YYYY-MM-DD')) TABLESPACE TBS_TEST_DATA);
INSERT INTO T_TEST (TABLE_ID,CREATE_TIME) VALUES ('test01',NULL);
COMMIT;
uj5u.com熱心網友回復:
null即不屬于任何一個范圍也無法列出uj5u.com熱心網友回復:
別磁區了,直接分表吧uj5u.com熱心網友回復:
就用方法1啊,2就行不通uj5u.com熱心網友回復:
1、你用range+list復合磁區解決不了這個問題,樓主對復合索引可以在加深下理解;
2、你可以將null轉換成時間,但需要為這個時間建立一個單獨磁區,比如:partition pnull values less than (to_date('0001-12-1', 'yyyy-mm-dd');
3、此外,你也可以創建磁區表時建上maxvalue磁區(如下所示),因為null比任何值都大,這樣null將來都會insert到這個磁區,但建這個磁區可能會給后期維護增加了復雜性。
create table t5(c1 date) partition by range (c1)
(
partition p1 values less than (to_date('2020-02-1', 'yyyy-mm-dd')),
partition p2 values less than (to_date('2020-03-1', 'yyyy-mm-dd')),
partition p3 values less than (to_date('2020-04-1', 'yyyy-mm-dd')),
partition p4 values less than (to_date('2020-05-1', 'yyyy-mm-dd')),
partition p5 values less than (to_date('2020-06-1', 'yyyy-mm-dd')),
partition p6 values less than (to_date('2020-07-1', 'yyyy-mm-dd')),
partition p7 values less than (to_date('2020-08-1', 'yyyy-mm-dd')),
partition p8 values less than (to_date('2020-09-1', 'yyyy-mm-dd')),
partition p300 values less than (maxvalue)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/8498.html
標籤:高級技術
