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

이후 다시 접속을 시도해 보세요.