Skip to content

UPDATE event does not have primary key value #242

@keithlovingcats

Description

@keithlovingcats

A brief description of the bug.
When Oracle table [t2] has a column of type JSON, the update events does have primary key column

Is the bug present on the latest master branch.
I'm using latest 1.8.6 version, Oracle version is [Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0]

Describe steps required to reproduce the bug.
table [t2] defineds as:

create table T2
(
    ID        VARCHAR2(50 char) not null
        primary key,
    UPDATED   TIMESTAMP(6) default NULL,
    FLOAT_COL FLOAT(53),
    JSON_COL  JSON
)

Oracle is installed by docker compose:

services:
  oracle:
    image: oracle/database:21.3.0-ee
    container_name: oracle21c
    ports:
      - "1521:1521"
      - "5500:5500"  # Enterprise Manager Express
    environment:
      ORACLE_SID: ORCLCDB
      ORACLE_PDB: ORCLPDB1
      ORACLE_PWD: Oracle123
      ORACLE_CHARACTERSET: AL32UTF8
    volumes:
      - ./oradata:/opt/oracle/oradata
      - ./fra:/opt/oracle/fast_recovery_area
    shm_size: 2g

OLR docker compose :

services:
  openlogreplicator:
    image: bersler/openlogreplicator:debian-12.0-1.8.6
    container_name: olr
    volumes:
      - /app/oracle/instaince/fra:/opt/fra
      - /app/oracle/instaince/oradata:/opt/oradata
      - ./checkpoint:/opt/OpenLogReplicator/checkpoint
      - ./log:/opt/OpenLogReplicator/log
      - ./output:/opt/output
      - ./scripts:/opt/OpenLogReplicator/scripts
    restart: no #unless-stopped

OLR config: OpenLogReplicator.json

{
  "version": "1.8.6",
  "log-level": 4,
  "trace": 0,
  "dump-redo-log": 0,
  "dump-path": "./log",
  "dump-raw-data": 0,
  "source": [
    {
      "alias": "S1",
      "name": "ORA1",
      "arch-read-sleep-us": 1000,
      "redo-read-sleep-us": 5000,
      "flags": 492832,
      "reader": {
        "type": "online",
        "path-mapping": ["/opt/oracle/oradata", "/opt/oradata", "/opt/oracle/fra", "/opt/fra"],
        "user": "olruser",
        "password": "olr",
        "server": "//192.168.31.70:1521/ORCLPDB1",
        "host-timezone": "+00:00",
        "log-timezone": "+00:00",
        "db-timezone": "+00:00"
      },
      "format": {
        "type": "json",
        "attributes": 0,
        "column": 2,
        "flush-buffer": 0,
        "db": 3,
        "message": 19,
        "rid": 1,
        "schema": 3,
        "timestamp": 9,
        "unknown": 0,
        "unknown-type": 0,
        "xid": 2
      },
      "filter": {
        "table": [
          {"owner": "TEST", "table": ".*"},
          {"owner": "DEV", "table": ".*"}
        ]
      }
    }
  ],
  "target": [
    {
       "...":""
    }
  ]
}
  1. List of commands required to achieve the error, for example:
    sql commands:
INSERT INTO TEST.T2 (ID, UPDATED, FLOAT_COL, JSON_COL)
VALUES ('111', current_timestamp, 66.66,
'{"item_id":5905,"item_name":"Random Item 248","price":241.24}');

 UPDATE TEST.T2 t SET t.UPDATED = current_timestamp, FLOAT_COL=33.333 WHERE t.ID = '111';

 UPDATE TEST.T2 t SET t.UPDATED = current_timestamp, JSON_COL='{"test":5666}' WHERE t.ID = '111';
  1. OLR fired events are:
{"scn":3878313,"tms":"2025-09-05T08:50:15Z.000000Z","c_scn":3883253,"c_idx":1,"xidn":1970402146386562,"db":"ORCLPDB1","payload":[{"op":"c","offset":107050916,"num":0,"rid":"AAASiLAAMAAAAEEAAD","after":{"ID":"313131","UPDATED":"787d09050933073667eae0","FLOAT_COL":"c14343","JSON_COL":"00700001010c00800001000000010000000763d1005c4890005600005201ff4a5a012106030018002400002a76a0001200000008076974656d5f6964096974656d5f6e616d650570726963658403020301000b000f001f22c23c060f52616e646f6d204974656d2032343823c2032a19"}}]}
{"scn":3883254,"tms":"2025-09-05T08:50:24Z.000000Z","c_scn":3883271,"c_idx":1,"xidn":1688905694839463,"db":"ORCLPDB1","payload":[{"op":"u","offset":107059872,"num":0,"rid":"AAASiLAAMAAAAEEAAD","before":{"UPDATED":"787d09050933073667eae0","FLOAT_COL":"c14343"},"after":{"UPDATED":"787d090509331819d32908","FLOAT_COL":"c122221f"}}]}
{"scn":3883318,"tms":"2025-09-05T08:50:41Z.000000Z","c_scn":3883319,"c_idx":1,"xidn":2814801306714707,"db":"ORCLPDB1","payload":[{"op":"u","offset":107074624,"num":0,"rid":"AAASiLAAMAAAAEEAAD","before":{"UPDATED":"787d090509331819d32908","JSON_COL":"00700001010c00800001000000010000000763d1005c4890005600005201ff4a5a012106030018002400002a76a0001200000008076974656d5f6964096974656d5f6e616d650570726963658403020301000b000f001f22c23c060f52616e646f6d204974656d2032343823c2032a19"},"after":{"UPDATED":"787d09050933283ab8fd50","JSON_COL":"00700001010c00800001000000010000000763d200284890002200001e01ff4a5a01210601000500090000e500000474657374840101000522c23943"}}]}

Additional context

  1. As a table [t1] which removes the JSON column, everything works just fine.
  2. I have enabled [0x10000 , 0x20000 ] in flags param, but disable them does not make a difference

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions