Oracle 데이터베이스에 JDBC나 SQL Developer로 연결할 때 ORA-12514, TNS:listener does not currently know of service requested in connect descriptor 오류를 만난 적 있으신가요?
이 오류는 주로 JDBC URL이나 TNS 설정에서 잘못된 서비스 이름(service name) 을 사용했을 때 발생합니다.
이 글에서는 ORA-12514 오류의 원인과 가장 빠른 해결 방법을 실제 예제와 함께 설명합니다. Oracle 리스너 설정을 처음 접하는 개발자나 운영자에게도 이해하기 쉽게 안내합니다.
🔍 ORA-12514 오류란?
Oracle에서 ORA-12514 오류는 클라이언트가 요청한 서비스 이름을 리스너가 인식하지 못할 때 발생합니다.
오류 메시지
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
즉, JDBC나 SQL Developer가 Oracle 서버에 접속하려 할 때, URL에 적힌 서비스 이름이 Oracle 리스너에 등록되어 있지 않음을 의미합니다.
🧾 발생 예시
JDBC 연결 예 (Service Name 방식)
jdbc:oracle:thin:@//db.example.com:1521/ORCL
잘못된 경우
- /ORCL ← Oracle 서버에 이 service_name이 등록되어 있지 않음
- 이로 인해 ORA-12514 오류 발생
🛠️ 해결 방법 요약
✅ 1. 리스너가 인식하는 서비스 이름 확인
Oracle 서버에서 다음 명령어 입력
lsnrctl status
출력 예시
Services Summary...
Service "ORCLPDB1" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
- "ORCLPDB1" → Service Name
- "orcl" → SID
✅ 2. SID 확인 방법 (DB 서버에서 직접 확인)
SID는 Oracle 인스턴스를 식별하는 고유 이름입니다. SID를 확인하는 방법은 다음과 같습니다.
▶ SQL*Plus 접속 후 확인
SELECT instance_name FROM v$instance;
▶ 결과 예시
INSTANCE_NAME -------------- ORCL
✅ 3. JDBC URL 수정
수정 전 (오류 발생)
jdbc:oracle:thin:@//db.example.com:1521/ORCL
수정 후 (정상 동작)
jdbc:oracle:thin:@//db.example.com:1521/ORCLPDB1
✅ 4. SID 방식으로 연결하려면?
jdbc:oracle:thin:@db.example.com:1521:ORCL
- : 뒤에 오는 것은 SID
- / 뒤에 오는 것은 Service Name
- 둘은 절대 같지 않을 수도 있으니 주의!
📋 정리 표
구분 | 설명 |
오류 코드 | ORA-12514 |
원인 | JDBC URL의 service_name이 리스너에 없음 |
확인 방법 | lsnrctl status 또는 DBA에게 문의 |
해결 방법 | 올바른 Service Name으로 URL 수정 |
SID 연결 | @host:port:SID 형식 사용 |
Service Name 연결 | @//host:port/service_name 형식 사용 |
📋 에러 해결 체크리스트
- lsnrctl status 로 서비스 이름 확인
- SELECT instance_name FROM v$instance; 로 SID 확인
- URL 형식이 Service Name인지 SID인지 구분
- DB에 맞는 JDBC URL로 수정
- 애플리케이션 재시작
✅ 결론
ORA-12514 오류는 단순한 오타나 잘못된 설정 때문에 자주 발생하지만, 그 원인을 정확히 이해하면 1~2분 만에 해결할 수 있습니다.
Oracle 서버에서 리스너가 실제 인식 중인 서비스 이름을 먼저 확인하고, 그에 맞게 JDBC 또는 TNS 연결 정보를 수정해 보세요.