ORA-12547: TNS:lost contact 오류는 데이터베이스 클라이언트와 서버 간의 통신이 끊겼을 때 발생합니다.
주요 원인은 다음과 같습니다.
1. Oracle 바이너리 파일의 권한 문제
• Oracle 실행 파일 (oracle, sqlplus, listener 등)의 권한이 잘못 설정되어 있을 경우 발생할 수 있습니다.
2. 환경 변수 설정 오류
• ORACLE_HOME, ORACLE_SID 등의 환경 변수가 올바르게 설정되지 않았을 경우 문제가 발생할 수 있습니다.
3. Shared Memory (SHMMAX, SHMALL) 및 Semaphore 설정 오류
• 리눅스 환경에서 공유 메모리 및 세마포어 값이 너무 낮거나 설정이 잘못되었을 경우 Oracle이 정상적으로 실행되지 않습니다.
4. 라이브러리 파일 손상 또는 누락 (libclntsh.so, libnnz11.so 등)
• Oracle 라이브러리 파일이 손상되었거나 누락되었을 경우 발생할 수 있습니다.
5. 리스너 (Listener) 비정상 종료
• lsnrctl status로 리스너 상태를 확인하고 비정상적으로 종료되었으면 재시작해야 합니다.
해결 방법
1. Oracle 바이너리 파일의 권한 문제 해결
• 권한을 확인하고 올바르게 설정합니다.
cd $ORACLE_HOME/bin
chmod 6751 oracle
chown oracle:oinstall oracle
이후 다시 실행해 보세요.2. 환경 변수 설정 확인
• 환경 변수를 다시 설정합니다.
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
설정 후 echo $ORACLE_HOME 등을 실행하여 정상적으로 설정되었는지 확인하세요.3. 공유 메모리 및 세마포어 설정 변경 (Linux)
현재 설정값 확인
cat /proc/sys/kernel/shmmax
cat /proc/sys/kernel/shmall
cat /proc/sys/kernel/sem
설정 변경
echo "kernel.shmmax = 4294967295" >> /etc/sysctl.conf
echo "kernel.shmall = 2097152" >> /etc/sysctl.conf
echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf
sysctl -p
설정 적용 후 서버를 재부팅합니다.4. 라이브러리 파일 확인 및 복구
• 손상된 라이브러리 파일이 없는지 확인하고 복구합니다.
cd $ORACLE_HOME/lib
ls -l libclntsh.so*
만약 라이브러리 파일이 누락되었거나 크기가 0이라면 다시 생성합니다.
cd $ORACLE_HOME/bin
./relink all
이후 다시 실행해 봅니다.5. 리스너 상태 확인 및 재시작
리스너 상태 확인 : lsnrctl status 리스너가 실행 중이 아니라면 시작합니다. lsnrctl start 이후 다시 접속을 시도해 보세요.