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 is oracdc.

To share settings across all workflows in a Micro-Integration, configure the binder-specific parameters under default at the binder level instead of under a workflow-specific identifier (for example, input-0) in bindings. This reduces repetition when multiple workflows use the same parameter values. Workflow-specific settings override default settings when both are present.

Note that default is a sibling of bindings; it is not nested under bindings. Use the same hierarchy under default as you use under bindings.<binding-name>. For example, for bindings.input-0.consumer.someProperty=someValue the default setting is default.consumer.someProperty=someValue.

spring:
  cloud:
    stream:
      <binder-name>:
        default:
          <shared parameters>
        bindings:
          input-0:
            <workflow-specific parameters>

Oracle Database Prerequisites

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

Oracle Datatype Handling

Oracle's handling of booleans, large objects, and quoted identifiers affects what appears in CDC event payloads and how column names are represented. Depending on your schema, you may need to configure both the database and the Micro-Integration to get the expected output.

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.

To handle this, you can use the following options:

  • lobEnabled

    Setting lobEnabled=true enables LOB processing in the Micro-Integration (using Debezium) 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 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>
                  databasePdbName: <PDB name>
                  databaseDbname: <database name>
                  ...

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).

  • 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-Integration as its logical server name for CDC metadata.

There are additional options required depending on the authentication type. For more information, see Basic Authentication or Client Certificate Authentication.

Basic Authentication

To use basic authentication, configure the following properties in application.yml:

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

Where:

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

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

Client Certificate Authentication

This Micro-Integration supports TLS and mutual TLS (mTLS) connections to Oracle databases that use Oracle Wallet for TLS configuration. An Oracle Wallet is a password-protected container that stores the SSL/TLS certificates and keys that Oracle uses for secure connections. The connection uses the TCPS (TCP with SSL/TLS) protocol on port 2484 by default.

Choose TLS if your Oracle server is configured with a server-side certificate for connection encryption. Choose mTLS if your organization requires mutual authentication and you have a custom (non-auto-managed) Oracle Wallet.

Mutual TLS is not supported with auto-managed wallets, such as OCI-managed wallets. Auto-managed wallets do not allow private key export or client certificate import, which are required for mTLS.

  • TLS (one-way): Encrypts the connection and verifies the Oracle server's identity. Provide a truststore (JKS or PKCS12 format) containing the Oracle server's CA certificate, exported from the server-side Oracle Wallet. To export the truststore, use the orapki wallet export command or Oracle Wallet Manager.

  • Mutual TLS (mTLS): Provides two-way authentication. Requires a custom Oracle Wallet on the Oracle server. The Oracle server must have SSL_CLIENT_AUTHENTICATION=TRUE configured and the client certificate imported into the server-side Oracle Wallet. In addition to a truststore, provide a keystore (JKS or PKCS12 format) containing the client certificate and private key.

To use Client Certificate Authentication (TLS or mTLS), configure the following properties in application.yml. The databaseUrl parameter replaces databaseHostname and databasePort:

oracdc:
  bindings:
    input-0:
      consumer:
        endpoint:
          query-parameters:
            databasePdbName: <PDB name>
            databaseDbname: <database name>
            databaseUrl: <database URL>
            databaseUser: <database user name>
            databasePassword: <password>
            oracleSslTrustStore: <path/to/truststore.jks>
            oracleSslTrustStoreType: JKS
            oracleSslTrustStorePassword: <truststore password>
            # For mTLS, also set:
            oracleSslKeyStore: <path/to/keystore.jks>
            oracleSslKeyStoreType: JKS
            oracleSslKeyStorePassword: <keystore password>

Where:

  • databaseUrl is the Oracle TNS connection string using the TCPS protocol. Format:

     "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=<hostname>)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=<service_name>)))"

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

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

  • oracleSslTrustStore is the path to the truststore file (.jks or .p12) that contains the server's certificate, exported from the server-side Oracle Wallet.

  • oracleSslTrustStoreType is the format of the truststore file. Valid values: JKS, PKCS12.

  • oracleSslTrustStorePassword (optional) is the truststore password.

  • oracleSslKeyStore (mTLS only) is the path to the keystore file (.jks or .p12) that contains the client certificate and private key.

  • oracleSslKeyStoreType (mTLS only) is the format of the keystore file. Valid values: JKS, PKCS12.

  • oracleSslKeyStorePassword (mTLS only, optional) is the keystore password.

Checkpoint Store Configuration

The Micro-Integration for Oracle Bulk 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 Bulk 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 Bulk 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.

solace.oracdc.checkpoint.cacheFlushFrequency

long

3000

Optional.

The frequency (in milliseconds) at which the checkpoint cache is flushed to the LVQ.

Oracle Bulk CDC Binder Configuration Options

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

Config Option Type Valid Values Description

spring.cloud.stream.bindings.input-0.destination

String

Format:

schema.tableName

For multiple tables, use a semicolon-separated list:

INVENTORY.CUSTOMERS;INVENTORY.ORDERS

Regular expressions are also supported, for example:

INVENTORY.TABLE_.*

The Oracle tables from which to consume change events. The destination must include the schema name and the name of the table. You can specify multiple tables using a semicolon-separated list or a regular expression.

spring.cloud.stream.bindings.input-0.binder

String

oracdc

This property must be set to oracdc.

Oracle Bulk CDC Consumer Configuration Options

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

All properties must be prefixed with spring.cloud.stream.oracdc.bindings.input-0.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 true When true, indicates that DELETE operation events will be skipped. Defaults to true.
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.