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

我flinksql 连接oracle时间长 Closed Connection报错这个怎么设置?

请问大神我flinksql 连接oracle时间长 Closed Connection报错这个怎么设置

展开
收起
游客6vdkhpqtie2h2 2022-09-02 16:06:25 992 0
14 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    可以调整以下参数来解决这个问题:

    1. 在Oracle端,将SQLNET.EXPIRE_TIME参数值调整为较大的值,比如60分钟,以确保连接不会超时关闭。

    2. 在阿里云实时计算Flink端,可以设置以下参数:

      a. 设置连接池大小,增加连接的可用性,可以通过以下配置设置:

      table.exec.connection-pool.size=10
      

      b. 调整连接空闲超时时间,以保证连接不会被关闭:

      table.exec.connection-timeout=5min
      

      c. 启用TCP keepalive来检测连接是否已关闭:

      table.exec.resource.tcp.keepalive=true
      

      d. 调整Oracle JDBC驱动程序连接参数以启用JDBC批处理,以减少网络延迟:

      table.exec.source.driver-class-name=oracle.jdbc.driver.OracleDriver
      table.exec.source.driver-properties.enableBatch=true
      

    根据以上方法进行调整,应该可以解决连接关闭的问题。

    2023-05-06 11:55:16
    赞同 1 展开评论 打赏
  • 对于 FlinkSQL 连接 Oracle 数据库时间长 Closed Connection 报错问题,可以尝试按照以下几个方面进行设置:

    1、设置连接池大小: 在 FlinkSQL 配置文件中设置连接池中最大连接数和最小连接数,以确保连接池中有足够的连接可用。例如:

    # 设置连接池大小
    jobmanager.execution.process-pool.parallelism: 10
    jobmanager.execution.process-pool.blocking-factor: 10
    

    2、设置连接最大空闲时间: 设置连接最大空闲时间,防止连接因为长时间闲置而被数据库服务器主动关闭。例如:

    # 设置连接最大空闲时间
    jobmanager.execution.process-pool.idle-timeout: 300000
    

    3、调整 Oracle 数据库参数: 如果以上两个方面都不起作用,可以考虑调整 Oracle 数据库的参数。例如:

    # 修改 Oracle 数据库参数
    ALTER SYSTEM SET resource_limit = TRUE SCOPE = BOTH;
    ALTER SYSTEM SET sessions = 200 SCOPE = BOTH;
    ALTER SYSTEM SET processes = 200 SCOPE = BOTH;
    

    请根据自己的实际情况选择适当的参数值,以避免影响数据库的正常运行。

    总的来说,解决该问题的关键在于优化 FlinkSQL 和 Oracle 数据库之间的连接,使连接更加稳定可靠。

    2023-05-03 10:12:00
    赞同 展开评论 打赏
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    这个问题有几种方法排查。

    1、查看连接池大小,可以适当增加 可以通过增加连接池大小来缓解连接长时间未使用的问题。您可以在 Flink SQL 配置文件中增加以下配置项来增加连接池大小:

    --最大连接数 flink.sql.client.max-pool-size=20

    2、减少连接空闲时间 可以通过减少连接空闲时间来避免连接长时间未使用而被关闭。您可以在Flink SQL配置文件中增加以下配置项来设置连接空闲时间:

    --连接空闲时间(单位:毫秒) flink.sql.client.idle-timeout=60000

    3、使用keep-alive机制

    可以通过使用keep-alive机制来保持连接的活跃状态。您可以在Flink SQL配置文件中增加以下配置项来启用keep-alive机制:

    --是否启用 keep-alive 机制 flink.sql.client.keep-alive.enabled=true

    --keep-alive 间隔时间(单位:毫秒) flink.sql.client.keep-alive.interval=30000

    2023-04-27 13:52:23
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。
    execution.max-idle-state.retention:默认情况下,Flink 在执行状态空闲一段时间后会自动清除此状态。您可以使用该参数扩展空闲状态的保留时间,以帮助您更持久地保存状态和连接。建议将此值设置为大于您的 Oracle 连接最大空闲时间的值。
    
    execution.max-state-age:该参数定义了状态的最大存在时间。如果状态过期,则 Flink 会自动删除它。通过将此值设置为大于您的 Oracle 连接最大活动时间的值,可以确保状态不会在连接关闭之前过期。
    
    table.exec.resource.default-parallelism:该参数定义了 Flink 作业的并行度。如果您的 Oracle 数据库使用了大量的连接,您可以考虑增加此参数的值来提高并行度,从而充分利用 Flink 的资源。
    
    2023-04-27 12:48:10
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    如果您在使用 Flink SQL 连接 Oracle 数据库时遇到了“Closed Connection”错误,这可能是由于数据库连接超时引起的。为了解决这个问题,您可以尝试以下几个步骤:

    增加连接超时时间:您可以在连接字符串中增加一个连接超时时间参数来增加连接的超时时间。例如,您可以将连接字符串修改为类似于以下内容: jdbc:oracle:thin:@//localhost:1521/ORCL?connectTimeout=5000 在这个示例中,我们将连接超时时间设置为 5000 毫秒(即 5 秒)。您可以根据需要调整此值。

    增加连接池大小:如果您的应用程序需要频繁地从数据库中读取数据,那么您可能需要增加连接池的大小。您可以通过在连接字符串中设置最大连接数来增加连接池的大小。例如,您可以将连接字符串修改为类似于以下内容: jdbc:oracle:thin:@//localhost:1521/ORCL?maxPoolSize=10 在这个示例中,我们将连接池的最大连接数设置为 10。您可以根据需要调整此值。

    检查网络连接:如果您的网络连接不稳定,那么您可能会遇到连接超时或连接中断的问题。请确保您的网络连接稳定,并尝试重新连接数据库。 希望这些步骤能够帮助您解决问题。

    2023-04-26 18:30:13
    赞同 展开评论 打赏
  • 如果您在使用Flink SQL连接Oracle时遇到了"Closed Connection"错误,可能是由于网络或数据库配置等原因导致的。为了解决这个问题,您可以尝试调整相关的连接参数或进行一些其他的优化措施。以下是一些可能有用的建议:

    调整连接池大小 如果您使用连接池管理数据库连接,可以尝试增加连接池大小来提高并发处理能力。可以通过修改max-pool-size和min-idle-time等属性来调整连接池大小和连接的生命周期。

    示例代码如下:

    -- 连接Oracle数据库 CREATE TABLE oracle_table ( id INT, name STRING, age INT ) WITH ( 'connector' = 'jdbc', 'url' = 'jdbc:oracle:thin:@//localhost:1521/ORCLCDB', 'table-name' = 'test_table', 'username' = 'user', 'password' = 'password', 'driver' = 'oracle.jdbc.driver.OracleDriver', 'max-pool-size' = '50', -- 最大连接数 'min-idle-time' = '5s' -- 最小空闲时间 ); 在上述示例中,我们使用max-pool-size属性指定连接池的最大连接数为50个,并使用min-idle-time属性指定连接的最小空闲时间为5秒。

    调整网络超时时间 如果网络延迟较高,可以尝试调整网络超时时间,以便等待更长时间来获取响应。可以通过修改connect-timeout和socket-timeout等属性来调整网络超时时间。

    示例代码如下:

    -- 连接Oracle数据库 CREATE TABLE oracle_table ( id INT, name STRING, age INT ) WITH ( 'connector' = 'jdbc', 'url' = 'jdbc:oracle:thin:@//localhost:1521/ORCLCDB', 'table-name' = 'test_table', 'username' = 'user', 'password' = 'password', 'driver' = 'oracle.jdbc.driver.OracleDriver', 'connect-timeout' = '30s', -- 连接超时时间 'socket-timeout' = '120s' -- Socket超时时间 ); 在上述示例中,我们使用connect-timeout属性指定连接的超时时间为30秒,并使用socket-timeout属性指定Socket的超时时间为120秒。

    需要注意的是,在调整连接参数或进行其他优化措施时,需要根据实际情况进行选择,并进行相应的测试和评估,以确保系统的稳定性和可靠性。同时,也需要考虑不同数据库的特性和要求,以便针对性地进行优化。

    2023-04-26 11:00:17
    赞同 展开评论 打赏
  • 这个问题通常是由于连接池的配置不合理导致的。你可以尝试对连接池的配置进行优化,以延长连接的存活时间。

    具体来说,你可以在 Flink SQL 的配置文件中添加以下配置,以增加连接池的最大空闲时间和最大生命周期:

    # 设置连接池的最大空闲时间为 1 小时(单位为毫秒)
    flink.sql.client.connection-pool.max-idle-time = 3600000
    # 设置连接池的最大生命周期为 8 小时(单位为毫秒)
    flink.sql.client.connection-pool.max-lifetime = 28800000
    

    这些配置将使连接池中的连接在空闲一定时间后自动关闭,同时限制连接的最大生命周期,以避免连接在长时间运行后出现问题。

    另外,你还可以尝试使用 Oracle 数据库的连接心跳功能。具体来说,你可以在 Flink SQL 的连接字符串中添加以下参数:

    jdbc:oracle:thin:@//localhost:1521/ORCL?oracle.net.keepAlive=true&oracle.net.CONNECT_TIMEOUT=5000
    

    其中,oracle.net.keepAlive 参数表示启用连接心跳功能,oracle.net.CONNECT_TIMEOUT 参数表示连接超时时间为 5 秒。这些参数将使连接在一段时间内定期发送心跳包,以避免连接被数据库服务器关闭。

    希望以上信息能够帮助你解决问题。

    2023-04-25 13:03:18
    赞同 展开评论 打赏
  • 如果您在使用 Flink SQL 连接 Oracle 数据库时遇到了 Closed Connection 错误,这可能是由于连接超时导致的。您可以尝试通过调整连接池的配置来解决这个问题。 Flink 使用 HikariCP 作为默认的连接池,您可以通过设置 HikariCP 的相关参数来调整连接池的行为。例如,您可以设置 maximumPoolSize 参数来增加连接池的大小,或者设置 maxLifetime 参数来增加连接的最大生存时间。 下面是一个示例,它演示了如何在 Flink SQL 中设置 HikariCP 的参数:

    CREATE TABLE mytable (
      ...
    ) WITH (
      'connector' = 'jdbc',
      'url' = 'jdbc:oracle:thin:@hostname:port:dbname',
      'table-name' = 'mytable',
      'username' = 'username',
      'password' = 'password',
      'connection.maximum-pool-size' = '20',
      'connection.max-lifetime' = '1800000'
    )
    

    在上面的示例中,设置了 connection.maximum-pool-size 参数来增加连接池的大小,同时设置了 connection.max-lifetime 参数来增加连接的最大生存时间。

    2023-04-25 10:55:44
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,给你分享一个简单的方法,你可以直接在java代码中使用连接池每隔一秒去select 1 即可。

    2023-04-24 21:53:42
    赞同 展开评论 打赏
  • 从事java行业9年至今,热爱技术,热爱以博文记录日常工作,csdn博主,座右铭是:让技术不再枯燥,让每一位技术人爱上技术

    根据错误描述来看的话是oracle连接时间过长没有及时释放且与数据库没有业务交互,超过连接的最大空闲时长自动关闭数据库连接,那么可以考虑设置数据库的最大空闲时长或者增加validationQuery配置来测试数据库连接是否可用,比如 validationQuery=SELECT 1 FROM DUAL

    2023-04-24 20:27:24
    赞同 展开评论 打赏
  • 全栈JAVA领域创作者

    这个问题通常是由于连接池中的连接在使用之后没有及时释放,导致连接池被耗尽而引起的。为了解决这个问题,你可以考虑增加连接池的大小或者缩短连接的超时时间。

    在 Flink SQL 中,可以通过修改以下参数来配置连接池的大小和连接超时时间:

    execution.runtime-plugins.flink.sql-client.connection-pool.max-size:连接池的最大大小,默认为 10。 execution.runtime-plugins.flink.sql-client.connection-pool.idle-time:连接的最大空闲时间,默认为 1 小时。 execution.runtime-plugins.flink.sql-client.connection-timeout:连接的超时时间,默认为 1 分钟。 你可以在 Flink SQL 客户端或者在 flink-conf.yaml 配置文件中设置这些参数,以达到优化连接池的目的。另外,你也可以考虑使用连接池管理工具,如 HikariCP 等,来优化连接池的性能和稳定性。

    2023-04-24 07:54:37
    赞同 展开评论 打赏
  • 热爱开发

    通常情况下,Closed Connection 错误是由于连接池中的连接空闲时间过长而被数据库主动关闭导致的。要解决这个问题,有两种方式可以尝试:

    调整连接池参数:可以尝试调整 FlinkSQL 配置文件中的连接池参数,例如 max-idle-time, max-pending-acquires 等,以适应 Oracle 数据库的设置。具体可以参考你使用的连接池实现(例如 HikariCP、DBCP2 等)的文档进行调整; 使用 Oracle 的 keep-alive 功能:Oracle 支持通过配置 sqlnet.ora 文件开启 keep-alive 功能,即在连接空闲一段时间后自动发送心跳包维持连接。可以尝试通过修改该文件并重启数据库服务来解决连接超时问题。 需要注意的是,对于连接池参数的调整需要根据具体情况进行,建议根据数据库连接的负载情况和系统资源状况进行调整。同时,建议在日志中记录连接超时错误以便进一步排查问题。

    2023-04-23 18:23:11
    赞同 展开评论 打赏
  • 在 Flink SQL 连接 Oracle 数据库时,如果连接时间过长,可能会导致连接被关闭,从而出现 Closed Connection 的报错。

    一种解决方法是增加 Oracle 数据库的超时设置,可以通过修改 sqlnet.ora 文件来实现:

    1. 找到 sqlnet.ora 文件所在目录,一般在 $ORACLE_HOME/network/admin 下。

    2. sqlnet.ora 文件中添加以下配置:

      SQLNET.INBOUND_CONNECT_TIMEOUT = 60
      SQLNET.RECV_TIMEOUT = 60
      

      其中,SQLNET.INBOUND_CONNECT_TIMEOUT 表示连接超时的时间,单位是秒;SQLNET.RECV_TIMEOUT 表示接收数据的超时时间,单位也是秒。可以根据实际情况调整超时时间。

    3. 重启 Oracle 数据库实例使配置生效。

    另外,还可以在 Flink SQL 中使用 SET 命令设置连接超时时间,例如:

    SET execution.checkpoint.timeout=180000; -- 设置连接超时时间为 180 秒
    

    需要注意的是,Oracle 数据库默认的连接超时时间是 10 分钟(600 秒),如果 Flink SQL 设置超时时间较短,可能会导致连接被主动断开。因此,建议适当调整超时时间,避免出现连接断开的问题。

    2023-04-23 17:38:48
    赞同 展开评论 打赏
  • 存在即是合理

    可能是由于以下原因之一:

    1、连接池设置不当:确保在 Flink SQL 配置文件中正确设置连接池的大小和类型。如果连接池设置过小,可能会导致频繁的连接关闭和重新连接,从而导致连接超时。

    2、数据库连接池设置不当:确保在 Flink SQL 配置文件中正确设置数据库连接池的大小和类型。如果连接池设置过小,可能会导致频繁的连接关闭和重新连接,从而导致连接超时。

    3、数据库连接超时:确保在 Flink SQL 配置文件中正确设置数据库连接的超时时间。如果连接超时时间设置过短,可能会导致连接无法及时建立,从而导致连接超时。

    2023-04-23 16:00:37
    赞同 展开评论 打赏
滑动查看更多

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

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关镜像