Oracle 12c - 获取 SQL 错误:17410,SQLState:08000

问题描述 投票:0回答:2

我正在开发一个使用 ORACLE 12c db 作为后端的项目。我的应用程序是用 java 8 构建的。自上个月以来它运行良好。但突然客户端出错了

SQL Error: 17410, SQLState: 08000
No more data to read from socket. 

我搜索了这个问题,所以我找到了以下与 11g 相关的解决方案,不适用于 12c...

案例 1:使用两个 JDBC 连接访问同一个 Oracle 数据库时,抛出“SqlException : No more data to read from socket”。

这是因为你的数据库不支持连接共享,或者是专用服务器,不会响应不同的客户端。

解决方案:(与1相同,但需要手动操作):

open $ORACLE_HOME/network/admin/tnsnames.ora
change “(SERVER = DEDICATED)” to “(SERVER = SHARED)”
restart database and listener

但是我没有运行两个 jdbc 连接。

案例 2:如果您使用 Java,这可能会帮助您: java/jdk1.6.0_31/jre/lib/security/java.security 改变 securerandom.source=文件:/dev/urandom 到 securerandom.source=file:///dev/urandom

任何人都可以给出这个问题的正确原因以及哪种解决方案最能解决这个问题,这样我们以后就不会再遇到这样的问题了。

更新:我有两个处理相同数据库的单独应用程序。一种是创建要处理的待处理项目并保存在数据库中的服务,客户端从数据库中选择待处理项目并对其进行处理。并且两者都在单独的 JVM 中运行。

java spring-jdbc oracle12c
2个回答
2
投票

通常,标准 Oracle 配置中出现以下错误是由于外部原因造成的: SQL 错误:17410,SQLState:08000 没有更多数据可从套接字读取。

问题:

  1. Oracle数据库和应用程序是否在同一网段?

1.1。解决方法#1:如果不是,请将它们移至同一网段以消除与路由器相关的问题

1.2。解决方法#2:如果网络已经相同,或者没有路由器问题,则将数据库和应用程序安装到同一台计算机中以消除网络相关问题

1.3。信息#3:注意上次使用后的数据库连接空闲时间。此行为的模式可能是由于跨 2 个不同网段时的空闲时间造成的

  1. 应用程序是否正在运行长时间运行的 SQL,需要在 Oracle DB 中处理很长时间,例如长时间运行 SELECT、INSERT...SELECT、UPDATE?

2.1。信息#1:启用 SQL 跟踪以便可视化失败的 SQL,因为这可能是相关的并且仅影响长时间运行的 SQL

2.2。信息 #2:从应用程序服务器计算机运行 sqlplus 到远程 Oracle DB。登录后保持连接开放并空闲 1-3 小时。只需在让它闲置后运行任何命令,例如desc table1,选择sysdate,查看连接是否断开。如果是,请与 DBA 和网络管理员讨论是否在 Oracle 或网络设备中设置“策略”来强制关闭空闲连接

2.3。信息#3:应用程序是否有连接池管理器?如果是,则调整其参数,使其保持接近 0 的空闲连接。逐渐增加它,看看问题在什么阈值下才会显现出来

  1. 是否涉及防火墙?

  2. 是否涉及负载均衡器?

  3. 当应用程序主动与先前的服务器通信时,是否有一个虚拟主机名指向不同的服务器?


在 tnsnames.ora 中,在 TNS 中设置“(SERVER = SHARED)”通常是错误的做法。许多人并不完全理解这种设置的目的是什么,并且没有解决问题的根本原因。换句话说,如果是由于网络硬件问题、路由器问题、虚拟主机名故障转移等原因导致的


0
投票

c.zaxxer.hikari.pool.ProxyConnection|HikariPool-1 - 连接 oracle.jdbc.driver.T4CConnection@2f72db6d 由于 SQLSTATE(08000)、ErrorCode(17410) java.sql.SQLRecoverableException: 没有更多数据可读取而标记为损坏从插座

上面的异常是来自数据库数据库端的,如果你编写了正确的代码,导致这个异常的原因有很多 -

  1. 数据库配置 - 检查数据库配置,如 URL、用户名或密码。

  2. 网络 - 检查应用程序和 Oracle 数据库服务器之间的连接。

  3. 数据库服务器负载 - 检查 Oracle 数据库服务器上的负载。

  4. Oracle JDBC 驱动程序问题 - 确保您使用的 Oracle JDBC 驱动程序版本与 Oracle 数据库兼容。升级或降级 JDBC 驱动程序可能会解决兼容性问题。

  5. 连接池配置 - 检查您的连接池配置,尤其是最大连接池大小。如果池太小,可能会导致连接问题。

这可能是原因,就我而言,有人更改了数据库密码,因此我遇到了这个问题。

谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.