virtualbox 로 가상머신 2대를 만들어 웹과 db서버를 분리하는 과정을 진행했다.
처음에는 둘다 net 설정으로 했다가
웹서버는 net과 host-only 설정
DB서버는 host-only 설정으로 하여
외부에서 DB서버로는 직접 접근이 불가능하도록 계획을 하고 진행하였다.
기본적인 각 서버 세팅은 모두 완료되었다.
웹서버에 php를 깔고 oci와 instant client를 깔고
DB서버에 오라클을 깔고 등등...
자세한 설치는 설치,세팅 카테고리의 [Oracle 19c + CentOS7 사일런트(Silent)] 참고
아무튼 설치는 끝나고 DB서버에서 sqlplus 로 확인해보니 잘 되었다.
개인 pc에서 DB로 붙어서 select 를 해보니 잘 되었다.
외부 pc에서 DB서버로 직접 붙지도 못한다.
아주 잘되는 와중 문제가 생겼다.
웹서버에서 DB로 붙질 못 하는거다.
오류는
ORA-12514: TNS:리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함 이라는 오류가 나왔다.
우선 방화벽을 다 내린상태라 ping 을 날려보니 잘 되었다.
통신 자체는 문제가 없다는 것이다.
일단 리스너가 죽어있는지 확인해보니 문제없이 잘 살아있었다.
$ORACLE_HOME/network/admin/listener.ora 을 확인해보았다.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost )(PORT = 포트번호))
)
)
문제 없어 보였다.
$ORACLE_HOME/network/admin/tnsnames.ora 을 확인해보았다.
# tnsnames.ora Network Configuration File: /aaa/aaadb/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip주소)(PORT = 포트번호))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip주소)(PORT = 포트번호))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL.GLOBAL.COM)
)
)
(listener.ora와 tnsnames.ora 에 ip주소는 localhost와 ip주소가 어차피 동일하게 되어있다)
문제 없었다.
한참 찾아보다가 도저히 안되서 부장님께 해당 이슈를 질문드리니 답이 나왔다.
listener.ora 가 문제였다.
# listener.ora Network Configuration File: /aaa/aaadb/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME =/aaa/aaadb) (SID_NAME = ORCL)))
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost )(PORT = 포트번호))
)
)
SID_LIST_LISTENER 를 안썼던 것이였다.
SID_LIST_LISTENER 없이도 잘 되길래 다른 문제인가 했는데 아니였던 모양이다.
개인 pc에서 db접속이 됐던 이유는 아마도 방화벽이 내려가있고 리스너로 모든 포트가 열려있기에 접속이 가능하지 않았나 싶다.
저것 때문에 반나절이상 날리니 허무하지만 다음부턴 이런실수 하지않길 바라며... 누군가 ora 설정관련해서 정리해둔걸 첨부하며 마무리한다.
결론 :
no listener 가 나오면 그냥 리스너가 없는거니 리스너 확인해보고
ORA-12514: TNS:리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함 오류가 나온다면 listener.ora 와 tnsnames.ora 를 확인해보자
- 오라클 접속 정보 설정(listener.ora, sqlnet.ora, tnsnames.ora)-
♣ listener.ora
- 위치: 서버에서 $ORACLE_HOME/network/admin/listener.ora
- 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신 환경을 설정하는 파일
- 오라클 서버에 존재, 오라클 클라이언트에서 서버로 접속할 때 필요한 프로토콜 및 포트 정보등을 설정하는 파일
- 설정형식
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 호스트ip)(PORT = 포트번호))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = SID_name)
(ORACLE_HOME = 오라클위치)
)
)
. LISTENER : 리스너 이름이며 다른 이름으로 설정 가능. SID_LIST_리스너명 항목에서 리스너명과 동일
. ADDRESS_LIST : ADDRESS들의 모임이며 여러 개의 ADDRESS를 동시에 설정 가능
. ADDRESS : 데이터베이스 서버의 주소이며 프로토콜, 서버명 및 사용포트로 구성된다.
. SID_LIST_LISTENER : 리스너가 서비스하는 데이터베이스 정보를 설정하며 SID_LIST_리스너명으로 설정
. SID_LIST : 해당 리스너 프로세스가 하나 이상의 데이터베이스를 서비스 할 경우에 해당 부분에 여러개의 SID_DESC를 등록한다.
. SID_NAME : 리스너의 접속을 허용하는 데이터베이스의 SID 명을 지정한다.
- 상태 확인 command : lsnrctl status
♣ tnsnames.ora
- 위치: 클라이언트에서 $ORACLE_HOME/network/admin/tnsnames.ora
- 클라이언트에서 오라클 서버로 접속할 때 필요한 프로토콜 및 포트번호, 서버주소, 인스턴스등을 설정해주는 파일
- 설정형식:
LINUXORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 호스트ip)(PORT = 포트번호))
)
(CONNECT_DATA =
(SERVICE_NAME = LINUXORCL)
)
)
. LINUXORCL : 서비스이름
. DESCRIPTION : 접속하고자 하는 대상 데이터베이스 정보
. ADDRESS : 접속하고자 하는 데이터베이스 서버의 리스너를 호출하기 위한 주소정보
. CONNECT_DATA : SERVICE_NAME 옵션을 이용하여 접속할 리스너 프로세스가 사용하는 서비스 이름을 지정하거나 또는 SID옵션을 이용하여 데이터베이스의 SID명을 지정
- 상태 확인 command : insping 서비스 name
'서버' 카테고리의 다른 글
가상서버 웹, DB 서버 분리 (1) | 2024.04.26 |
---|