我们有13个应用程序服务器,其中一个应用程序服务器在启动tomcat时会得到
严重:无法创建池的初始连接。java.sql。SQLRecoverableException:IO错误:连接超时。原因:原因:java.net.SocketException:联机逾时。
我们没有得到其余服务器的错误。因此,我们编写了一个java代码来测试jdbc,以找出错误是由于数据库连接还是应用程序引起的。我们也得到了java代码的相同错误。
我们检查连接性时执行的操作:
- Telnet正在连接到Oracle数据库服务器
1.网络团队分析了tcpdump,应用程序和数据库服务器之间的握手成功
Java程式码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcDemo {
public static void main(String[] args){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("COnnection started");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@"+"db_ip"+":"+"1521"+"/"+"db_name","db_user","password");
System.out.println("COnnection Established");
//Statement st=con.createStatement();
System.out.println("connection name"+con);
//ResultSet rs=st.executeQuery("");
}
catch(Exception e){
e.printStackTrace();
}
}
我们得到的错误:
root@app_server_ip # java -cp .:ojdbc7.jar JdbcDemo
COnnection started
java.sql.SQLRecoverableException: IO Error: Connection reset
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:841)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:755)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:38)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:599)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at JdbcDemo.main(JdbcDemo.java:13)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at oracle.net.ns.Packet.receive(Packet.java:317)
at oracle.net.ns.DataPacket.receive(DataPacket.java:101)
at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:301)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:245)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:167)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:119)
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:75)
at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:447)
at oracle.jdbc.driver.T4C8TTIdty.receive(T4C8TTIdty.java:706)
at oracle.jdbc.driver.T4C8TTIdty.doRPC(T4C8TTIdty.java:611)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:2161)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:564)
... 6 more
应用程序服务器:红帽企业Linux服务器6.8版
Oracle数据库版本:甲骨文11g
1条答案
按热度按时间2sbarzqh1#
我们在Oracle 11 g和Red Hat Linux系统上遇到了类似的问题,解决方案是添加这些conf/run-time参数。
Oracle JDBC驱动程序需要一些随机数来维护安全标准。为此,它使用java访问
/dev/random
。/dev/random
由系统运行,需要硬件交互(如单击鼠标和其他键盘交互)。您可以按原样添加参数(请注意,/./urandom
不是输入错误)。