주:

Oracle Connection Manager 설치 및 구성

소개

Oracle CMAN(Connection Manager)은 클라이언트에서 데이터베이스로 연결 요청을 전달하기 위한 proxy 서버 역할을 하는 Oracle 유틸리티입니다. 세션 레벨에서 작동하며 일반적으로 별도의 서버에 설치됩니다.

이미지

CMAN 사용 사례

목표

필요 조건

작업 1: Oracle Connection Manager 설치를 위한 초기 설정

이 자습서에서는 다음 IP 주소를 사용합니다.

열린 방화벽 접속

포트는 1999년 클라이언트 VM에서 CMAN VM으로, CMAN VM에서 1521년 데이터베이스 서버로 열어야 합니다.

작업 2: Oracle Connection Manager 가상 시스템에 Oracle Connection Manager 설치

  1. 설치를 위해 CMAN VM을 준비합니다. 다음 명령을 실행하여 Oracle 사용자를 만들고, 패키지를 설치하고, 커널 매개변수를 변경하는 등의 작업을 수행합니다.

    $sudo su - root
    $yum install oracle-database-preinstall-21c.x86_64
    
  2. mkdir -p $HOME/stage 명령을 실행하여 디렉토리를 만듭니다.

  3. Oracle Database 21c에서 Oracle Client 21.3.0을 다운로드하고, winscp 또는 $HOME/stage 아래의 기타 파일 전송 유틸리티를 사용하여 CMAN VM에 복사합니다.

    SSH를 사용할 수 없는 경우 브라우저에서 Oracle Database 21c 클라이언트 다운로드 페이지를 열고 눌러서 Linux용 LINUX.X64_213000_client.zip 파일을 다운로드합니다. 브라우저를 열고 다운로드에서 파일을 마우스 오른쪽 버튼으로 누르고 다음과 같이 다운로드 링크 복사를 선택합니다.

    AuthParam URL 매개변수는 다운로드 링크를 누를 때마다 달라집니다. Linux 시스템에서 필요한 디렉토리(예: $HOME/stage)로 이동하여 다음 명령을 입력합니다.

    $ wget "https://download.oracle.com/otn/linux/oracle21c/LINUX.X64_213000_client.zip?AuthParam=1631008911_576110421cdef54a2d47d9562bee0e5a" -O LINUX.X64_213000_client.zip
    
  4. Oracle 사용자로 클라이언트 소프트웨어의 압축을 풉니다. client라는 디렉토리가 생성됩니다.

    [oracle@cman stage]$ ls -ltr /home/oracle/stage
    drwxr-xr-x. 5 oracle oinstall         90 Jul 27  2021 client
    -rwxr-xr-x. 1 oracle oinstall 1075931428 Sep  1 10:40 LINUX.X64_213000_client.zip
    
  5. 이제 CMAN 및 SQL*Plus를 설치합니다.

    다음 명령을 실행하여 CMAN을 실행하기 위한 새 Oracle 사용자(oracle), 기본 및 홈 디렉토리를 만듭니다(Linux에서 Oracle 사용자를 설정하기 위해 최신 버전의 Oracle Database 사전 설치 라이브러리 설치).

    $ sudo su - root
    $ yum install oracle-database-preinstall-21c.x86_64
    $ mkdir /u01
    $ chown oracle:oinstall /u01
    $ su - oracle
    $ mkdir -p /u01/app/oracle/product/cman2130
    
  6. CMAN 및 SQL*Plus 설치를 위한 응답 파일을 준비합니다.

    $ cat <<EOF > $HOME/client21.rsp
    oracle.install.responseFileVersion=/oracle/install/rspfmt_clientinstall_response_schema_v21.0.0
    ORACLE_HOSTNAME=$(hostname)
    UNIX_GROUP_NAME=oinstall
    INVENTORY_LOCATION=/u01/app/oraInventory
    SELECTED_LANGUAGES=en
    ORACLE_HOME=/u01/app/oracle/product/cman2130
    ORACLE_BASE=/u01/app/oracle
    oracle.install.client.installType=Custom
    oracle.install.client.customComponents="oracle.sqlplus:21.0.0.0.0","oracle.network.client:21.0.0.0.0","oracle.network.cman:21.0.0.0.0","oracle.network.listener:21.0.0.0.0"
    EOF 
    
  7. CMAN을 설치하려면 다음 명령을 실행하십시오.

    $HOME/stage/client/runInstaller -silent -responseFile $HOME/client21.rsp  ORACLE_HOME_NAME=cman2130
    
  8. root 유저로 설치를 완료합니다. root 유저로 실행하여 설치를 완료합니다.

    $ /u01/app/oraInventory/orainstRoot.sh
    $ /u01/app/oracle/product/cman2130/root.sh
    
  9. .bash_profile 파일($HOME/.bash_profile)에 다음 행을 추가하여 Oracle 유저로 로그인할 때마다 cmctl 및 SQL*Plus 유틸리티에 쉽게 액세스할 수 있도록 합니다.

    export ORACLE_HOME=/u01/app/oracle/product/cman2130
    export LD_LIBRARY_PATH=/u01/app/oracle/product/cman2130/lib
    export PATH=/u01/app/oracle/product/cman2130/bin:$PATH:$HOME
    export TNS_ADMIN=/u01/app/oracle/product/cman2130/network/admin/
    
  10. 다음 명령을 실행하여 SQL*Plus와 CMAN이 모두 실행 중인지 확인합니다.

    [oracle@cman ~]$ sqlplus /nolog
    
    SQL*Plus: Release 21.0.0.0.0 - Production on Wed Sep 11 05:37:26 2024
    Version 21.3.0.0.0
    
    Copyright (c) 1982, 2021, Oracle.  All rights reserved.
    
    SQL> exit
    
    [oracle@cman ~]$ cmctl
    
    CMCTL for Linux: Version 21.0.0.0.0 - Production on 11-SEP-2024 05:37:30
    
    Copyright (c) 1996, 2021, Oracle.  All rights reserved.
    
    Welcome to CMCTL, type "help" for information.
    
    CMCTL>
    

작업 3: Oracle Connection Manager 구성

이 작업에서는 CMAN을 구성합니다. 먼저 CMAN 리스너가 CMAN VM에서 사용해야 하는 포트를 엽니다. 이 예제에서는 포트 1999를 사용하여 1521일 필요는 없으며 반드시 데이터베이스 리스너 포트와 구분해야 한다는 것을 보여줍니다. 루트로:

$firewall-cmd --permanent --add-port=1999/tcp
$firewall-cmd –reload
  1. 일반 CMAN 구성입니다.

    Oracle 사용자로 $TNS_ADMIN 아래에 다음 내용이 포함된 CMAN 구성 파일 cman.ora를 만듭니다.

    주: 호스트 IP 주소를 CMAN VM IP로 변경하십시오!

    $cat $TNS_ADMIN/cman.ora
    
    cman =
    (configuration=
        (address=(protocol=tcp)(host=192.168.0.199)(port=1999))
        (parameter_list =
            (aso_authentication_filter=off)
            (connection_statistics=yes)
            (log_directory=/u01/app/oracle/product/cman2130/network/log)
            (log_level=support)
            (max_connections=256)
            (idle_timeout=0)
            (inbound_connect_timeout=0)
            (session_timeout=0)
            (outbound_connect_timeout=0)
            (max_gateway_processes=16)
            (min_gateway_processes=2)
            (remote_admin=on)
            (trace_directory=/u01/app/oracle/product/cman2130/network/trace)
            (trace_level=support)
            (trace_timestamp=off)
            (trace_filelen=1000)
            (trace_fileno=1)
            (max_cmctl_sessions=4)
            (event_group=init_and_term,memory_ops)
            (registration_invited_nodes = *)
            (service_affinity=off)
        )
            (rule_list=
            (rule=
                (src=*)(dst=*)(srv=*)(act=accept)
                (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on))
            )
        )
        )
    )
    
    VALID_NODE_CHECKING_REGISTRATION_CMAN = OFF
    
  2. 규칙 기반 CMAN 구성입니다.

    뒤로 이동하여 cman.ora 파일에서 규칙을 확인하면 다음과 같은 내용이 표시됩니다.

    (src=*)(dst=*)(srv=*)(act=accept)
    

    따라서 모든 소스, 모든 대상 및 모든 서비스에 대한 연결을 허용합니다. 규칙 목록을 사용하면 특정 클라이언트, 특정 대상 또는 특정 서비스에 대한 연결을 허용하거나 거부하는 고유한 규칙을 정의할 수 있습니다. 예:

    $cat cman.ora
    cman =
    (configuration=
        (address=(protocol=tcp)(host=192.168.0.199)(port=1999))
        (parameter_list =
            (aso_authentication_filter=off)
            (connection_statistics=yes)
            (log_directory=/u01/app/oracle/product/cman2130/network/log)
            (log_level=support)
            (max_connections=256)
            (idle_timeout=0)
            (inbound_connect_timeout=0)
            (session_timeout=0)
            (outbound_connect_timeout=0)
            (max_gateway_processes=16)
            (min_gateway_processes=2)
            (remote_admin=on)
            (trace_directory=/u01/app/oracle/product/cman2130/network/trace)
            (trace_level=support)
            (trace_timestamp=off)
            (trace_filelen=1000)
            (trace_fileno=1)
            (max_cmctl_sessions=4)
            (event_group=init_and_term,memory_ops)
            (registration_invited_nodes = 192.168.0.48)
            (service_affinity=off)
        )
        (rule_list=
            (rule=
                (src=cman)(dst=127.0.0.1)(srv=cmon)(act=accept)
                (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on))
            )
        (rule=
                (src=192.168.0.74)(dst=192.168.0.48)(srv=GGC1_SJ.sub02090543360.vcnsj.oraclevcn.com)(act=accept)
                (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on))
        )
    (rule=
                (src=192.168.0.75)(dst=192.168.0.48)(srv=GGC1_SJ.sub02090543360.vcnsj.oraclevcn.com)(act=Reject)
                (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on))
        )
    
        )
    )
    
    VALID_NODE_CHECKING_REGISTRATION_CMAN = OFF
    

    CMAN은 강력한 도구입니다. 이것은 단순한 샘플 구성일 뿐입니다. 특히 보안과 관련된 자세한 구성 세부 정보는 Oracle 설명서를 참조하십시오.

작업 4: Oracle Connection Manager Services 시작

전자 지갑을 사용하여 소스 및 대상 컨테이너 데이터베이스에 연결하고 Oracle Data Guard 명령행 인터페이스(DGMGRL)를 사용하여 구성을 생성합니다. 이는 일반적인 Oracle Data Guard 구성과 동일합니다. 유일한 차이점은 두 컨테이너 데이터베이스가 모두 기본 데이터베이스이기 때문에 두 컨테이너 데이터베이스에 대해 이 작업을 수행해야 한다는 것입니다.

cmctl

CMCTL for Linux: Version 21.0.0.0.0 - Production on 04-SEP-2024 08:59:37

Copyright (c) 1996, 2021, Oracle.  All rights reserved.

Welcome to CMCTL, type "help" for information.

CMCTL> admin cman
Current instance cman is not yet started
Connections refer to (DESCRIPTION=(address=(protocol=tcp)(host=192.168.0.199)(port=1999))).
The command completed successfully.

CMCTL:cman> startup
Starting Oracle Connection Manager instance cman. Please wait...
CMAN for Linux: Version 21.0.0.0.0 - Production
Status of the Instance
----------------------
Instance name             cman
Version                   CMAN for Linux: Version 21.0.0.0.0 - Production
Start date                04-SEP-2024 08:59:43
Uptime                    0 days 0 hr. 0 min. 9 sec
Num of gateways started   2
Average Load level        0
Log Level                 SUPPORT
Trace Level               SUPPORT
Instance Config file      /u01/app/oracle/product/cman2130/network/admin/cman.ora
Instance Log directory    /u01/app/oracle/diag/netcman/cman/cman/alert
Instance Trace directory  /u01/app/oracle/diag/netcman/cman/cman/trace
The command completed successfully.

다음 명령을 실행하여 상태 및 서비스를 확인합니다.

CMCTL:cman> show status
CMCTL:cman> show services

작업 5: Oracle Connection Manager를 통해 데이터베이스 연결

접근 방법 1: 대상 데이터베이스 매개변수 사용

CMAN이 들어오는 연결을 데이터베이스로 전달하려면 CMAN이 이러한 데이터베이스를 알고 있어야 합니다. 이를 위해서는 대상 데이터베이스에 REMOTE_LISTENER를 설정해야 합니다. 또한 성공적으로 등록하려면 cman.ora 파일에서 VALID_NODE_CHECKING_REGISTRATION_CMAN = OFF를 설정합니다.

대상 데이터베이스:

alter system set REMOTE_LISTENER='10.0.0.8:1999' scope=both sid='*';
alter system register;

cman.ora 파일에 다음 라인을 추가합니다.

VALID_NODE_CHECKING_REGISTRATION_CMAN = OFF

다음 명령을 실행하여 CMAN을 다시 시작하고 데이터베이스가 CMAN 리스너에 등록되어 있는지 확인합니다.

CMCTL:cman> show services

접속 검증:

CMAN IP 및 포트를 사용하여 클라이언트 VM에서 데이터베이스에 연결합니다. 클라이언트 VM의 tnsnames.ora 파일에 새 TNS 별칭을 만듭니다.

GGC1_CM=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=tcp)
      (HOST=192.168.0.199)(PORT=1999)) -- CMAN IP and Port
    (CONNECT_DATA=
      (SERVICE_NAME=GGC1_SJ.sub0209xxxx0543360.vcnsj.oraclevcn.com)))  

위 서비스 이름은 CMAN> show services, 출력에 표시되어야 합니다.

$sqlplus system/MyPasswd__48@GGC1_CM

CMAN 추적 파일을 확인합니다.

/home/oracle/base/diag/netcman/cman/cman/trace/cman.log
/u01/app/oracle/diag/netcman/cman/cman_test/trace/ log.xml

접근 방식 2: Hop 사용

대상 데이터베이스에서 REMOTE_LISTENER 데이터베이스 매개변수를 변경할 수 없는 경우 cman.ora 파일 또는 클라이언트 TNS 파일에서 hop을 사용해야 합니다.

옵션 1: cman.ora 파일에 Hop 추가

$cat cman.ora
cman =
(configuration=
    (address=(protocol=tcp)(host=192.168.0.199)(port=1999))
    (parameter_list =
        (aso_authentication_filter=off)
……
        (service_affinity=off)
    )
    (next_hop=(description=(address=(protocol=tcp)(port=1521)(host=192.168.0.48))))
    (rule_list=
        (rule=
            (src=cman)(dst=127.0.0.1)(srv=cmon)(act=accept)
            (action_list=(aut=off)(moct=0)(mct=0)(mit=0)(conn_stats=on))
        )
    )
)

옵션 2: 클라이언트의 TNS 파일에 Hop 추가

GGC1_SJ_CM =
(DESCRIPTION =
    (SOURCE_ROUTE = YES)
    (ADDRESS =
        (PROTOCOL = TCP)(HOST = 192.168.0.199)(PORT = 1999)
    )
    (ADDRESS =
        (PROTOCOL = TCP)(HOST = 192.168.0.48)(PORT = 1521)
    )
        (CONNECT_DATA = (SERVICE_NAME=GGC1_SJ.sub02090543360.vcnsj.oraclevcn.com)
    )
)

다음 명령을 실행하여 연결을 검증합니다.

$sqlplus system/MyPasswd__48@GGC1_CM

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.