【问题标题】:Unusable partition Oracle / datastage无法使用的分区 Oracle / datastage
【发布时间】:2019-01-17 22:12:50
【问题描述】:

我的 datastage 工作遇到问题。我必须从.csv 文件中填写Oracle 中的ttperiodeas 表。 Oracle 连接器中的 SQL 查询如下图所示:

Oracle connector

这里是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' 它的分区不可用

我需要帮助谢谢

【问题讨论】:

    标签: oracle indexing partition datastage


    【解决方案1】:

    索引是全局的(即未分区),因为定义末尾没有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 完整性,实际上只是浪费空间并产生错误。)

    【讨论】:

    • 你好,威廉,
    • 能否分享整个创建表格的脚本
    • @younes:我添加了一个示例create table
    • 应该注意,只有当您的分区键列也是复合主键的一部分时,您才能将LOCAL 用于主键(或任何其他唯一索引)
    【解决方案2】:

    消息说给定分区的索引不可用:因此您可以尝试使用

    重建相应的索引分区
    create index [index_name] rebuild partition [partition_name] 
    

    (带有[index_name][partition_nme] 的拟合值。

    在您这样做之前,您应该检查user_indexes 中的索引分区的状态 - 因为您的错误消息看起来不像 Oracle 错误消息通常那样。

    但正如 William Robertson 指出的那样,由于索引是全局的,因此这不适用于给定的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多