You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19c通过Debezium XStream连接Kafka失败求助

问题:Debezium XStream连接Oracle 19c失败,提示getOCIHandles特性不支持

使用Oracle DB 19c,通过Debezium XStream连接远程Kafka时,连接器任务运行失败。已为操作用户授予全部权限,但无法附加到XStream outbound server(dbzxout),报错提示Unsupported feature: getOCIHandles。


连接器状态

{
    "name": "ag-test3",
    "connector": {
        "state": "RUNNING",
        "worker_id": "alt-ads-d3.domain.corp:8083"
    },
    "tasks": [
        {
            "id": 0,
            "state": "FAILED",
            "worker_id": "alt-ads-d3.domain.corp:8083",
            "trace": "org.apache.kafka.connect.errors.ConnectException: An exception occurred in the change event producer. This connector will be stopped.\n\tat io.debezium.pipeline.ErrorHandler.setProducerThrowable(ErrorHandler.java:67)\n\tat io.debezium.connector.oracle.xstream.XstreamStreamingChangeEventSource.execute(XstreamStreamingChangeEventSource.java:144)\n\tat io.debezium.connector.oracle.xstream.XstreamStreamingChangeEventSource.execute(XstreamStreamingChangeEventSource.java:45)\n\tat io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:205)\n\tat io.debezium.pipeline.ChangeEventSourceCoordinator.executeChangeEventSources(ChangeEventSourceCoordinator.
}

Kafka连接器日志

[2023-08-22 19:02:05,300] ERROR WorkerSourceTask{id=ag-test3-0} Task threw an uncaught and unrecoverable exception. Task is being killed and will not recover until manually restarted (org.apache.kafka.connect.runtime.WorkerTask:190)
org.apache.kafka.connect.errors.ConnectException: An exception occurred in the change event producer. This connector will be stopped.
        at io.debezium.pipeline.ErrorHandler.setProducerThrowable(ErrorHandler.java:67)
        at io.debezium.connector.oracle.xstream.XstreamStreamingChangeEventSource.execute(XstreamStreamingChangeEventSource.java:144)
        at io.debezium.connector.oracle.xstream.XstreamStreamingChangeEventSource.execute(XstreamStreamingChangeEventSource.java:45)
        at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:205)
        at io.debezium.pipeline.ChangeEventSourceCoordinator.executeChangeEventSources(ChangeEventSourceCoordinator.java:172)
        at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:118)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: oracle.streams.StreamsException: Oracle XStreamOut: failed to attach to XStream outbound server(dbzxout)

        at oracle.streams.XStreamOut.attachInternal(XStreamOut.java:386)
        at oracle.streams.XStreamOut.attach(XStreamOut.java:343)
        at io.debezium.connector.oracle.xstream.XstreamStreamingChangeEventSource.execute(XstreamStreamingChangeEventSource.java:119)
        ... 9 more
Caused by: java.sql.SQLFeatureNotSupportedException: Unsupported feature: getOCIHandles
        at oracle.jdbc.driver.PhysicalConnection.getOCIHandles(PhysicalConnection.java:6559)
        at oracle.streams.XStreamOut.attachInternal(XStreamOut.java:367)
        ... 11 more

连接器配置

{
  "name": "ag-test3",
  "auto.create.topics.enable": "true",
  "config.action.reload": "restart",
  "connector.class": "io.debezium.connector.oracle.OracleConnector",
  "database.connection.adapter": "xstream",
  "database.dbname": "ponpd",
  "database.history.kafka.bootstrap.servers": "***",
  "database.history.kafka.topic": "testagdebezium.oracle6",
  "database.hostname": "***",
  "database.out.server.name": "dbzxout",
  "database.password": "***",
  "database.port": "1521",
  "database.url": "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.33.94)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ponpd)))",
  "database.user": "dbzuser",
  "errors.log.enable": "true",
  "errors.log.include.messages": "true",
  "errors.retry.delay.max.ms": "60000",
  "errors.retry.timeout": "0",
  "errors.tolerance": "none",
  "include.schema.changes": "true",
  "include.schema.comments": "true",
  "internal.snapshot.scan.all.columns.force": "true",
  "key.converter": "org.apache.kafka.connect.storage.StringConverter",
  "key.converter.schemas.enable": "false",
  "schema.history.internal.kafka.bootstrap.servers": "***",
  "schema.history.internal.kafka.topic": "schema-changes.inventory",
  "snapshot.mode": "always",
  "table.include.list": "customers",
  "tasks.max": "1",
  "topic.prefix": "testagdebezium.oracle6",
  "value.converter": "org.apache.kafka.connect.json.JsonConverter",
  "value.converter.schemas.enable": "false"
}

问题原因及解决办法

核心原因

报错getOCIHandles不支持,是因为Debezium的XStream适配器依赖Oracle OCI驱动的特性,但当前使用的是JDBC Thin驱动——Thin驱动不支持getOCIHandles方法,而XStream的Java API需要通过OCI驱动获取底层句柄才能完成连接。

解决步骤

  1. 替换为Oracle OCI驱动
    下载对应Oracle 19c版本的OCI驱动包(可从Oracle官网获取,包含在Instant Client或JDBC驱动包的OCI组件中),将驱动jar包放到Debezium/Kafka Connect的lib目录下,确保驱动版本与数据库版本一致。

  2. 修改JDBC连接URL
    将原Thin驱动的URL替换为OCI驱动格式,示例:

    jdbc:oracle:oci:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.33.94)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ponpd)))
    

    或简化格式:jdbc:oracle:oci://192.168.33.94:1521/ponpd

  3. 配置Oracle客户端环境(Linux/Windows)

    • 安装Oracle Instant Client到Kafka Connect所在服务器
    • 设置环境变量:ORACLE_HOME指向Instant Client目录,将其bin目录添加到PATH;Linux需额外设置LD_LIBRARY_PATH指向Instant Client的库文件目录
  4. 验证XStream与权限配置

    • 确认dbzuser拥有XSTREAM_ADMIN角色,且已被授权访问dbzxout服务器
    • 执行Oracle命令验证XStream服务状态:
      SELECT SERVER_NAME, STATUS FROM DBA_XSTREAM_OUTBOUND;
      
      确保dbzxout状态为ENABLED
  5. 重启服务与连接器
    替换驱动、修改配置后,重启Kafka Connect服务,手动重启连接器任务即可。


内容的提问来源于stack exchange,提问作者kekcment

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:47:32