Unable to Connect to MS SQL Server Due to DB server closed connection
症状
- The JIRA application fails to start when running the startup checks.
- The JIRA application fails to create an XML backup successfully.
atlassian-jira.log
に次のエラーが返される。
2012-07-18 17:54:23,978 main ERROR [jira.appconsistency.db.DatabaseConsistencyCheck] There was a SQL exception checking for database driver correctness. Skipping.
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (I/O Error: DB server closed connection.)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.ofbiz.core.entity.transaction.JNDIFactory.getJndiConnection(JNDIFactory.java:207)
at org.ofbiz.core.entity.transaction.JNDIFactory.getConnection(JNDIFactory.java:138)
at org.ofbiz.core.entity.TransactionFactory.getConnection(TransactionFactory.java:101)
at org.ofbiz.core.entity.ConnectionFactory.getConnection(ConnectionFactory.java:59)
...
Caused by: java.sql.SQLException: I/O Error: DB server closed connection.
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2311)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:603)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:357)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
... 40 more
Caused by: java.io.IOException: DB server closed connection.
at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:844)
at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:723)
at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:466)
at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:103)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2206)
... 48 more
または
2013-09-10 07:34:51,624 QuartzScheduler_Worker-2 ERROR ServiceRunner Backup Service [service.services.export.ExportService] An exception while running the export service "Backup Service": Error exporting data: org.ofbiz.core.entity.GenericTransactionException: Error occurred while rolling back transaction. (Connection net.sourceforge.jtds.jdbc.ConnectionJDBC3@11931fc4 is closed.)
com.atlassian.core.AtlassianCoreException: Error exporting data: org.ofbiz.core.entity.GenericTransactionException: Error occurred while rolling back transaction. (Connection net.sourceforge.jtds.jdbc.ConnectionJDBC3@11931fc4 is closed.)
at com.atlassian.jira.service.services.export.ExportService.performBackup(ExportService.java:149)
at com.atlassian.jira.service.services.export.ExportService.run(ExportService.java:131)
at com.atlassian.jira.service.JiraServiceContainerImpl.run(JiraServiceContainerImpl.java:61)
at com.atlassian.jira.service.ServiceRunner.execute(ServiceRunner.java:48)
at org.quartz.core.JobRunShell.run(JobRunShell.java:195)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
原因
This is most likely caused by either of the following:
The SQL Server uses an SSL connection and a valid client certificate is required to communicate with the SQL Server. This can be verified by checking the SQL Server logs in Event Viewer for the following error:
Encryption is required to connect to this server but the client library does not support encryption.
The SQL server is running on a port that is not the default 1433. For example, binding to SQL server on 2431 can cause this problem.
ソリューション
Using SSL:
- First verify that the JIRA application server can both ping and telnet to the database server.
Disable the "Force Encryption On" setting on the MS SQL Server.
- Restart the JIRA application and monitor the
atlassian-jira.log
to see if the connection is successful.
または
Install the certificate from the SQL Server into the keystore that the JIRA application uses as per our Connecting to SSL services.
Using a non-standard port:
Review this MSDN blog on tips for making application connectivity work.