My Oracle Support Banner

Broken Pipe Error When Making PL/SQL Calls That Include Arrays (Doc ID 2631479.1)

Last updated on OCTOBER 17, 2022

Applies to:

JDBC - Version 18.0.0.0.0 and later
Information in this document applies to any platform.

Symptoms

ENVIRONMENT
============
JDBC Thin driver version 18.3 or 19.3
JDK 11 (OpenJDK)
TLS 1.2

PROBLEM
========
When invoking PL/SQL code that involves arrays, the invocation of those arrays fails with the error "Broken pipe":

Caused by: java.io.IOException: Broken pipe
at java.base/sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:113)
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:79)
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:50)
at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:463)
at oracle.net.nt.TimeoutSocketChannel.write(TimeoutSocketChannel.java:207)
at oracle.net.nt.SSLSocketChannel.writeToSocket(SSLSocketChannel.java:582)
at oracle.net.nt.SSLSocketChannel.flushWriteBuffer(SSLSocketChannel.java:213)
at oracle.net.nt.SSLSocketChannel.wrapAndWriteToSocket(SSLSocketChannel.java:208)
at oracle.net.nt.SSLSocketChannel.write(SSLSocketChannel.java:134)
at oracle.net.ns.NIOPacket.writeToSocketChannel(NIOPacket.java:308)
at oracle.net.ns.NIONSDataChannel.writeDataToSocketChannel(NIONSDataChannel.java:182)
at oracle.net.ns.NIONSDataChannel.writeDataToSocketChannel(NIONSDataChannel.java:133)
at oracle.jdbc.driver.T4CMAREngineNIO.flush(T4CMAREngineNIO.java:741)
at oracle.jdbc.driver.T4CMAREngineNIO.prepareForMarshall(T4CMAREngineNIO.java:792)
at oracle.jdbc.driver.T4CMAREngineNIO.marshalB1Array(T4CMAREngineNIO.java:390)
at oracle.jdbc.driver.DynamicByteArray.marshalB1Array(DynamicByteArray.java:341)
at oracle.jdbc.driver.T4CMAREngine.marshalCLR(T4CMAREngine.java:545)
at oracle.jdbc.driver.T4CTTIrxd.marshalBindDBA(T4CTTIrxd.java:519)
at oracle.jdbc.driver.T4CTTIrxd.marshal(T4CTTIrxd.java:163)
at oracle.jdbc.driver.T4C8Oall.marshalBinds(T4C8Oall.java:2027)
at oracle.jdbc.driver.T4C8Oall.marshal(T4C8Oall.java:1230)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:253)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:610)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:249)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:82)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:924)

 

When listener / server-side SQL*Net tracing is enabled, the error changes:

java.sql.SQLRecoverableException: IO Error: IO Error Received fatal alert: bad_record_mac
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:946)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1136)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3640)
at oracle.jdbc.driver.T4CCallableStatement.executeInternal(T4CCallableStatement.java:1318)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3752)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4242)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1079)


OBSERVATIONS
=============
* When using JDBC 18.3 and JDK 11, this problem consistently reproduces
* When using JDBC 18.3 and JDK 1.8, this problem reproduces only intermittently
* When using JDBC 11.2.0.4 and JDK 11, this problem never reproduces (note here that JDBC 11.2.0.4 doesn't support / isn't certified with JDK 11, but here, it works)
* The problem never reproduces if TLS 1.2 is turned off

* The problem never reproduces when this switch is used:
-Doracle.jdbc.javaNetnio=false

Thus, the problem reproduces consistently only when all 3 of the following pieces are in place:
* JDBC 18.3 -- lower the version to the previously-used version 11.2.0.4, and the problem disappears
* JDK 11 -- lower the version to JDK 1.8, and the problem now reproduces only intermittently
* TLS 1.2 -- take this away, and the problem disappears



Changes

 

Cause

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


In this Document
Symptoms
Changes
Cause
Solution
References


My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.