Oracle XStream setup with RAC

129 views
Skip to first unread message

Aqhil Mohammad

unread,
Feb 18, 2026, 9:21:10 AMFeb 18
to debezium
Hi All,

I have some queries. Hope I expect some clarification.

1) We are trying to setup Oracle Xstream with RAC having SCAN address, can we use "database.url" so we can mention Primary and Standy cluster SCAN address respectively. Could let me know if I can mention like below ?
database.url": "jdbc:oracle:thin:@(DESCRIPTION="
      + "(ADDRESS_LIST="
      + "  (ADDRESS=(PROTOCOL=TCP)(HOST=scan1.grp.net)(PORT=1521))"
      + "  (ADDRESS=(PROTOCOL=TCP)(HOST=scan2.grp.net)(PORT=1521))"
      + ")"
      + "(CONNECT_DATA=(SERVICE_NAME=XSTREAM_SVC)))",
2)  We are using Terraform, can I use this docker image 
https://hub.docker.com/r/debezium/connect. Because latest version is 3.4 on the document but I do not see 3.4 version on docker hub. Can you provide the latest docker image version for oracle connector
3) While using RAC does it handle node failover when DB switches from Node1 to Node2, I hope it does.

Thanks,
Akhil Mohammad.

Chris Cranford

unread,
Feb 18, 2026, 9:34:44 AMFeb 18
to debe...@googlegroups.com
Hi -

You can use the `database.url` configuration property; however, when using TNS configuration, if I recall FAILOVER=ON and LOAD_BALANCE=OFF must be set.  

As for images, Debezium has not published images to DockerHub since the end of the 2.x release stream.  All container images are published to quay.io. Please see this blog post [1] for all the details.

Lastly wrt to when the service transitions from Node1 to Node2, it's important to make sure that XStream's RAC configuration is setup with use_rac_service=Y. This should make sure that when the service migrates across nodes, the Oracle JDBC driver will be able to negotiate and resolve to the right SCAN address.

Hope that helps.
-cc

[1]: https://debezium.io/blog/2024/09/18/quay-io-reminder/
--
You received this message because you are subscribed to the Google Groups "debezium" group.
To unsubscribe from this group and stop receiving emails from it, send an email to debezium+u...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/debezium/3471a94c-9686-4bb5-9f1a-0cf99551ef7fn%40googlegroups.com.

Aqhil Mohammad

unread,
Feb 18, 2026, 9:55:35 AMFeb 18
to debezium
Hello Chris,

Thanks for the update. Yes can see now on  quay.io 

Yes for oracle service we will set  use_rac_service=Y

1) Can you let me know if we can use Debezium oracle xstream for Production or has it been tired by others ?
2) For the connector configuration, I don't see database.service.name which was used in confluent xstream connector. Though it uses same Debezium framework. In that sense I don't see the need to use database.service.name for Debezium xstream isn't ?

Chris Cranford

unread,
Feb 18, 2026, 10:00:44 AMFeb 18
to debe...@googlegroups.com
Hi, 

1. Yes you can use it in production.
2. There is no `database.service.name`, you supply that information using either `database.hostname` or `database.url` depending on your needs.

-cc

Aqhil Mohammad

unread,
Feb 18, 2026, 10:03:34 AMFeb 18
to debezium
Excellent Chris,

Thanks for the confirmation, will setup and comeback if I'm stuck.

Aqhil Mohammad

unread,
Feb 18, 2026, 11:01:32 AMFeb 18
to debezium
Hello,

Regarding DB Pre-requisites, can we follow below doc, as it has clear instructions 



As both follow almost same steps.

Aqhil Mohammad

unread,
Feb 19, 2026, 12:03:49 PMFeb 19
to debezium
Hello Chris,

Wanted to check, does Debezium provides (Red Hat) provides professional support on xstream connector ?

Chris Cranford

unread,
Feb 19, 2026, 12:23:34 PMFeb 19
to debe...@googlegroups.com
Hi,

Yes, support for XStream officially begins early April 2026. So if you're interested, now is a great time to reach out.

-cc

Aqhil Mohammad

unread,
Feb 19, 2026, 3:45:25 PMFeb 19
to debezium
Hello,

We are trying to set up at the first. Bu eventually would be interested going forward. Can you provide the medium to reach out on the support model.  

Aqhil Mohammad

unread,
Feb 20, 2026, 6:36:30 AMFeb 20
to debezium
Hello Chris,

Can you provide Price/Quotation for xstream.

Aqhil Mohammad

unread,
Feb 23, 2026, 5:20:26 AMFeb 23
to debezium
Hello Chris,

Can you let me know the support model, whom to reach out ?

Chris Cranford

unread,
Feb 23, 2026, 5:58:17 AMFeb 23
to debe...@googlegroups.com
Hi,

You can contact a Red Hatter here [1] about Red Hat Application Foundations, which includes the Red Hat build of Debezium.

-cc

[1]: https://www.redhat.com/en/products/application-foundations

Aqhil Mohammad

unread,
Mar 19, 2026, 5:31:18 AM (14 days ago) Mar 19
to debezium
Hello Chris,

I have installed xstream, though fixed few issues. Now before starting the connector getting the error.

Caused by: java.sql.SQLRecoverableException: ORA-12514: Cannot connect to database. Service DCEX0016 is not registered with the listener at host 10.146..***.*** port 1809. (CONNECTION_ID=TVjXTV3mAAHgYwoBNQoDsw==)
Help: https://docs.oracle.com/error-help/db/ora-12514/

        at oracle.jdbc.driver.T2CConnection.checkError(T2CConnection.java:1319)
        at oracle.jdbc.driver.T2CConnection.checkError(T2CConnection.java:1208)
        at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:782)
        at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:1178)
        at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:89)
        at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:52)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:887)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:694)
        at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
        at io.debezium.jdbc.JdbcConnection.lambda$patternBasedFactory$0(JdbcConnection.java:198)
        at io.debezium.jdbc.JdbcConnection$ConnectionFactoryDecorator.connect(JdbcConnection.java:136)
        at io.debezium.jdbc.JdbcConnection.establishConnection(JdbcConnection.java:917)
        at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:901)
        at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:895)
        at io.debezium.jdbc.JdbcConnection.createStatementFromFactory(JdbcConnection.java:1572)
        at io.debezium.jdbc.JdbcConnection.queryAndMap(JdbcConnection.java:643)
        at io.debezium.jdbc.JdbcConnection.queryAndMap(JdbcConnection.java:518)
        at io.debezium.connector.oracle.OracleConnection.resolveOracleDatabaseVersion(OracleConnection.java:162)
        ... 8 more
[2026-03-19 09:16:00,342] ERROR Failed testing connection for {connector.class=io.debezium.connector.oracle.OracleConnector, errors.log.include.messages=true, value.converter.schema.registry.ssl.key.password=********, topic.creation.default.partitions=1, value.converter.schema.registry.ssl.keystore.password=********, topic.heartbeat.prefix=stc-heartbeat-risp, errors.deadletterqueue.context.headers.enable=true, schema.history.internal.producer.security.protocol=SSL, schema.history.internal.consumer.ssl.key.password=********, schema.history.internal.producer.ssl.truststore.password=********, topic.creation.default.replication.factor=1, errors.deadletterqueue.topic.replication.factor=1, schema.history.internal.consumer.ssl.keystore.password=********, errors.log.enable=true, key.converter=org.apache.kafka.connect.json.JsonConverter, database.dbname=DCEX0016, database.user=stc_connect_user, schema.history.internal.consumer.ssl.keystore.location=/mnt/sslcerts/keystore.p12, heartbeat.interval.ms=300000, schema.history.internal.kafka.bootstrap.servers=b0.dev-k4a.recp-da-kafka-dev.shared.banksvcs.net:9093,b1.dev-k4a.recp-da-kafka-dev.shared.banksvcs.net:9093,b2.dev-k4a.recp-da-kafka-dev.shared.banksvcs.net:9093, topic.creation.groups=stc, schema.history.internal.producer.ssl.key.password=********, topic.creation.enable=false, key.converter.schemas.enable=false, value.converter.schema.registry.url=https://schemaregistry.dev-k4a.recp-da-kafka-dev.shared.banksvcs.net, errors.deadletterqueue.topic.name=stc-dbz-risp-dlq, database.password=********, name=stc-dbz-poc-connector, schema.history.internal.producer.ssl.keystore.location=/mnt/sslcerts/keystore.p12, value.converter.schemas.enable=false, errors.tolerance=all, snapshot.mode=no_data, schema.history.internal.consumer.security.protocol=SSL, tasks.max=1, value.converter.schema.registry.ssl.truststore.password=********, tombstones.on.delete=false, topic.prefix=stc-dbz-xstream, decimal.handling.mode=string, schema.history.internal.consumer.ssl.truststore.location=/mnt/sslcerts/truststore.p12, schema.history.internal.kafka.topic=stc-dbz-xstream-schema-history, value.converter.schema.registry.ssl.keystore.location=/mnt/sslcerts/keystore.p12, database.out.server.name=XOUT_DBZ, value.converter=org.apache.kafka.connect.json.JsonConverter, schema.history.internal.producer.ssl.keystore.password=********, value.converter.schema.registry.ssl.truststore.location=/mnt/sslcerts/truststore.p12, database.connection.adapter=xstream, database.pdb.name=DOEX0016A, schema.history.internal.consumer.ssl.truststore.password=********, database.port=1809, max.request.size=2000000, topic.delimiter=-, database.hostname=mmcac05d1381s0.server.banksvcs.net, schema.history.internal.producer.ssl.truststore.location=/mnt/sslcerts/truststore.p12, table.include.list=risp.dlv_monitoring,risp.isv_param}with user '[database.user,null,[],[],true]' (io.debezium.connector.oracle.OracleConnector:94)
org.apache.kafka.connect.errors.RetriableException: Failed to resolve Oracle database version
        at io.debezium.connector.oracle.OracleConnection.resolveOracleDatabaseVersion(OracleConnection.java:193)
        at io.debezium.connector.oracle.OracleConnection.getOracleVersion(OracleConnection.java:151)
        at io.debezium.connector.oracle.OracleConnector.lambda$validateConnection$0(OracleConnector.java:88)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at io.debezium.util.Threads$3.lambda$newThread$0(Threads.java:314)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLRecoverableException: ORA-12514: Cannot connect to database. Service DCEX0016 is not registered with the listener at host 10.146.***.*** port 1809. (CONNECTION_ID=TVjXTV3mAAHgYwoBNQoDsw==)
Help: https://docs.oracle.com/error-help/db/ora-12514/

        at oracle.jdbc.driver.T2CConnection.checkError(T2CConnection.java:1319)
        at oracle.jdbc.driver.T2CConnection.checkError(T2CConnection.java:1208)
        at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:782)
        at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:1178)
        at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:89)
        at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:52)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:887)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:694)
        at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
        at io.debezium.jdbc.JdbcConnection.lambda$patternBasedFactory$0(JdbcConnection.java:198)
        at io.debezium.jdbc.JdbcConnection$ConnectionFactoryDecorator.connect(JdbcConnection.java:136)
        at io.debezium.jdbc.JdbcConnection.establishConnection(JdbcConnection.java:917)
        at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:901)
        at io.debezium.jdbc.JdbcConnection.connection(JdbcConnection.java:895)
        at io.debezium.jdbc.JdbcConnection.createStatementFromFactory(JdbcConnection.java:1572)
        at io.debezium.jdbc.JdbcConnection.queryAndMap(JdbcConnection.java:643)
        at io.debezium.jdbc.JdbcConnection.queryAndMap(JdbcConnection.java:518)
        at io.debezium.connector.oracle.OracleConnection.resolveOracleDatabaseVersion(OracleConnection.java:162)
        ... 8 more

Here is the connector configuration.

Spec:
  Class:  io.debezium.connector.oracle.OracleConnector
  Configs:
    database.connection.adapter:                               xstream
    database.dbname:                                           DCEX**
    database.hostname:                                         mmcac05d***net
    database.out.server.name:                                  XOUT_DBZ
    database.password:                                         *****
    database.pdb.name:                                         DOEX**
    database.port:                                             1809
    database.user:                                             stc_connect_user
    decimal.handling.mode:                                     string
    errors.deadletterqueue.context.headers.enable:             true
    errors.deadletterqueue.topic.name:                         stc-dbz-risp-dlq
    errors.deadletterqueue.topic.replication.factor:           1
    errors.log.enable:                                         true
    errors.log.include.messages:                               true
    errors.tolerance:                                          all
    heartbeat.interval.ms:                                     300000
    key.converter:                                             org.apache.kafka.connect.json.JsonConverter
    key.converter.schemas.enable:                              false
    max.request.size:                                          2000000
    schema.history.internal.consumer.security.protocol:        SSL
    schema.history.internal.consumer.ssl.key.password:         ******
    schema.history.internal.consumer.ssl.keystore.location:    /mnt/sslcerts/keystore.p12
    schema.history.internal.consumer.ssl.keystore.password:    ******
    schema.history.internal.consumer.ssl.truststore.location:  /mnt/sslcerts/truststore.p12
    schema.history.internal.consumer.ssl.truststore.password:  ******
    schema.history.internal.kafka.bootstrap.servers:           b0.dev-******.net:9093,b1.dev-******.net:9093,b2.dev-******.net:9093
    schema.history.internal.kafka.topic:                       stc-dbz-xstream-schema-history
    schema.history.internal.producer.security.protocol:        SSL
    schema.history.internal.producer.ssl.key.password:         ******
    schema.history.internal.producer.ssl.keystore.location:    /mnt/sslcerts/keystore.p12
    schema.history.internal.producer.ssl.keystore.password:    ******
    schema.history.internal.producer.ssl.truststore.location:  /mnt/sslcerts/truststore.p12
    schema.history.internal.producer.ssl.truststore.password:  ******
    snapshot.mode:                                             no_data
    table.include.list:                                        risp.dlv_monitoring,risp.isv_param
    tombstones.on.delete:                                      false
    topic.creation.default.partitions:                         1
    topic.creation.default.replication.factor:                 1
    topic.creation.enable:                                     false
    topic.creation.groups:                                     stc
    topic.delimiter:                                           -
    topic.heartbeat.prefix:                                    stc-heartbeat-risp
    topic.prefix:                                              stc-dbz-xstream
    value.converter:                                           org.apache.kafka.connect.json.JsonConverter
    value.converter.schema.registry.ssl.key.password:          ******
    value.converter.schema.registry.ssl.keystore.location:     /mnt/sslcerts/keystore.p12
    value.converter.schema.registry.ssl.keystore.password:     ******
    value.converter.schema.registry.ssl.truststore.location:   /mnt/sslcerts/truststore.p12
    value.converter.schema.registry.ssl.truststore.password:   ******
    value.converter.schema.registry.url:                       https://schemaregistry.*****.net
    value.converter.schemas.enable:                            false
  Connect Cluster Ref:
    Name:    dbz-connect-cluster
  Task Max:  1
Status:
  App State:  Failed
  Conditions:
    Last Probe Time:       2026-03-18T12:42:50Z
    Last Transition Time:  2026-03-18T12:42:50Z
    Message:               connect Rest API request failed: Connector configuration is invalid and contains the following 1 error(s):
Unable to connect: Failed to resolve Oracle database version
You can also find the above list of errors at the endpoint `/connector-plugins/{connectorType}/config/validate` (400)
    Reason:               UpdateFailed
    Status:               False
    Type:                 platform.confluent.io/app-ready
  Connect Rest Endpoint:  https://dbz-connect-cluster.dbz-connect-cluster.svc.cluster.local:8083
  Connector State:        RUNNING
  Failed Tasks:
    task-0:
      Id:               0
      Retry Count:      10
      Worker ID:        dbz-connect-cluster-1.dbz-connect-cluster.dbz-connect-cluster.svc.cluster.local:8083
  Failed Tasks Count:   1
  Kafka Cluster ID:     YGTL-peLQIeAIy9hwXCoHg
  Observed Generation:  2
  Restart Policy:
    Max Retry:  10
    Type:       OnFailure
  State:        ERROR
  Tasks Ready:  0/1
  Worker ID:    dbz-connect-cluster-1.dbz-connect-cluster.dbz-connect-cluster.svc.cluster.local:8083
Events:
  Type     Reason   Age                      From       Message
  ----     ------   ----                     ----       -------
  Warning  Warning  5m43s (x136 over 6h11m)  connector  connect Rest API request failed: Connector configuration is invalid and contains the following 1 error(s):
Unable to connect: Failed to resolve Oracle database version
You can also find the above list of errors at the endpoint `/connector-plugins/{connectorType}/config/validate` (400)

With the database.connection.adapter:  xstream

we can't use database.hostname and database.port and have to rely on database.url ?

Chris Cranford

unread,
Mar 19, 2026, 6:54:27 AM (13 days ago) Mar 19
to debe...@googlegroups.com
Hi -

You can use either database.url or database.hostname, just not both. Typically with XStream users prefer `database.url` as you can specify other characteristics for the Oracle JDBC driver to natively handle when the XStream service stops on one Oracle RAC node and is restarted on another. But the error in this case is related to the fact that the `database.dbname` you're specifying in the configuration is not registered with the database's TNS listener. This happens when you're attempting to connect using the SID but the DBA has only exposed the SERVICE_NAME or you're connecting using the SERVICE_NAME and only the SID is exposed. 

-cc

Aqhil Mohammad

unread,
Mar 23, 2026, 12:47:24 PM (9 days ago) Mar 23
to debezium
Hello Chris,

It's working with  database.url.

   I have query, while creating XStream Administrator user & user, we have created tablespaces both in CDB and PDB as per the requirement.

But when the PDB service name provided it, it failed with below error. It is important to use PDB Service name because During DR event, it'll be consistent and CDB service name will differ.

**Error:**
```
oracle.streams.StreamsException: ORA-26913: must connect to instance 1 where XStream Outbound server "XOUT_DBZ" is running
```

**Root Cause:** XStream outbound server `XOUT_DBZ` is pinned to RAC instance 1. The service `DCEX****.net` runs on both instance 1 and instance 2. When the listener load-balances the connection to instance 2, XStream attach fails.

**Fix:** Used CDB service name `DCEX****.net` with full TNS descriptor format including `ENABLE=broken`:
```
jdbc:oracle:oci:@(DESCRIPTION=(ENABLE=broken)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port)))(CONNECT_DATA=(SERVICE_NAME=DCEX0****.net)))
```

**Note:** PDB service name `DCEX0016_DOEX0016A.paas.oracle.com` cannot be used — `XOUT_DBZ` is defined at CDB level (`CDB$ROOT`), connecting via PDB service gives `ORA-26701: Streams process XOUT_DBZ does not exist`.

 
database.url: "jdbc:oracle:oci:@(DESCRIPTION=(ENABLE=broken)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={{ $v.hostname }})(PORT={{ $v.port }})))(CONNECT_DATA=(SERVICE_NAME={{ $v.dbServiceName }})))"

Chris Cranford

unread,
Mar 23, 2026, 1:11:49 PM (9 days ago) Mar 23
to debe...@googlegroups.com
Hi, I'm afraid this isn't Debezium-specific, the fact you must connect to the CDB rather than the PDB is a hard requirement from Oracle.

If I recall correctly, the DBA documentation for XStream from Oracle discusses setting up a custom service on both the primary and DR that use the same name. This way you connect to the XStream service name rather than your existing CDB services, so that during failover scenarios, the services properly resolve and avoid any manual connector configuration adjustments.

-cc

Aqhil Mohammad

unread,
Mar 23, 2026, 1:21:58 PM (9 days ago) Mar 23
to debezium
Thanks Chris,

Will check this option, if not we have to stick to the current setup for manual adjustment during the event. Do you re-call the documentation for it.

Chris Cranford

unread,
Mar 24, 2026, 11:04:03 AM (8 days ago) Mar 24
to debe...@googlegroups.com
I'm afraid I don't have the link handy more. 
Reply all
Reply to author
Forward
0 new messages