::: 이슈 배경 :::
Table Migrator을 이용하여, 데이터를 이관중 계속 DB와 연결이 끊김
::: 이슈 확인 :::
오라클 11g에 접속이 안되는 현상이 발생하여 데이터 추출이 불가능 함
이전에는 아주 정상적으로 잘 수행되는 것이 갑자기 해당 에러가 떨어지면서 장애 발생
java.sql.SQLRecoverableException: IO Error: Connection reset
드라이버는 기존 운영시스템에 따라 11g JDBC 드라이버를 사용
::: 원인 분석 :::
11g JDBC 드라이버를 사용시에는 connect string을 암호화하기 위해서 /dev/random을 이용해서 40byte의 난수를 생성한 다음에 connect string을 암호화 한다고 합니다.
그런데 /dev/random은 변동이 적은 시스템에서는 난수 생성이 중단(block)된다는 문제점이 발생한 이력이 있고
/dev/random의 OS level문제 때문에 시스템이 조용하면 /dev/random이용시 난수생성이 원할하지 않아서 /dev/random으로부터 40byte의 난수를 얻지못한 JDBC는 connect string을 암호화하지 못하고 암호화가 되지 않아서 DB접속을 못하는 현상이 발생한다고 합니다.
::: 문제 해결 :::
/dev/random 대신 /dev/urandom을 강제적으로 사용을 하게되면 시스템 noise가 없어도 항상 난수 생성이되어서 JDBC를 이용한 접속에 문제가 발생하지 않음
urandom은 random과는 달리 entropy pool 상황에 상관없이 난수생성이 되므로 JDBC 드라이버 사용시 혹은 WAS 구동시 명시적으로 JAVA 옵션을 부여해서 문제 해결함.
1. Open the $JAVA_HOME/jre/lib/security/java.securityfile in a text editor.
2. Change the line:
securerandom.source=file:/dev/random
to read:
securerandom.source=file:/dev/./urandom
3. Save your change and exit the text editor.
시스템의 noise가 적으면 /dev/random으로부터 난수생성이 잘 되지 않는다는 사실을 처음 알았습니다.
출처
https://steemit.com/kr/@flyyou/java-db-java-sql-sqlrecoverableexception-io-error-connection-reset
[JAVA] DB접속 오류 (java.sql.SQLRecoverableException: IO Error: Connection reset ) — Steemit
안녕하세요 @flyyou입니다. 이전에 제 소개를 보신분들이 계시지만 아마 기억하지 못하실 것인데요 저는 java 개발자입니다. 나이가 먹고나니 PM도 하고 PL도 하고 하지만 아무튼 직업은 개발자인
steemit.com
'Linux > Linux공통' 카테고리의 다른 글
[Linux] xhost 설치 및 사용법 (0) | 2023.06.06 |
---|---|
[Linux] top 명령어로 서버의 상태 파악하기 (0) | 2023.04.04 |
[Linux] Ping, Curl, telnet (0) | 2023.03.13 |
[Linux] Cannot bind socket error(포트 이미 사용 중) 해결법 (0) | 2023.03.09 |
[Linux] 프로세스 강제 종료, 먹통 일 떄 강제 종료하기 (0) | 2023.03.09 |