에러 메시지는 다음과 같다.
12542, 00000, "TNS:address already in use"
*Cause: Specified listener address is already being used.
*Action: Start your listener with a unique address.
부가적으로 TNS-12560, 512 error 가 동반된다.
12560, 00000, "TNS:protocol adapter error"
*Cause: A generic protocol adapter error occurred.
*Action: Check addresses used for proper protocol specification. Before
reporting this error, look at the error stack and check for lower level
transport errors.For further details, turn on tracing and reexecute the
operation. Turn off tracing when the operation is complete.
00512, 00000, "Address already in use"
*Cause: Specified listener address is already being used.
*Action: Start your listener with an unused address.
혹은
% lsnrctl start
LSNRCTL for SVR4: Version 2.0.15.0.0 - Production on 26-SEP-94 11:10:11
Copyright (c) Oracle Corporation 1993. All rights reserved.
Starting /solar/7016/bin/tnslsnr: please wait...
과 같은 상태에서 Hang 이 걸리기도 한다.
조치 방법
=========
1. 이미 Listener 가 기동되어 있는지 확인한다.
$ ps -ef | grep tnslsnr
또는
$ lsnrctl status
로 확인
기동이 되어 있다면 lsnrctl Utility 로 종료시킨다.
$ lsnrctl stop
이때 정상적으로 종료가 되지 않는다면 kill 명령을 이용하여 Process 를 제거한다.
$ ps -aef | grep tnslsnr
다음과 같이 나타나다고 하면,
oracle 9798 1 80 11:08:18 ?
0:03 /solar/7016/bin/tnslsnr LISTENER
oracle 9823 8531 5 11:11:37 pts/24
0:00 grep tnslsnr
% kill -9 9798
2. /etc/services 파일을 열어 listener 가 사용하는 Port 와 중복되게 지정된 항목이 있는지 확인한다.
3. Listener.ora 파일에 다음 파라미터가 설정되어 있는지 확인하기 바란다.
USE_CKPFILE_LISTENER = TRUE
위에서 listener.ora 의 Port 를 1522 로 변경했다 하더라도 위의 파라미터가 지정되어 있다면 전혀 문제가 해결되지 않는다.
USE_CKPFILE_LISTENER = FALSE
로 변경한다. 위 파라미터로 생성된 Checkpoint 파일도 삭제한다.
$ cd $ORACLE_HOME/network/admin
$ mv listener.ckp
========================
* USE_CKPFILE_LISTENER *
========================
SQL*NET 2.3.X 버전에서 적용되는 파라미터이다.
이 파라미터는 Checkpoint 를 발생하도록 한다. 디폴트는 FALSE 이다.
TRUE 로 셋팅을 하면 마지막으로 Listener를 stop 했을때의 listener.ora
파일의 내용을 listener.ckp 파일에 그대로 paste 한다.
Listener 기동시 listener.ckp 파일과 listener.ora 파일을 비교하여
변경사항이 있으면 변경된 내용이 적용되어 기동되지 않는다.
4. Listener 를 재기동한다.
$ lsnrctl start
# TNS- 12542 에러의 메시지만을 보면 TNS:address already in use 로 나와 Server ip address 가 충돌이 나는 것으로 볼 수 있지만 ip address 가 충돌이 난다면 Booting 시 이미 문제가 발생한다.
이것은 대부분 listener 의 Port 를 다른 프로세스나 OS 에서 이미 할당받아 사용하는 것으로 볼 수 있다. Listener 의 Port 를 변경하면 해결된다.
Listener 의 Port 를 변경할 수 없는 상황이라면 System Rebooting 을 하는 것도 한가지 방법이 될 수 있다.
System Rebooting 후에도 계속해서 발생한다면 다른 프로세스가 listener의 Port 를 분명히 사용하고 있는 것이다. System 엔지니어와 상담하여 어느 프로세스인지 확인이 필요하다.