1. 애플리케이션 서버에서 클라이언트가 데이터베이스에 접속 요청을 한다.
데이터베이스 서버의 주소, 포트, 서비스 이름 등 연결 정보가 포함
되어 있다.2. TNS 파일에서 정의된 정보에 따라, 클라이언트는 오라클 리스너(Listener) 가 설치된 데이터베이스 서버의 IP 주소와 포트 번호를 사용해 리스너에 접속을 시도한다.
tnsnames.ora 경로
$ORACLE_HOME/network/admin/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = mydbserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
mydbserver
라는 호스트의 1521 포트로 연결할 수 있도록 설정된 정보를 나타낸다.3. 데이터베이스 서버의 리스너는 클라이언트로부터 받은 접속 요청을 수신한다.
리스너는 자신이 리스너 설정 파일에서 확인한 정보와 매칭되는 요청이 오면, 클라이언트와 데이터베이스 간의 연결을 시도한다.
listener.ora 파일을 ORACLE_HOME/network/admin
디렉터리에 위치
$ORACLE_HOME/network/admin/listener.ora
파일 예시
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mydbserver)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = ORCL)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
4. 리스너는 연결이 성공하면, 데이터베이스 서버에서 필요한
서버 프로세스를 생성하고, 클라이언트와 데이터베이스 서버 간의 연결을 완료한다.
5. 이제 서브 프로세스는 클라이언트로부터 SQL 명령을 처리하거나, 데이터베이스 작업을 수행할 준비가 된 상태이다.
👉LISTENER =
(👉DESCRIPTION_LIST =
(DESCRIPTION =
(👉ADDRESS = (👉PROTOCOL = TCP)(👉HOST = mydbserver)(👉PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
👉SID_LIST_LISTENER =
(👉SID_LIST =
(👉SID_DESC =
(👉GLOBAL_DBNAME = ORCL)
(👉ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(👉SID_NAME = ORCL)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
클라이언트 측에서는 tnsnames.ora
파일을 참조하여 데이터베이스 서버의 주소와 서비스 정보를 확인하고, 접속 요청을 보낸다.
서버 측에서는, listener.ora
파일을 참조하여 리스너가 클라이언트의 요청을 처리하는 방식을 결정한다.
두 파일간에 설정이 일치하는지 확인하고,
호환되지 않는 설정이 있으면 클라이언트가 데이터베이스에 연결할 수 없으므로, 특히 포트번호, 호스트명, 프로토콜
이 동일한지 확인하는 것이 중요하다.
네트워크 설정
: 클라이언트와 서버 간의 방화벽 설정에 따라 포트가 차단되어 있지 않은지도 확인이 필요하다.
클라이언트가 데이터베이스 서버와 통신할 수 있도록 리스너가 중개 역할을 한다.