Amazon RDS Oracle 인스턴스에 연결할 때 "읽은 호출에서 하나 빼기" 오류에 접근하는 방법
Amazon RDS 인스턴스에서 Oracle 11GR2를 실행하고 있습니다.때때로 나는 받는다.IO Error: Got minus one from a read call
에 전화를 걸 때DriverManager.getConnection(getUrl())
왜 그랬는지 모르겠어다른 애플리케이션은 정상적으로 동작.
더 혼란스럽게 하기 위해서, 에러는 때때로 자동적으로 수정됩니다(프로그램의 다음 반복 후에).
"Got - 1 from read call" 오류에 어떻게 접근해야 합니까?
전체 스택 트레이스:
java.sql.SQLRecoverableException: IO Error: Got minus one from a read call
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:243)
at com.cwd.facile.db.Database.<init>(Database.java:44)
at com.cwd.facile.ns.NetSuiteRequestBased.<init>(NetSuiteRequestBased.java:29)
at com.cwd.facile.ns.CommonOperations.isInventoryItem(CommonOperations.java:205)
at com.cwd.facile.ns.CommonOperations.findItemIdByName(CommonOperations.java:188)
at com.cwd.facile.ns.CommonOperations.createSalesOrder(CommonOperations.java:970)
at com.cwd.facile.Main.main(Main.java:47)
Caused by: oracle.net.ns.NetException: Got minus one from a read call
at oracle.net.ns.Packet.receive(Packet.java:311)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:300)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340)
... 12 more
데이터베이스Java 행 44:setConn(DriverManager.getConnection(getUrl()));
기타 정보:
- 잘못된 JDBC URL인 줄 알았는데, 실패하기 전에 며칠 동안 계속 작동하기도 합니다.
- Amazon RDS는 관리 인스턴스이므로 구성을 변경할 수 없습니다.
- 접속에 ojdbc6.jar를 사용하고 있습니다.
문제의 직접적인 원인은 JDBC 드라이버가 "다른 쪽 끝"에 의해 닫힌 네트워크 소켓에서 읽기를 시도했기 때문입니다.
몇 가지 이유가 있을 수 있습니다.
리모트 서버가 IP로부터의 접속을 받아들이지 않도록 설정되어 있는 경우(예를 들면, 「SQLNET.ora」파일).
JDBC URL이 올바르지 않은 경우 데이터베이스가 아닌 다른 항목에 연결을 시도하고 있을 수 있습니다.
데이터베이스 서비스에 열려 있는 연결이 너무 많으면 새 연결이 거부될 수 있습니다.
증상으로 볼 때 "연결 수가 너무 많다"는 시나리오가 가장 유력하다고 생각합니다.즉, 어플리케이션이 접속을 리크하고 있는 것을 나타냅니다.즉, 접속을 확립하고 나서 (항상) 닫지 않습니다.
우리는 같은 문제에 직면해서 그것을 고쳤다.그 이유와 해결책은 다음과 같습니다.
문제
접속 풀 메커니즘이 사용되면 애플리케이션서버(이 경우는 JBOSS)는, 다음의 순서에 따라서 접속을 작성합니다.min-connection
파라미터를 지정합니다.실행 중인 애플리케이션이 10개이고 각각이min-connection
그러면 데이터베이스에 총 100개의 세션이 생성됩니다.또한 모든 데이터베이스에는max-session
파라미터, 총 접속 수가 그 경계를 넘으면Got minus one from a read call
.
참고: 세션의 총 수를 확인하려면 아래 쿼리를 사용하십시오.
SELECT username, count(username) FROM v$session
WHERE username IS NOT NULL group by username
솔루션:델은 DBA의 도움을 받아 이를 향상시켰습니다.max-session
모든 어플리케이션이 파라미터로 동작하도록min-connection
수용할 수 있습니다.
호스트 옵션 "-p 1521:1521"에 대한 퍼블리시 포트가 있음에도 불구하고 도커에서 Oracle 데이터베이스를 사용했을 때 이 오류 메시지가 나타납니다.ip address 127.0.0.1을 사용하는 jdbc url을 사용하고 있었는데 호스트 머신의 실제 ip address로 변경하여 모든 것이 동작했습니다.
Stephen C의 답변에 덧붙이고 싶습니다. 제 사례는 첫 번째 점에 있었습니다.사내에 IP 주소를 할당하는 DHCP가 있기 때문에, DHCP는 물론, 나에게도 Oracle에게도 묻지 않고 머신의 주소를 변경했습니다.그래서 갑자기 신탁은 아무것도 하지 않고 무시무시한 예외를 두었습니다.따라서 TCP 이후 이 문제를 해결하려면 이 문제를 해결해야 합니다.SQLNET.ora 파일의 INVITED_NODS는 여기에 설명된 대로 와일드카드를 사용할 수 없습니다. IP 주소 대신 시스템의 호스트 이름을 추가할 수 있습니다.
도커에서 Oracle 21c XE 이미지를 로컬로 실행했을 때도 비슷한 문제가 있었습니다.localhost
★★★★★★★★★★★★★★★★★」127.0.0.1
.
수정은 하여 「」를 변경하는 이었습니다.sqlnet.ora
하다
echo "DISABLE_OOB=ON" >> /opt/oracle/oradata/dbconfig/XE/sqlnet.ora
컨테이너를 다시 시작합니다.
내 경우 앱에서 설정한 사용자가 DB에 존재하지 않아 동일한 예외가 발생하였고, 사용자를 생성하고 필요한 권한을 부여하여 문제를 해결했습니다.
원인
Oracle 이진 권한 문제($ORACLE_HOME/bin/oracle)
[ tst19c @exa033dbadm01 bin ]$ORACLE_HOME/bin
[ tst19c @exa033dbadm01 bin ]$ ls - ltr oracle
-rwxr-s--x 1 tst19c asmadmin 446528768 5월 3일 14:28 오라클
취한 액션
[ tst19c @exa033dbadm01 bin ]$ chmod 6751 oracle
[ tst19c @exa033dbadm01 bin ]$ ls - ltr oracle
지금이다
-rwsr-s--x 1 tst19c asmadmin 446528768 5월 3일 14:28 오라클
[tst19c@exa033dbadm01 bin]$
언급URL : https://stackoverflow.com/questions/19660336/how-to-approach-a-got-minus-one-from-a-read-call-error-when-connecting-to-an-a
'source' 카테고리의 다른 글
react-native에서 Appregistry.runApplication을 호출하는 동안 오류가 발생했습니다. (0) | 2023.04.04 |
---|---|
Form Group에서 단일 값을 가져오는 방법 (0) | 2023.04.04 |
PHP 루프를 사용하여 요소에 부트스트랩 행 및 적절한 열 번호 추가 (0) | 2023.04.04 |
react js의 서비스 워커가 뭐죠? (0) | 2023.04.04 |
변수에서 각도 "| 필터" 식의 결과 배열을 얻으려면 어떻게 해야 합니까? (0) | 2023.04.04 |