Configuring Connection Details

This section provides instructions for configuring the connection details required to establish communication between the Micro-Integration and your third-party system.

For information about configuring the connection to the event broker, see Connecting to Your Event Broker.

This Micro-Integration supports workflows only in the direction of:

  • Oracle to Solace

The name of the binder for Oracle CDC is oracdc.

Oracle Database Prerequisites

 

Before you use the Micro-Integration for Oracle CDC, you must configure your Oracle database by completing the following steps:

  1. Configure the CDC user by running the following commands in SQL*Plus as SYSDBA:

    CONNECT SYS/password AS SYSDBA;
    
    CREATE USER SOLACE IDENTIFIED BY password
      DEFAULT TABLESPACE USERS
      TEMPORARY TABLESPACE TEMP
      QUOTA UNLIMITED ON USERS;
    
    GRANT CONNECT, RESOURCE, DBA TO SOLACE;
    GRANT SELECT ANY TRANSACTION TO SOLACE;
    GRANT SELECT ANY DICTIONARY TO SOLACE;
    GRANT EXECUTE_CATALOG_ROLE TO SOLACE;
    GRANT SELECT_CATALOG_ROLE TO SOLACE;
    GRANT LOGMINING TO SOLACE;
    
    ALTER USER SOLACE SET CONTAINER_DATA=ALL CONTAINER=CURRENT;
    GRANT SET CONTAINER TO SOLACE;
  2. Grant privileges to the SOLACE user inside the pluggable database (PDB).

    ALTER SESSION SET CONTAINER = FREEPDB1;
    
    GRANT CONNECT, RESOURCE, DBA TO SOLACE;
    GRANT SELECT ANY TRANSACTION TO SOLACE;
    GRANT SELECT ANY DICTIONARY TO SOLACE;
    GRANT EXECUTE_CATALOG_ROLE TO SOLACE;
    GRANT SELECT_CATALOG_ROLE TO SOLACE;
    GRANT LOGMINING TO SOLACE;
  3. Enable ARCHIVELOG mode (required by LogMiner-based CDC). To enable ARCHIVELOG mode:

    1. Configure the archive destination:

      ALTER SESSION SET CONTAINER = CDB$ROOT;
      
      ALTER SYSTEM SET db_recovery_file_dest_size = 10G SCOPE=BOTH;
      ALTER SYSTEM SET db_recovery_file_dest = '/opt/oracle/oradata' SCOPE=BOTH;
    2. Restart the database and enable ARCHIVELOG:

      SHUTDOWN IMMEDIATE;
      
      CONNECT SYS/password AS SYSDBA;
      STARTUP MOUNT;
      
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
      
      ALTER PLUGGABLE DATABASE ALL OPEN;
      ALTER SYSTEM REGISTER;
  4. Enable database-level supplemental logging:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;
  5. Create the tables required in the SOLACE schema:

    ALTER SESSION SET CONTAINER = FREEPDB1;
  6. Enable table-level supplemental logging:

    ALTER TABLE SOLACE.ORDERS ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    ALTER TABLE SOLACE.CUSTOMERS ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  7. Verify that the tables you need have been created:

    SELECT owner, table_name
    FROM all_tables
    WHERE owner='SOLACE'
      AND table_name IN ('ORDERS','CUSTOMERS');
    
    EXIT;

Oracle Boolean Support

Oracle Database 23 introduces native support for a BOOLEAN data type; however, the Micro-Integration for Oracle CDC for Oracle does not support this type. Because of this limitation, when a table in Oracle contains a boolean or boolean-like column, the Micro-Integration for Oracle CDC does not emit a native boolean value in CDC events.

Before Oracle 23, the database did not provide a native boolean type. In those versions, many users simulated boolean behavior by storing logical values in numeric columns, often NUMBER(1), where 1 means true and 0 means false.

To enable you to convert source columns to boolean data types, Debezium provides a NumberOneToBooleanConverter custom converter that you can use in one of the following ways:

  • Map all NUMBER(1) columns to a BOOLEAN type.

  • Enumerate a subset of columns by using a comma-separated list of regular expressions.

To use this type of conversion, you must set the converters configuration property with the selector parameter, as shown in the following example:

converters=boolean
boolean.type=io.debezium.connector.oracle.converters.NumberOneToBooleanConverter
boolean.selector=.*MYTABLE.FLAG,.*.IS_ARCHIVED

LOB and XMLTYPE Handling

Oracle treats large objects (LOBs) such as BLOB, CLOB, and XMLTYPE in a special way. When these columns are modified, Oracle generates multiple internal redo operations (INSERT + UPDATE + UPDATE) to write the LOB data. These operations always occur at the database level and are captured by LogMiner.

Because of this, the Micro-Integration for Oracle CDC provides two configuration options:

  • lobEnabled

    Setting lobEnabled=true enables LOB processing in the Debezium Oracle connector so that supported LOB types (CLOB, BLOB, XMLTYPE) are properly serialized and included in the outgoing CDC event. We recommend setting lobEnabled=true by default, with the option for you to disable it if necessary.

  • columnExcludeList

    The columnExcludeList parameter allows you to exclude specific columns from the outgoing CDC message. This is useful when a column is too large (for example, a profile picture BLOB), the column is not needed downstream, or you want to reduce message size.

    Example:

    columnExcludeList=SCHEMA_B.COMMON_TYPES.PROFILE_PICTURE

    When combined with lobEnabled=true, the Micro-Integration removes the excluded LOB column from the final CDC payload.

These settings control how LOB/XMLTYPE fields appear in the final outgoing CDC message, but they do not prevent Oracle or LogMiner from processing internal LOB writes.

Even when a LOB column is excluded from the final payload, Oracle still writes all internal LOB redo records (INSERT and multiple UPDATE operations), and LogMiner continues to read these internal changes as usual. Micro-Integration for Oracle CDC processes these LOB operations internally and collapses them into a single logical CDC event. The filtering is applied only at the final stage by the Micro-Integration for Oracle CDC, which removes the excluded LOB column from the outgoing message. As a result, the database performs the full LOB write internally, but the excluded column does not appear in the final CDC event published.

Oracle Quoted vs. Nonquoted Identifiers

In Oracle, the behavior of column names depends on whether the identifier is created as a quoted or nonquoted identifier. This behavior is defined by the Oracle SQL Language Reference and directly affects how column names appear in CDC events:

  • Nonquoted Identifiers

    When an identifier is created without double quotes, Oracle treats it as a nonquoted identifier, which follows these rules:

    • A nonquoted identifier is not surrounded by any punctuation.

    • Nonquoted identifiers are automatically folded to uppercase.

    For example, when a column is created without quotes (column_2_decimal), Oracle stores it internally as COLUMN_2_DECIMAL. Oracle metadata exposes column names exactly as stored. As a result, the column is emitted in CDC events as COLUMN_2_DECIMAL (uppercase).

  • Quoted Identifiers

    When an identifier is created with double quotes, it becomes a quoted identifier, which preserves the letter case. A quoted identifier begins and ends with double quotation marks ("). If you name a schema object using a quoted identifier, then you must use the double quotation marks whenever you refer to that object.

    For example, when a column is created with quotes ("column_2_decimal"), Oracle stores it exactly as column_2_decimal (lowercase preserved). Oracle metadata read exposes the column name exactly as stored. As a result, the column is emitted in CDC events as column_2_decimal (lowercase).

Oracle Connection Details

To manually configure the Oracle connection details, set the following properties in application.yml:

spring:
  cloud:
    stream:
      oracdc:
        bindings:
          input-0:
            consumer:
              endpoint:
                query-parameters:
                  databaseHostname: <hostname>
                  databasePort: <port>
                  databaseUser: <database user name>
                  databasePdbName: <PDB name>
                  databaseDbname: <database name>
                  databasePassword: <password>
                  ...

Where:

  • databaseHostname is the hostname or IP address of the Oracle database server.

  • databasePort is the connection port of the Oracle database server (default: 1521).

  • databaseUser is the username to use for logging in to Oracle. The user must have CDC privileges.

  • databasePdbName is the name of the pluggable database (PDB) that the Micro-Integration should connect to and monitor for CDC events.

  • databaseDbname is the name of the Oracle database (container database or pluggable database) used by the Micro-Integrationas its logical server name for CDC metadata.

  • databasePassword is the password to use for authenticating with the Oracle database.

Checkpoint Store Configuration

The Micro-Integration for Oracle CDC stores the information about the current progress of processing change events in a checkpoint store backed by a Last Value Queue (LVQ) on a Solace event broker. The checkpoint store contains information about the System Change Number (SCN) that has been processed.

For example, add the following settings to the application.yml file:

solace:
  oracdc:
    checkpoint:
      lvqName: lvq-checkpoint
      autoProvisionLvq: true

The following table lists the configuration options for the Checkpoint Store.

Config Option Type Valid Values Default Value Description

solace.oracdc.checkpoint.lvqName

String

Required.

The name of the event broker Last Value Queue (spool size 0) to be used for checkpointing. The queue must exist on the same event broker and Message VPN as the target queue.

If the LVQ is deleted (administratively) or a message from the LVQ is deleted or consumed by another consumer, the Micro-Integration for Oracle CDC will not be able to resume from the last checkpoint. In addition, the LVQ should not be shared by multiple instances of the Micro-Integration for Oracle CDC.

solace.oracdc.checkpoint.autoProvisionLvq

boolean

true, false

false

Optional.

When true, indicates that the LVQ queue will be auto-provisioned if it does not exist.

Oracle CDC Binder Configuration Options

The following properties are available at the Oracle CDC binder level.

Config Option Type Valid Values Description

spring.cloud.stream.bindings.input-<workflow-id>.destination

String

Format:

schema.tableName

For example, INVENTORY.CUSTOMERS

The Oracle table from which to consume change events. The destination must include the schema name and the name of the table.

spring.cloud.stream.bindings.input-<workflow-id>.binder

String

oracdc

This property must be set to oracdc.

Oracle CDC Consumer Configuration Options

The following configuration options are available for the Oracle CDC consumer.

All properties must be prefixed with spring.cloud.stream.oracdc.bindings.input-<workflow-id>.consumer.endpoint.query-parameters.

Example configuration:

spring:
  cloud:
    stream:
      oracdc:
        bindings:
           input-0:
             consumer:
               endpoint:
                 query-parameters:
                   <connection parameters>
                   snapshotMode: no_data
                   skipDeleteEvents: false
                   lobEnabled: true
                   databaseConnectionAdapter: logminer
                   logMiningStrategy: hybrid
                   maxBatchSize: 2048
Config Option Type Valid Values Default Value Description
snapshotMode String initial, schema_only, when_needed, never, no_data, initial_only no_data The criteria for running a snapshot upon startup of the Micro-Integration.
skipDeleteEvents boolean true, false false When true, indicates that DELETE operation events will be skipped.
lobEnabled boolean true, false true When true, indicates that LOB (CLOB, BLOB, NCLOB) support is enabled.
logMiningFlushTableName String Specifies the auxiliary table used by Debezium LogMiner to flush SCN state during processing. This table must be unique per Micro-Integration instance to prevent collisions when multiple Micro-Integrations run against the same database.
columnExcludeList String

A comma-separated list of columns to exclude from CDC events. Each entry must use the format:

<schema>.<table>.<column>

Columns listed here will be omitted from the event payload before it is published.

databaseConnectionAdapter String logminer, logminer_unbuffered, old, xstream logminer The CDC implementation strategy.
logMiningStrategy String online_catalog, redo_log_catalog, hybrid hybrid The LogMiner strategy.
logMiningSessionMaxMs Integer 300000 The maximum LogMiner session duration in milliseconds.
logMiningSleepTimeIncrementMs Integer 200 The sleep time increment for adaptive polling.
logMiningSleepTimeMaxMs Integer 3000 The maximum sleep interval (ms) between LogMiner polling cycles when backoff is applied.
logMiningSleepTimeMinMs Integer 1000 The minimum sleep interval (ms) between LogMiner polling cycles during low activity.
maxBatchSize Integer 2048 The maximum number of events to batch.
maxQueueSize Integer 8192 The maximum internal event queue size.
schemaNameAdjustmentMode String none Controls how schema and table names are normalized to make them valid logical identifiers.
includeSchemaChanges boolean true, false false When true, indicates that DDL schema changes will be captured.
tombstonesOnDelete boolean true, false false When true, indicates that tombstone events will be emitted on DELETE operations.
eventProcessingFailureHandlingMode String fail, warn, skip, ignore fail The error handling mode.
snapshotLockingMode String shared, minimal, extended, none shared Controls the type of locks acquired during the initial snapshot. shared prevents writes while reading tables, while minimal and none reduce locking at the risk of inconsistent snapshot reads.
tableExcludeList String A comma-separated list of tables to exclude.