JDBC から Oracle への接続の問題を解決する方法 (2 つの具体例)Issue 症状 問題 1: 06/17/19 11:57:02 (149) Worker-Standard:JDBCProbe-fb12d7d6db8e37402cc2105f689619d2 Worker starting: JDBCProbe source: c9bb7ee2db09ff002cc2105f68961923 06/17/19 11:57:03 (040) Worker-Standard:JDBCProbe-fb12d7d6db8e37402cc2105f689619d2 Waiting for connection semaphore 06/17/19 11:57:03 (040) Worker-Standard:JDBCProbe-fb12d7d6db8e37402cc2105f689619d2 Obtained connection semaphore 06/17/19 11:57:03 (149) Worker-Standard:JDBCProbe-fb12d7d6db8e37402cc2105f689619d2 SEVERE *** ERROR *** java.sql.SQLRecoverableException: IO Error: Connection resetoracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:467)oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)java.sql.DriverManager.getConnection(DriverManager.java:664)java.sql.DriverManager.getConnection(DriverManager.java:208)com.service_now.mid.connections.jdbc.JDBCConnection.establishConnection(JDBCConnection.java:102)com.service_now.mid.connections.jdbc.JDBCConnection.connect(JDBCConnection.java:74)com.service_now.mid.connections.jdbc.JDBCConnectionFactory.create(JDBCConnectionFactory.java:65)com.service_now.mid.connections.ConnectionCachePool.getAvailableConnection(ConnectionCachePool.java:82)com.service_now.mid.connections.ConnectionCache.get(ConnectionCache.java:94)com.service_now.mid.probe.JDBCProbe.getJDBCConnection(JDBCProbe.java:769)com.service_now.mid.probe.JDBCProbe.probe(JDBCProbe.java:117)com.service_now.mid.probe.AProbe.process(AProbe.java:96)com.service_now.mid.queue_worker.AWorker.runWorker(AWorker.java:125)com.service_now.mid.queue_worker.AWorkerThread.run(AWorkerThread.java:20)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)java.lang.Thread.run(Thread.java:748) 06/17/19 11:57:03 (149) Worker-Standard:JDBCProbe-fb12d7d6db8e37402cc2105f689619d2 Detect JDBCConnection interrupted. Retry: 1 of 3 06/17/19 11:57:04 (149) Worker-Standard:JDBCProbe-fb12d7d6db8e37402cc2105f689619d2 Waiting for connection semaphore 06/17/19 11:57:04 (149) Worker-Standard:JDBCProbe-fb12d7d6db8e37402cc2105f689619d2 Obtained connection semaphore 06/17/19 11:57:04 (196) Worker-Standard:JDBCProbe-fb12d7d6db8e37402cc2105f689619d2 SEVERE *** ERROR *** java.sql.SQLRecoverableException: IO Error: Connection reset 問題 2: java.sql.SQLException: IO Error: An existing connection was forcibly closed by the remote host. Connection lapse 31 ms. Authentication lapse 0 ms. Releaseこの問題は、Oracle JDBC 接続を使用した London リリースで確認されましたが、Oracle JDBC を使用した他の ServiceNow リリースでも発生する可能性があります。Cause問題 1: この接続リセットエラーは、Oracle サーバーと使用されている JDBC ドライバーの間の非互換性が原因です。 問題 2: MID サーバー経由で Oracle サーバーに接続するために使用される接続 URL に必要なパラメーターがなかったため、接続が強制的に閉じられました。Resolution問題 1: London MID サーバーとともにインストールされた JRE は、ojdbc6.jar ファイルを使用していました。「接続リセット」エラーは ojdbc8.jar で発生しなくなりました。 問題 2: 接続 URL パラメーターを変更するには、データソースレコードに移動し、ヘッダーを右クリックして [設定] > [フォームレイアウト] を選択します。[接続 URL] フィールドをフォームに追加します。接続 URL は「形式」、「データベース名」、および「データベースポートとサーバー」の内容から自動的に作成されますが、このデフォルトの接続 URL は、データベース管理者が必要とする任意の接続文字列で上書きできます。例えば、次のようになります。 jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=myOracle)(PORT=9999))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORADATA))) これは、次のようなデフォルトの接続 URL に代わるものです。 jdbc:oracle:thin:@myOracle:9999:ORADATARelated Linksどの JAR と接続文字列を使うかを決める場合、データベース管理者を巻き込むのが最も有益です。