If your replicat is abended with belwo message
Unique key for table cannot be used due to the inclusion of virtual columns, or user-defined datatypes, or extended long varchar columns, or function-based index columns.
encountered an update where all key columns for target table SIEBEL.CX_USER_RESP are not present.
Then you need to use keycols on replicat side (Doc ID 1578985.1)
in my case below was the table
SQL> desc TXUSER.CX_USER
Name Null? Type
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
ROW_ID NOT NULL VARCHAR2(15 CHAR)
CREATED NOT NULL DATE
CREATED_BY NOT NULL VARCHAR2(15 CHAR)
LAST_UPD NOT NULL DATE
LAST_UPD_BY NOT NULL VARCHAR2(15 CHAR)
MODIFICATION_NUM NOT NULL NUMBER(10)
CONFLICT_ID NOT NULL VARCHAR2(15 CHAR)
DB_LAST_UPD DATE
X_ADD_FLG CHAR(1 CHAR)
DB_LAST_UPD_SRC VARCHAR2(50 CHAR)
X_EMP_ID VARCHAR2(15 CHAR)
X_GRP_NAME VARCHAR2(100 CHAR)
X_DESCRIPTION VARCHAR2(300 CHAR)
it has a unique key but it is not getting used in replication
SQL> set long 99999999
SQL> select dbms_metadata.get_ddl('INDEX','CX_USER_P1','TXUSER') from dual;
DBMS_METADATA.GET_DDL('INDEX','CX_USER_RESP_P1','TXUSER')
--------------------------------------------------------------------------------
CREATE UNIQUE INDEX "TXUSER"."CX_USER_P1" ON "TXUSER"."CX_USER" ("X_GRP_NAME", "X_EMP_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TXUSERDATA"
so i added below highlighted mapping with KEYCOL in my replicat file just above my genaral schema mapping
map TXUSER.CX_USER_RESP, target TXUSER.CX_USER_RESP, KEYCOLS(X_GRP_NAME,X_EMP_ID);
map TXUSER.*, target TXUSER.*;