ORACLE - DAY 13

BUMSOO·2024년 8월 14일

Oracle Net 서비스

  • oracle net 서비스는 클라이언트 또는 Middle-tier 응용프로그램에서 oracle 서버의 네트워크 연결을 활성화 한다.

Listener

  • 클라이언트들이 연결 요청을 수신하고 서버에 대한 트래픽을 관리하는 서버에 상주하는 프로세스
  • 로컬이 아닌 모든 유저 연결을 위한 oracle instance gateway 입니다.

Listener 정보

  • listener.ora
  • port (포트), 1521(기본값), 1~65535
  • protocol (프로토콜) TCP/IP,
    TCP (데이터를 전송할 때 문제가 있는지 없는지 검증할 때 사용하는 규칙)
    IP (상대방 컴퓨터를 찾아가는 프로토콜)
  • SID (instance 이름)
  • HOST (컴퓨터이름,IP주소)
  • lisntener.ora 주소
    $ORACLE_HOME/network/admin


- host 이름은 /etc/hosts 에 ip주소와 매핑한 이름이다.

LREG

  • 12g 부터 listener에게 데이터베이스 정보를 등록하는 프로세스
  • 11g 까지는 PMON이 listener에게 데이터베이스 정보를 등록했었다.
  • alter system register; : 수동으로 빠르게 listener에게 데이터베이스 정보를 등록하는 명령어

간단한 연결(Easy Connect)

  • 기본적으로 활성화 되어있다.
  • 클라이언트측 구성이 필요없다
  • TCP/IP 만 지원
  • 다음과 같은 고급 연결 옵션은 지원하지 않음
    • connect-time failover
    • 소스 경로 지정
    • 로드 밸런싱
  • easy connect 방법
    <username>/<password>@<hostname>:<port>/<service name>

  • 윈도우 cmd창에서 sqlplus 접속
    C:\Users\itwill>sqlplus insa/oracle@192.168.56.150:1521/ORA19C

  • 윈도우 cmd창에서 sysdba로 접속
    C:\Users\itwill>sqplus sys/oracle@192.168.56.150:1521/ORA19C as sysdba

service name, global database name(db_name, db_domain)

  • SID = instance_name
  • SERVICE_NAMES = db_name.db_domain
    • 여러개의 인스턴스를 묶어 하나의 서비스로 구성하는것. RAC에서 사용한다.

Local Naming(로컬 이름지정) 연결

  • 클라이언트 측 이름 분석(name resolution)파일 필요
  • 모든 oracle net프로토콜 지원
  • 다음과 같은 고급 연결 옵션은 지원
    • connect-time failover
    • 소스 경로 지정
    • 로드 밸런싱
  • 클라이언트 쪽에 tnsnames.ora(이름분석 파일) 구성

client 측 구성

xe 버전 tnsnames.ora 위치
C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ora

  • tnsnames.ora 파일 수정

ORA19C(tns별칭으로 아무거나 해도 상관 없다) =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.150)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORA19C)
)
)

XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-7AH2HG4)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

  • tnsping 확인
    tnsping ORA19C(tns별칭)

  • tns접속
    C:\Users\itwill> sqlplus <username>/<password>@<tns별칭>

동적 서비스 등록(dynamic)

  • 오라클 8i 이상 버전의 instance는 데이터베이스 시작시 자동으로 기본 리스너에 등록된다.
  • 기본 리스너에 추가로 데이터베이스 정보를 구성할 필요가 없다.

  • listener.ora에 등록되어 있는 변수 명을 꼭 LISTENER로 안해도 된다.

  • 하지만 변수명을 기본값 LISTENER가 아니라 L01으로 설정하면 lsnrctl start 할때 리스너가 올라오지 않는 현상이 발생한다. 이는 lsnrctl start에서 뒤에 LISTENER가 기본값으로 들어가 있었기 때문이다. 따라서 L01의 리스너를 실행시킬라면 lsnrctl start l01 으로 명령어를 써야한다.

정적 서비스 등록(static)

  • 리스너에 데이터베이스 정보를 구성해야 한다.

- xe버전 listener.ora에서 복사해왔다.

SID_LIST_L01 =
(SID_LIST =
(SID_DESC =
(SID_NAME = ORA19C)
(ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
(GLOBAL_DBNAME = ORA19C)
)
)
- ORA19C listener.ora에서 복사해왔다.
L01 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle19c)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

- 수정한 SID_LIST_L01 정보를 ORA19C listener.ora에 붙여넣기를 해서 파일 수정 작업을 거쳐야한다. vi 작업

포트번호 변경

  1. listener.ora 파일에서 port 번호 변경

  1. firewall port 번호 수정
  • firewall-cmd --list-all
    특정 포트 번호 방화벽 확인

  • firewall-cmd --add-port=1522/tcp --permanent
    특정 포트로 접속할수 있도록 등록작업
    permanent - 영구히 적용

  • firewall-cmd --reload
    바로 적용이 안되기 때문에 재설정 작업을 수행해야 한다.

  • firewall-cmd --query-port=1522/tcp
    해당 포트가 등록 되어있으면 yes, 없으면 no 출력

  1. sqldeveloper에서 접속 테스트 (easy connect 방식)

  1. tns 방식으로 접속해야 하는 경우 tnsnames.ora 파일도 수정필요

dynamic 서비스 등록의 문제점

  • 포트 번호를 기본번호(1521번호)에서 다른 번호로 변경하고 리스너를 내렸다가 올리면 db 서비스 정보가 등록이 안된다.

  • 동적 서비스 등록을 이용한 기본 리스너의 포트를 수정할때 작업

첫번째 해결방법

show parameter local_listener

local_listener 파라미터 수정

ALTER SYSTEM SET local_listener = '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle19c)(PORT = 1522)))';

- DESCRIPTION 정보는 listener.ora 파일에서 가져온다.

  • ALTER SYSTEM REGISTER;
    - 이후에는 리스너가 정상적으로 서비스 등록을 한다.

두번째 해결방법 (local tnsnames.ora 이용)

local에 저장되어 있는 tnsnames.ora 파일 수정
- 포트번호 변경

local_listener 파라미터 수정
ALTER SYSTEM SET local_listener = 'LISTENER_ORA19C';
- LISTENER_ORA19C는 tnsnames.ora에 설정되어있던 tns 별칭 이름이다

listener 수동 리로더
ALTER SYSTEM REGISTER;

LISTENER_ORA19C

⚠️ 주의할 점으로 local_listener 를 설정할때 tns이름으로 설정하게 될때 tns 이름에 listener의 이름이 안들어가 있는 경우 db 서비스 등록이 안되는 경우가 있다. 따라서 tns 이름에도 listener의 이름을 넣어주는게 좋다. 예) L01_ORA19C


<느낀점>

오늘은 리스너에 대해 배운 수업이었다. 그동안 리스너는 단지 클라이언트를 서버에 붙게 해주는 문지기 정도로만 생각하였는데 오늘 배운 내용에서는 리스너 연결 방법도 2개로 나뉘는걸 알게되었다. 연결 방법에는 easy connect가 있고 local naming 방법이 있었다. easy connect는 기본적으로 활성화 되어 있는 방법이지만, 지원하지 않는 고급 연결 옵션들이 많고 연결 할때도 작성해야하는 명령어가 길어지기 때문에 뒤에서 배운 local naming 방법인 tns 이름을 이용하는게 훨씬 편하게 느껴졌다. tns 방식으로 연결하기 위해서는 클라이언트 쪽에 tnsnames.ora 파일이 반드시 필요한데 이건 xe 버전 소프트웨어를 설치하게 되면 자동으로 생성되기 때문에 이걸 활용하는게 좋다. tnsnames.ora파일안에 연결하고자 하는 서버 정보를 입력해주면 되기 때문에 간단하다고 생각이 들었다. 여기까지는 클라이언트쪽에서 리스너에 연결하고자 할때 사용하는 방법 들이었고, 서버 측에서 리스너에 서비스 등록을 하는 방법도 2가지로 나뉘게 되는데 동적 서비스 등록과 정적 서비스 등록이 있었다. 동적 서비스등록 방식은 기본적인 것만 listener.ora 파일에 입력해주면 LREG 백그라운드 프로세스가 자동으로 리스너에 DB 등록을 해주지만 정적으로 하게 되면 SID_LIST_LISTENER를 더 입력해줘야 해서 불편하다고 느낄 수도 있지만 내가 오늘 실습을 하면서 든 생각은 정적 등록이 더 좋을수도 있겠다고 생각했다. 왜냐하면 동적 서비스 등록으로 하게 될 경우 만약 보안상의 이유로 포트 번호를 변경해야 한다고 하면 local_listener라는 파라미터 까지 같이 변경을 해줘야 한다. 이 local_listener 파라미터에도 등록 방식이 2가지 있는데 하나는 listener에 입력되어있는 description을 입력하는것이고 다른 하나는 local에 있는 tns 파일의 포트 번호를 변경해주고 tns이름을 입력해주면 된다. 하지만 네트워크 상의 문제로 리스너가 바로 DB를 등록 안해주는 경우도 있기 때문에 나라면 정적 등록을 자주 사용할 것 같다.

0개의 댓글