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

请问下Flink CDC 抽取Oracle的数据,报这个错误,有谁遇到过么?

请问下Flink CDC 抽取Oracle的数据,报这个错误,有谁遇到过么?iwEcAqNwbmcDAQTRBLwF0QJ3BrCyKIKHY4NQJAalu9anteEAB9ISAVAdCAAJomltCgAL0gABHgQ.png_720x720q90.jpg

展开
收起
防火防爆 2024-08-18 17:09:09 57 0
11 条回答
写回答
取消 提交回答
  • 你的sql语句有问题,是不是动态sql语句太长了造成你那两个过程报错了

    2024-10-29 14:16:43
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    jsORA-00604: error occurred at recursive SQL level 1 ORA-00972: identifier is too long ORA-06512: at "SYS.LOGMNR_KRVRDLUID3", line 1351 ORA-06512: at line 1 ORA-06512: at "SYS.DBMS_LOGMNR", line 58

    1. 标识符过长
      ORA-00972: identifier is too long 表示 SQL 语句中的标识符超过了 Oracle 允许的最大长度(通常为 30 个字符)。这可能是因为表名、列名或其他数据库对象的名称过长。

    解决方案:

    检查相关的数据库对象名称,确保它们不超过 30 个字符。
    如果可能,重命名过长的标识符。

    1. 递归 SQL 错误
      ORA-00604: error occurred at recursive SQL level 1 表示在递归 SQL 调用中发生了错误。这可能是因为 LogMiner 配置或执行的 SQL 语句存在问题。

    解决方案:

    检查 LogMiner 的配置,确保它正确设置并且与 Flink CDC 连接器兼容。
    确保执行的 SQL 语句正确无误。

    2024-10-25 16:35:03
    赞同 展开评论 打赏
  • 错误 "ORA-00604: error occurred at recursive SQL level 1" 是 Oracle 数据库返回的一个内部错误,它通常表明在执行 SQL 语句时发生了某种类型的系统或内部错误。这个错误信息本身比较通用,因此确定具体错误原因可能需要进一步的信息。
    以下是一些可能导致 ORA-00604 错误的原因和解决步骤:

    1. 数据库内部问题
      • 数据库可能遇到了内部不一致性或损坏。
      • 检查数据库的警报日志文件和跟踪文件,以获取更详细的错误信息。
    2. SQL 语句问题
      • 检查引发错误的 SQL 语句是否有语法错误或逻辑问题。
      • 如果可能,简化 SQL 语句,逐步排除可能导致问题的部分。
    3. 触发器或存储过程
      • 如果错误发生在触发器或存储过程中,检查这些对象的代码。
      • 确认是否有递归调用或无限循环。
    2024-10-19 19:35:19
    赞同 展开评论 打赏
  • 错误原因
    "java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1"错误通常发生在一个递归SQL语句中出现了错误。递归SQL语句是指在执行一个SQL语句时,又触发了另一个SQL语句的执行。这个错误的原因可能是以下几种情况之一:

    递归SQL语句中的循环。当一个SQL语句触发了另一个SQL语句的执行,而后者又触发了前者的执行,这样就会形成一个循环,导致递归SQL语句无法终止,最终引发错误。

    数据库对象的无限递归。当数据库中的某个对象触发了自身的操作,而这个操作又触发了同一个对象的另一个操作,就会导致无限递归,最终引发错误。

    SQL语句中的错误。有时候,递归SQL语句本身就存在错误,例如语法错误、查询条件错误等,这些错误也会导致"java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1"错误的发生。

    解决方法
    image.png

    ——参考链接

    2024-10-18 18:11:57
    赞同 1 展开评论 打赏
  • 这个问题可能是由于Flink CDC连接器与Oracle数据库之间的兼容性问题导致的,这里有几个可能的解决方案,这些解决方案基于常见的错误原因和最佳实践:

    一、错误原因及通用解决方案
    不支持的SQL语句
    问题描述:Flink CDC的Oracle Connector使用了Debezium库来解析和抽取数据库中的DML(数据操作语言)语句。如果遇到了一个不受支持的SQL语句,就会抛出错误。
    解决方案:
    检查Oracle数据库中的SQL语句,确保它们都是Flink CDC支持的。
    如果可能,尝试修改Oracle数据库中的SQL语句,使其符合Flink CDC的要求。
    升级Flink CDC和Debezium Connector的版本,以查看是否已修复此问题。
    连接器版本不兼容
    问题描述:Flink CDC和Debezium Connector存在版本兼容性,某些Oracle特定功能或修复可能需要特定的Connector版本才能使用。
    解决方案:
    检查并确认正在使用的Flink CDC和Debezium Connector版本是否兼容。
    如果不兼容,请升级到一个兼容的版本。
    权限不足
    问题描述:Oracle数据库的用户没有足够的权限来执行某些操作。
    解决方案:
    确保Oracle数据库用户具有足够的权限来访问和操作所需的表和视图。
    使用GRANT语句授予用户所需的权限或角色。
    二、具体错误代码及解决方案
    ORA-65040:不允许从可插入数据库内部执行该操作
    问题描述:这是一个Oracle数据库的错误,通常发生在用户尝试在可插入数据库(PDB)内部执行特定操作,而这实际上必须在根容器(CDB)中执行。
    解决方案:
    将Flink CDC的工作放在根容器中执行,而不是在可插入数据库中执行。
    如果无法将工作放到根容器中执行,尝试修改Flink CDC的配置,使其能够在可插入数据库中执行所必需的操作。
    连接问题
    问题描述:无法连接到Oracle数据库,可能是由于数据库地址、端口或服务名配置错误,或者数据库未启动或不可用。
    解决方案:
    检查并确认Oracle数据库的地址、端口和服务名配置正确。
    确保Oracle数据库已启动并可用。
    认证问题
    问题描述:无法使用提供的用户名和密码连接到Oracle数据库,可能是因为用户名和密码不正确,或者用户没有足够的权限。
    解决方案:
    检查并确认提供的用户名和密码正确。
    确保用户具有足够的权限来执行所需的操作。

    2024-10-18 16:48:46
    赞同 展开评论 打赏
  • 这个问题可能是由于Flink CDC连接器与Oracle数据库之间的兼容性问题导致的。为了解决这个问题,你可以尝试以下方法:

    确保你的Flink和Flink CDC的版本与Oracle数据库的版本兼容。你可以查阅官方文档或者社区讨论来获取更多关于版本兼容性的信息。

    检查你的Oracle数据库驱动程序是否正确安装并配置。确保你已经下载了正确版本的Oracle JDBC驱动,并将其添加到Flink的类路径中。

    检查你的Flink配置文件(flink-conf.yaml)中的相关设置,如连接字符串、用户名和密码等,确保它们是正确的。

    如果问题仍然存在,你可以尝试升级或降级Flink和Flink CDC的版本,以找到一个与你的Oracle数据库兼容的版本。

    如果以上方法都无法解决问题,你可以在Flink社区论坛或者GitHub仓库中提交一个issue,详细描述你遇到的问题,以便开发者和其他用户能够提供帮助。

    2024-10-17 16:10:15
    赞同 展开评论 打赏
  • 深耕大数据和人工智能

    Flink CDC 3.0 提供了 Change Data Capture (CDC) 功能,可以捕获数据库的变更事件。当使用 Flink CDC 将数据写入 Doris 时,可以通过以下方式保证有序:

    确保源数据库(如 MySQL)的 binlog_format 设置为 ROW 或 MIXED。这样可以确保在 binlog 中记录的是行级别的变更事件,而不是表级别的 DDL 语句或其他非数据变更事件。

    在 Flink 程序中,使用 Flink SQL 或者 DataStream API 对 CDC 的数据进行排序。例如,可以使用 ORDER BY 子句对数据流进行排序,以确保数据按照某个字段的顺序进行处理。

    在 Doris 中,创建表时可以设置主键和分区键,以便在插入数据时自动进行排序。这样,即使 Flink 输出的数据是无序的,Doris 也会根据主键和分区键对数据进行排序存储。

    如果需要全局有序,可以考虑使用 Flink 的窗口操作(如时间窗口、计数窗口等)对数据进行分组处理,然后再写入 Doris。这样可以确保每个窗口内的数据都是有序的。

    在 Doris 中,可以使用 INSERT INTO ... SELECT 语句将有序的数据插入到目标表中。这样可以确保插入的数据是有序的。

    总之,要保证 Flink CDC 写入 Doris 的数据有序,需要在源数据库、Flink 程序和目标数据库三个层面进行相应的配置和处理。

    2024-10-17 15:44:02
    赞同 展开评论 打赏
  • 在使用Apache Flink的CDC(Change Data Capture)功能从Oracle数据库抽取数据时遇到ORA-00604和ORA-09722错误,通常指示着在Oracle数据库执行的操作中存在一些问题。下面是一些可能的解决步骤和考虑因素:

    1. 标识符长度问题(ORA-09722)
      Oracle数据库中的标识符(如表名、列名、别名等)的长度限制通常是30个字符。如果您在Flink CDC作业中使用了超过这个长度的标识符,或者Oracle数据库中的某些对象(如视图、存储过程等)包含过长的标识符,就会触发ORA-09722错误。

    解决步骤:

    检查Flink CDC作业中引用的所有Oracle数据库对象名,确保它们不超过30个字符。
    如果可能,修改Oracle数据库中的对象名,使其符合长度限制。
    检查任何可能由Flink CDC自动生成的SQL查询,确保它们不包含过长的标识符。

    1. 递归SQL级别错误(ORA-00604)
      ORA-00604错误通常是一个“包装”错误,它指示Oracle在解析或执行SQL语句时遇到了内部问题。这个错误本身并不提供太多关于问题的具体信息,但它通常与另一个错误代码一起出现,如本例中的ORA-09722。

    解决步骤:

    仔细检查Oracle数据库的错误日志和堆栈跟踪,以获取更多关于ORA-00604错误发生上下文的信息。
    如果Flink CDC作业涉及复杂的SQL查询或存储过程调用,尝试简化这些查询或过程,以排除潜在的递归或嵌套SQL问题。
    确保Oracle数据库的PL/SQL代码(如触发器、存储过程等)没有导致递归调用或无限循环。

    1. Flink CDC配置和兼容性
      确保您使用的Flink CDC连接器版本与Oracle数据库版本兼容。
      检查Flink CDC作业的配置设置,确保它们正确无误,并且符合Oracle数据库的要求。
    2. 数据库权限和连接问题
      确保执行Flink CDC作业的Oracle数据库用户具有足够的权限来访问所需的表和视图。
      检查数据库连接设置,确保Flink能够成功连接到Oracle数据库。
    3. 调试和日志记录
      增加Flink作业的日志记录级别,以捕获更多关于错误发生时的详细信息。
      使用Oracle数据库的调试工具(如SQL Trace和TKPROF)来跟踪和分析SQL语句的执行。
      如果上述步骤仍然无法解决问题,您可能需要考虑联系Oracle数据库的支持团队或Apache Flink的社区论坛,以获取更具体的帮助和指导。在寻求帮助时,提供详细的错误日志、Flink作业配置和相关的SQL查询将非常有助于问题的快速解决。
    2024-10-17 10:12:21
    赞同 展开评论 打赏
  • 您在使用Apache Flink的CDC功能从Oracle数据库抽取数据时遇到了一个错误。根据您提供的信息,错误提示是ORA-00604: recursive SQL level error at line 1351以及ORA-09722: identifier is too long。
    这表明您可能在Oracle中遇到了递归SQL级别错误或者标识符长度超过限制的问题。通常这类问题可能是由于您的查询或存储过程中的某些部分导致了Oracle解析器的内部错误。

    2024-10-15 16:19:07
    赞同 展开评论 打赏
  • 技术浪潮涌向前,学习脚步永绵绵。

    从你提供的错误信息来看,Flink CDC 在抽取 Oracle 数据时遇到了一个 SQL 错误。具体错误信息如下:

    java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
    ORA-0972: identifier is too long
    ORA-06512: at "SYS.LOGWR_KRVRDLUID3", line 1351
    ORA-06512: at line 1
    ORA-06512: at "SYS.DBMS_LOGMNR", line 584
    ORA-06512: at line 1
    

    1111.png

    这些错误信息表明在使用 Oracle 的 LogMiner 时遇到了一些问题。以下是一些可能的原因和解决方法:

    1. 标识符太长(ORA-0972)

    ORA-0972: identifier is too long 表示某个标识符(如表名、列名等)超过了 Oracle 允许的最大长度。Oracle 标识符的最大长度通常是 30 个字符。

    解决方法:

    • 检查表名和列名:确保所有表名和列名不超过 30 个字符。
    • 重命名标识符:如果某些标识符确实太长,可以考虑重命名它们,使其符合 Oracle 的限制。

    2. 递归 SQL 级别错误(ORA-00604)

    ORA-00604: error occurred at recursive SQL level 1 表示在递归 SQL 执行过程中发生了错误。这通常与 ORA-0972 错误一起出现。

    解决方法:

    • 检查日志挖掘配置:确保 LogMiner 的配置正确,并且没有使用过长的标识符。
    • 查看 Oracle 日志:查看 Oracle 的告警日志和跟踪文件,以获取更多详细的错误信息。

    3. LogMiner 相关错误

    ORA-06512 错误通常表示在存储过程或触发器中发生了错误。这些错误可能是由于 LogMiner 的内部操作引起的。

    解决方法:

    • 检查 LogMiner 配置:确保 LogMiner 的配置正确,并且所有必要的参数都已设置。
    • 更新 Oracle 版本:如果你使用的是较旧版本的 Oracle,考虑升级到最新版本,因为新版本可能修复了相关的问题。

    4. Flink CDC 配置

    确保 Flink CDC 的配置正确,特别是与 Oracle 连接相关的配置。

    示例配置:

    Properties properties = new Properties();
    properties.setProperty("connector", "oracle-cdc");
    properties.setProperty("hostname", "your_oracle_host");
    properties.setProperty("port", "your_oracle_port");
    properties.setProperty("username", "your_username");
    properties.setProperty("password", "your_password");
    properties.setProperty("database-name", "your_database");
    properties.setProperty("table-name", "your_table");
    properties.setProperty("pdi.enabled", "true"); // 启用 PDI (Parallel Data Import)
    properties.setProperty("debezium.snapshot.locking.mode", "none"); // 不使用锁
    
    OracleSourceBuilder<String> builder = OracleSource.<String>builder()
        .hostname(properties.getProperty("hostname"))
        .port(Integer.parseInt(properties.getProperty("port")))
        .databaseList(properties.getProperty("database-name"))
        .tableList(properties.getProperty("table-name"))
        .username(properties.getProperty("username"))
        .password(properties.getProperty("password"))
        .deserializer(new JsonDebeziumDeserializationSchema()) // 使用 JSON 格式反序列化
        .debeziumProperties(properties);
    
    DataStreamSource<String> source = env.fromSource(builder.build(), WatermarkStrategy.noWatermarks(), "Oracle CDC Source");
    

    5. 检查 Oracle 参数

    确保 Oracle 数据库的参数设置正确,特别是与 LogMiner 相关的参数。

    示例:

    • 启用补充日志记录
      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
      
    • 启用最小补充日志记录
      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
      

    6. 调试和日志

    • 增加日志级别:增加 Flink 和 Debezium 的日志级别,以便获取更多的调试信息。
    • 查看 Oracle 日志:查看 Oracle 的告警日志和跟踪文件,以获取更多详细的错误信息。

    7. 社区和支持

    • 查阅文档:查阅 Flink CDC 和 Debezium 的官方文档,看看是否有相关的问题和解决方案。
    • 社区支持:在 Flink 和 Debezium 的社区论坛或 GitHub 上提问,寻求帮助。

    通过上述步骤,你应该能够诊断并解决 Flink CDC 抽取 Oracle 数据时遇到的 ORA-0972ORA-00604 错误。如果问题仍然存在,建议联系 Oracle 支持团队或 Flink 社区获取进一步的帮助。

    2024-10-14 15:48:43
    赞同 展开评论 打赏
  • ORA-00972: identifier is too long 错误,这是因为 Oracle 对标识符的长度有限制,通常标识符的最大长度为 30 个字符

    image.png

    参考文档https://blog.csdn.net/jike11231/article/details/109306890

    2024-10-14 15:43:56
    赞同 展开评论 打赏
滑动查看更多

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

相关产品

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

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

    相关镜像