开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

请问flink CDC中使用cdc查询oracle表数据,报这个错是什么原因?

请问flink CDC中使用cdc查询oracle表数据,报这个错是什么原因?[ERROR] Could not execute SQL statement. Reason:java.lang.AbstractMethodError: Method io/debezium/connector/oracle/OracleChangeEventSourceFactory.getSnapshotChangeEventSource(Lio/debezium/pipeline/source/spi/SnapshotProgressListener;)Lio/debezium/pipeline/source/spi/SnapshotChangeEventSource; is abstract
75a6592b6ee38c01370fa812d693e3c4.png
flink-sql-connector-oracle-cdc-2.2.1.jar。

展开
收起
小易01 2023-07-19 18:38:25 121 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    如果在 Flink CDC 中使用 CDC 查询 Oracle 表数据时,出现以下错误:
    pgsql
    Copy
    org.apache.flink.table.api.ValidationException: Table 'oracle' is not an append-only table. Append-only tables are required to be able to use the CDC source.
    这个错误通常是由于 Oracle 表不支持 CDC 或者未正确启用 CDC 导致的。在 Oracle 数据库中,必须启用 CDC 功能才能使用 Flink CDC 连接器读取表中的数据。如果未启用 CDC,则无法使用 CDC 连接器。
    要启用 Oracle 表的 CDC 功能,需要使用 DBMS_CDC_PUBLISH 包中的 ENABLE_CAPTURE 子程序来启用表的 CDC。具体而言,可以按照以下步骤启用 CDC:
    首先,使用 Oracle 用户登录到数据库中,该用户必须具有 SYSDBA 或 SYSOPER 角色。
    然后,运行以下命令启用表的 CDC:
    sql
    Copy
    BEGIN
    DBMS_CDC_PUBLISH.ENABLE_CAPTURE(
    object_schema => 'schema_name',
    object_name => 'table_name',
    capture_values => 'ALL',
    use_rowid => TRUE,
    enqueue_name => null,
    source_database => null,
    column_group => null,
    capture_function => null);
    END;
    其中,schema_name 和 table_name 分别是要启用 CDC 的表所在的模式和表名。capture_values 参数指定要捕获的列,use_rowid 参数指定是否使用 ROWID 进行标识行,enqueue_name 参数指定 CDC 队列的名称,source_database 参数指定源数据库的名称,column_group 参数指定捕获列的分组,capture_function 参数指定 CDC 函数的名称。
    例如,可以按照以下方式启用表的 CDC:
    sql
    Copy
    BEGIN
    DBMS_CDC_PUBLISH.ENABLE_CAPTURE(
    object_schema => 'test_schema',
    object_name => 'test_table',
    capture_values => 'ALL',
    use_rowid => TRUE,
    enqueue_name => null,
    source_database => null,
    column_group => null,
    capture_function => null);
    END;
    最后,可以使用 Flink CDC 连接器读取已启用 CDC 的表中的数据。
    如果在启用 CDC 后仍然出现相同的错误,请确保使用的 Oracle JDBC 驱动程序版本正确

    2023-07-29 19:21:33
    赞同 展开评论 打赏
  • 存在即是合理

    推测是由于使用的Flink CDC连接器库中缺少OracleChangeEventSourceFactory的实现类所导致的。OracleChangeEventSourceFactory是Debezium连接器库中用于创建Oracle数据源的工厂类。需要确保您的Flink应用程序包含完整的Debezium连接器库,并且该库中包含OracleChangeEventSourceFactory的实现类。如果使用的是Maven项目,需要在pom.xml文件中添加以下依赖项:

     <dependency>
        <groupId>io.debezium</groupId>
        <artifactId>debezium-core</artifactId>
        <version>1.4.1.Final</version>
    </dependency>
    

    如果使用的是Gradle项目,您需要在build.gradle文件中添加以下依赖项:

    dependencies {
        implementation 'io.debezium:debezium-core:1.4.1.Final'
    }
    

    也可能是由于使用的 Flink CDC 版本与Oracle 数据库版本不兼容导致的。建议检查Flink CDC 版本和 Oracle 数据库版本是否匹配,并尝试升级或降级其中一个版本以解决此问题。

    2023-07-24 19:58:10
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载

    相关镜像