#oracle #insert #database-partitioning
#Oracle #вставить #раздел базы данных
Вопрос:
Мне нужно вставить данные из одной таблицы в другую. Обе таблицы разделены. Когда я пытаюсь вставить, я получаю эту ошибку: ORA-14400: вставленный ключ раздела не сопоставляется ни с одним разделом.
Я обнаружил, что это, вероятно, означает, что я вставляю значение в таблицу, а раздел для него не определен. Но я использую этот код при создании таблицы:
CREATE TABLE CENTRUMADMIN.AUD$_BACKUP2
TABLESPACE CUZK_BACKUP
PARTITION BY RANGE (NTIMESTAMP#)
(
PARTITION P_2005 VALUES LESS THAN (TO_DATE('1-1-2006', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2006 VALUES LESS THAN (TO_DATE('1-1-2007', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2007 VALUES LESS THAN (TO_DATE('1-1-2008', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2008 VALUES LESS THAN (TO_DATE('1-1-2009', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2009 VALUES LESS THAN (TO_DATE('1-1-2010', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2010 VALUES LESS THAN (TO_DATE('1-1-2011', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2011 VALUES LESS THAN (TO_DATE('1-1-2011', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2012 VALUES LESS THAN (TO_DATE('1-1-2013', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2013 VALUES LESS THAN (TO_DATE('1-1-2014', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2014_01 VALUES LESS THAN (TO_DATE('1-2-2014', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2014_02 VALUES LESS THAN (TO_DATE('1-3-2014', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2014_03 VALUES LESS THAN (TO_DATE('1-4-2014', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2014_04 VALUES LESS THAN (TO_DATE('1-5-2014', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2014_05 VALUES LESS THAN (TO_DATE('1-6-2014', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2014_06 VALUES LESS THAN (TO_DATE('1-7-2014', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
, PARTITION P_2014_07 VALUES LESS THAN (TO_DATE('1-8-2014', 'DD-MM-YYYY')) TABLESPACE CUZK_BACKUP
)
AS select * from SYS.AUD$ where 1=2;
Как возможно, что раздел не определен, когда я делаю это так? Я вставляю из таблицы миллиарды строк и данных с 2005 по настоящее время.
INSERT INTO CENTRUMADMIN.AUD$_BACKUP2 SELECT
SESSIONID,
ENTRYID,
STATEMENT,
TIMESTAMP#,
USERID,
USERHOST,
TERMINAL,
ACTION#,
RETURNCODE,
OBJ$CREATOR,
OBJ$NAME,
AUTH$PRIVILEGES,
AUTH$GRANTEE,
NEW$OWNER,
NEW$NAME,
SES$ACTIONS,
SES$TID,
LOGOFF$LREAD,
LOGOFF$PREAD,
LOGOFF$LWRITE,
LOGOFF$DEAD,
LOGOFF$TIME,
COMMENT$TEXT,
CLIENTID,
SPARE1,
SPARE2,
OBJ$LABEL,
SES$LABEL,
PRIV$USED,
SESSIONCPU,
NTIMESTAMP#,
PROXY$SID,
USER$GUID,
INSTANCE#,
PROCESS#,
XID,
AUDITID,
SCN,
DBID,
SQLBIND,
SQLTEXT
FROM ISKN.AUD$_BACKUP;
Версия моей базы данных 10.2.0.4.0.
Спасибо за ответы.
Honza
Комментарии:
1. Что
select count(*) from iskn.aud$backup where ntimestamp# >= timestamp '2014-08-01 00:00:00'
возвращает? Раздел с именемP_2011
также выглядит неправильно, поскольку он определен как:LESS THAN (TO_DATE('1-1-201''
. Это ошибка копирования и вставки или это действительно так определено?2. Также убедитесь, что у вас нет нулевых значений в ntimestamp # исходной таблицы.
3. Спасибо за совет, в ntimestamp много нулевых значений#