我的数据阶段作业面临问题。我必须从ttperiodeas
文件中在Oracle中填充表.csv
。此屏幕快照显示了Oracle连接器中的SQL查询:
这是Oracle脚本
CREATE TABLE TTPERIODEAS
(
CDPARTITION VARCHAR2(5 BYTE) NOT NULL ENABLE,
CDCOMPAGNIE NUMBER(4,0) NOT NULL ENABLE,
CDAPPLI NUMBER(4,0) NOT NULL ENABLE,
NUCONTRA CHAR(15 BYTE) NOT NULL ENABLE,
DTDEBAS NUMBER(8,0) NOT NULL ENABLE,
DTFINAS NUMBER(8,0) NOT NULL ENABLE,
TAUXAS NUMBER(8,5) NOT NULL ENABLE,
CONSTRAINT PK_TTPERIODEAS
PRIMARY KEY (CDPARTITION, CDCOMPAGNIE, CDAPPLI, NUCONTRA, DTDEBAS)
)
PARTITION BY LIST(CDPARTITION)
(PARTITION P_PERIODEAS_13Q VALUES ('13Q'));
运行作业时,出现以下消息错误,并且表未填充。
索引“ USINODSD0.SYS_C00249007”及其分区不可用
请帮助我谢谢
答案 0 :(得分:3)
该索引是全局索引(即未分区),因为定义末尾没有using index local
。对于上面显示的PK指数也是如此。 (我假设它们是两种不同的东西,因为默认情况下,上面的DDL会创建一个名为PK_TTPERIODEAS
的索引,所以我不确定SYS_C00249007
是什么。)如果可以删除并重建它们因为本地索引(即已分区以匹配表)然后被截断或删除分区将不再使索引无效。
例如,您可以将主键重建为:
alter table ttperiodeas
drop primary key;
alter table ttperiodeas
add constraint pk_ttperiodeas primary key (cdpartition,cdcompagnie,cdappli,nucontra,dtdebas)
using index local;
我不知道SYS_C00249007
的定义,但是您可以使用类似的内容。
create table
命令可能类似于:
create table ttperiodeas
( cdpartition varchar2(5 byte) not null
, cdcompagnie number(4,0) not null
, cdappli number(4,0) not null
, nucontra varchar2(15 byte) not null
, dtdebas number(8,0) not null
, dtfinas number(8,0) not null
, tauxas number(8,5) not null
, constraint pk_ttperiodeas
primary key (cdpartition,cdcompagnie,cdappli,nucontra,dtdebas)
using index local
)
partition by list(cdpartition)
( partition p_periodeas_13q values ('13Q') );
或者,您可以在删除分区时添加update global indexes
子句:
alter table demo_temp drop partition p_periodeas_14q update global indexes;
(顺便说一句,NUCONTRA
应该是标准的VARCHAR2
而不是CHAR
,这是为了实现跨平台兼容性和ANSI完整性,实际上浪费了空间和会产生错误。)
答案 1 :(得分:0)
该消息说给定分区的索引不可用:因此您可以尝试使用
重建相应的索引分区create index [index_name] rebuild partition [partition_name]
(具有[index_name]
和[partition_nme]
的合适值。
在执行此操作之前,应检查user_indexes
中索引分区的状态-因为您的错误消息看上去与Oracle错误消息通常不一样。
但是正如William Robertson指出的那样,由于该索引是全球索引,因此不适用于给定情况。