ORA-14300分区键映射到超出最大允许分区数的分区”

问题描述 投票:2回答:1

在将分区添加到目标表后,运行Applier在IDR 9.6.3 HotFix 1中将数据加载到Oracle目标时问题描述

在将INTERVAL分区添加到目标表列后,Informatica数据复制(IDR)应用程序过程无法将数据插入到目标机,并且出现Ora-14300错误。

分区详细信息:

PARTITION BY RANGE ("column_name") INTERVAL (NUMTODSINTERVAL(1,'DAY')) 

带有错误记录的Applier日志如下:

"
* Informatica Data Replication Oracle  Applier, Version 9.6.3 HF1 Build 4825416
* Production Version 
* This copy of Data Replication is registered to IDR_0104, licensed for 1 machine 
* Copyright (C) 1993-2016 Informatica LLC. All Rights Reserved.
* See patents at https://www.informatica.com/legal/patents.html.
* Contact support at [email protected]
* Data Replication is running on host [cesp001] system [Linux] 
* Release [2.6.32-642.3.1.el6.x86_64] version [#1 SMP Sun Jun 26 18:16:44 EDT 2016]
* Machine [x86_64] CPU cores [4]

2016-10-07 13:58:12.399 (E2EE23E0) IDR-000240 I Started loading the configuration from the configuration SQLite database.
2016-10-07 13:58:12.406 (E2EE23E0) IDR-000239 I Finished loading the configuration from the configuration SQLite database.
2016-10-07 13:58:12.446 (E2EE23E0) IDR-000263 I Runtime settings: 
                                                apply.direct_load_for_audit_tables 0
                                                apply.local_time_zone_hours 8
                                                apply.recovery_table "IDR_TGT_USER"."IDR_RECOVERY"

                                                Target database:
                                                ORACLE
                                                Connection string for target database:
                                                IDR_TGT_USER/********@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.14)(PORT=1835))(CONNECT_DATA=(SERVER=DEDICATED)(ORACLE_SID=O1P)))
                                                Character set: AL32UTF8
                                                Ncharacter set: AL16UTF16
                                                NLS_LANG environment variable: AMERICAN_AMERICA.AL32UTF8
                                                Process ID: 26346
                                                Run ID: 350887
                                                Target ID: 118
                                                Multiple targets: no
                                                Continuous mode: disabled
                                                Number of threads: 1
                                                Path to the DBSYNC_HOME directory: /apps/idradmin/dbsync_home/DataReplication.linux.x86_64
                                                Path to the configuration file: /apps/idradmin/dbsync_home/DataReplication.linux.x86_64/configs/PRD.db
                                                Path to the Applier SQLite database: /apps/idradmin/dbsync_home/DataReplication.linux.x86_64/configs/PRD_loader.db
                                                Path to the intermediate file directory:/apps/idradmin/dbsync_home/DataReplication.linux.x86_64/output/PRD
2016-10-07 13:58:12.579 (E2EE23E0) IDR-070288 I Begin scan transaction file: './output/PRD_records1.trn'
2016-10-07 13:58:12.583 (E2EE23E0) IDR-070289 I End   scan transaction file: './output/PRD_records1.trn'
2016-10-07 13:58:12.587 (E2EE23E0) IDR-000384 I Started loading metadata revisions.
2016-10-07 13:58:12.587 (E2EE23E0) IDR-000385 I Finished loading metadata revisions.
2016-10-07 13:58:12.663 (E2EE23E0) IDR-070161 I Recovery run started.
2016-10-07 13:58:12.691 (E2EE23E0) IDR-070174 I Started parsing the intermediate file './output/PRD_records1.dat'.
2016-10-07 13:58:12.693 (E2EE23E0) IDR-070164 I Connecting to the target database.
2016-10-07 13:58:12.757 (E2EE23E0) IDR-070238 I Connected to the target database.
2016-10-07 13:58:12.759 (E2EE23E0) IDR-070175 I Completed parsing the intermediate file './output/PRD_records1.dat'. Processed 1706 records.
2016-10-07 13:58:12.777 (000D6700) IDR-070231 E The Applier thread 878336 encountered an error in the function 'MyOtlStream::flush'.
2016-10-07 13:58:12.777 (000D6700) IDR-009002 E The following error occurred when working with the database: 

ORA-14300: partitioning key maps to a partition outside maximum permitted number of partitions

                                                SQL statement: INSERT INTO "ODS_CRM"."TAB_REPL"(OP_TIME,OP_CODE,OP_CMT_SCN,OP_CMT_TIME,OP_XID,OP_NUM_IN_TX,"UPDATE_STAMP_O",
"FORMATTED_NAME_O","S_FORMATTED_NAME_O","PERSON_ID_TYPE2HGBST_ELM_O","GENDER2HGBST_ELM_O","CONT_LANG2HGBST_ELM_O","X_NATIONALITY2HGBST_ELM_O","X_RACE2HGBST_ELM_O",
"X_VIP_CODE2HGBST_ELM_O","X_BLCKLST_RSN2HGBST_ELM_O","OBJID_O","FIRST_NAME_O","S_FIRST_NAME_O","LAST_NAME_O","S_LAST_NAME_O","PHONE_O","FAX_NUMBER_O","E_MAIL_O","MAIL_STOP_O",
"EXPERTISE_LEV_O","TITLE_O","HOURS_O","SALUTATION_O","MDBK_O","STATE_CODE_O","STATE_VALUE_O","ADDRESS_1_O","ADDRESS_2_O","CITY_O","STATE_O","ZIPCODE_O","COUNTRY_O","STATUS_O",
"ARCH_IND_O","ALERT_IND_O","DEV_O","MOBILE_PHONE_O","MAIN_RSRC_O","BLG_EVT_GEN_STS_O","ID_VALUE_O","S_ID_VALUE_O","CONTACT_ID_O","LEGAL_NAME_O","PREVIOUS_NAME_O") 
VALUES (:COT           ,:COP         ,:CCS          ,:CCT           ,:CXD          ,:CNTX     ,:P1           ,:P2           ,:P3            ,:P4          ,:P5          ,:P6          ,:P7          ,:P8          
,:P9          ,:P10          ,:P11          ,:P12           ,:P13           ,:P14           ,:P15           ,:P16          ,:P17          ,:P18           ,:P19           ,:P20          ,:P21           ,:P22           ,:P23           ,:P24           ,:P25          ,:P26          ,:P27           ,:P28           ,:P29           ,:P30           ,:P31          ,:P32           ,:P33          ,:P34          ,:P35          ,:P36          ,:P37          ,:P38  ) 
                                                Additional info: 
                                                Error code: 14300
2016-10-07 13:58:12.778 (000D6700) IDR-070229 E Row index: 1. Columns: 142. Total columns: 142.
2016-10-07 13:58:12.778 (000D6700) IDR-070057 E The Applier thread 878336 encountered an OTL or database error when applying a row to the target.
2016-10-07 13:58:12.780 (000D6700) IDR-070062 E The Applier thread 878336 encountered an OTL or database error in the function 'ParallelPostRecordTask::FlushChangeRecordToDestination'.
2016-10-07 13:58:12.780 (000D6700) IDR-070061 E The Applier thread 878336 encountered an OTL or database error in the function 'ParallelPostRecordTask::svc'.
2016-10-07 13:58:12.785 (E2EE23E0) IDR-070090 E The Applier thread 0 returned the error code 5.
2016-10-07 13:58:12.787 (E2EE23E0) IDR-070082 E The Applier encountered a fatal error.
2016-10-07 13:58:12.794 (E2EE23E0) IDR-070132 E Could not finalize the 'PostTaskExecutor' mechanism that distributes records from the intermediate files across Applier threads.
"
​

原因

发生此问题的原因是,在其上创建分区条件的列是在IDR中创建的虚拟列,并且使用SQL表达式更新了该值。它不是源自源的列。

使用虚拟列时,Applier首先插入物理列,然后使用基于物理列计算的值更新虚拟列。

因此,首先将分区列插入NULL值,这会使分区条件无效并导致Oracle错误。

解决方案要解决此问题,请执行以下操作之一:

Drop the current partition and use a different column [not a virtual column originated from IDR] as partition key and restart applier task.

OR

Based on the SQL expression being used to update the virtual column value, alter the column to include a DEFAULT value. Thus, on insert, the default value will be inserted first and the update will apply the value from the SQL expression.

您将需要为表启用行移动,以便在Applier发出后续更新时将行移动到适当的分区。

oracle oracle11g ddl toad
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.