Contents

Oracle 18C_network_connect

오라클 18C_외부DB 접근(네트워크 연동) 방법

오라클 18 버전의 외부 DB 접근(네트워크 연동) 방법에 대하여 정리합니다.

제가 네트워크 연동을 기획하면서 두 가지 관점으로 생각했습니다.
첫째, DB를 가진 host가 있을 것이고
둘째, DB에 연결할 guest가 있을 것이다.

그렇다면, host가 guest의 IP를 등록해놓으면 guest가 접근하면 DB가 연결되는 걸까?
guest가 host의 IP를 입력해 DB를 연결하는 걸까?

아래 내용은 위의 두 가지를 다 진행하여 연결하였습니다.

👀주의

각 단계 단계들이 필수적인 사항인지는 파악되지 않았습니다.
다만, 저는 해당 방법으로 진행했더니 연결이 되었기에 그 내용을 정리하였습니다.

🧔 우선 host가 할 일.

  1. tnsnames.ora

    1. tnsnames.ora를 찾아야 합니다.
      (저는 C:\app\UESR\product\18.0.0\dbhomeXE\network\admin에 위치했으나, 이는 다른 블로그에 내용을 참고해 직접 찾은 것이고 상황에 따라 다를 수 있습니다.)

      파일을 찾았다면 내용을 수정합니다.

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      
      # tnsnames.ora Network Configuration File: 
      # C:\app\kjong\product\18.0.0\dbhomeXE\NETWORK\ADMIN\tnsnames.ora
      
      # Generated by Oracle configuration tools.
      
      XE =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-HKDL12K)(PORT = 1521))
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = XE)
          )
        )
      
      
      LISTENER_XE =
        (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-HKDL12K)(PORT = 1521))
      
      
      ORACLR_CONNECTION_DATA =
        (DESCRIPTION =
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
          )
          (CONNECT_DATA =
            (SID = CLRExtProc)
            (PRESENTATION = RO)
          )
        )
      
      
      ########################여기 아래가 추가된 내용########################
      my_DataBase =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = guest_IP)(PORT = 1521))
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = XE)
          )
        )
      
      
      ## 3가지 요소에 대하여 알아봅시다. 
      # 1. Database Name = (my_DataBase, host가 설정한 공유할 DB의 이름입니다. 아무렇게나 해도 됨.)
      # 2. HOST = (guest_IP, host DB에 접근할 guest의 IP주소를 입력합니다. 아래에 확인방법 있음)
      # 3. SERVICE_NAME = (XE, 처음 오라클을 설치할 때 설정하게 됩니다. 아래에 확인방법 있음)
      
      • IP 확인 방법

        1. cmd(명령 프롬프트)를 연다.

        2. ipconfig 입력 후 enter

        3. 출력된 항목 중 IPv4 주소 값 == IP

          /images/oracle_DB_network_00.png

      • SERVICE_NAME 확인 방법

        1. oracle을 설치하면서 같이 설치되는 SQL Plus 실행

        2. sys as sysdba 입력 (이어서 비밀번호를 입력해야 하는데 전 그냥 enter하니 넘어감)

        3. SQL> 가 생기면 select name from v$database; 입력

        4. NAME 아래에 SERVICE_NAME 확인 가능

          /images/oracle_DB_network_01.png

  2. tnsnames.ora가 있는 폴더 안에 있는 listener.ora파일과 관련있는 Listener를 재시작한다.

    오라클 리스너는 네트워크를 이용하여 클라이언트에서 오라클 서버로 연결하기 위한 오라클 네트워크 관리자 입니다. 네트워크를 통한 연결은 모두 리스너가 담당하며 리스너와 연결되기 위해서는 클라이언트에 오라클 NET8(오라클 클라이언트)이 설치되어 있고 이를 통해 오라클 서비스명이라는 것을 만들어 접속을 해야 합니다.

    오라클 서버에서 리스너를 시작시켜줘야 클라이언트들이 접속을 할 수 있습니다. (한 번 켜주니 재실행할 필요 없이 계속 접속 가능했음.)

    1. cmd(명령 프롬프트)를 관리자 권한으로 실행한다.

    2. lsnrctl stop 입력 (상태 끄기)

    3. lsnrctl start 입력 (상태 시작)

      /images/oracle_DB_network_02.png

🙋‍♂️이제는 guest에서 진행

  1. SQL Developer 접속 후 초록색 ➕ 클릭

    /images/oracle_DB_network_03.png
  2. 채워야 할 값들 정리

    • Name : host의 DB를 guest가 사용할 건데 이름 설정 (아무렇게나 설정 해도 ok)

    • 사용자 이름(U) : host가 DB를 만들면서 등록한 ID

    • 비밀번호(P) : host가 DB를 만들면서 등록한 PW

    • 호스트 이름(A) : host의 IP를 기재

    • 포트(R) : 전 따로 손대지 않았어서 defualt값인 1521 기재. (아마 아까 tnsnames.ora의 추가한 내용 중 (ADDRESS = (PROTOCOL = TCP)(HOST = guest_IP)(PORT = 1521))여기 PORT 값일 듯.)

    • SID(I) : host PC에서 확인 할 수 있습니다.

      1. SQL Plus 실행

      2. /as sysdba 입력

      3. SQL> 가 생기면 select name from v$thread; 입력

      4. INSTANCE 아래에서 확인 가능

        /images/oracle_DB_network_04.png

        Service Name : 서버관련, 클라이언트에서 사용하고자 하는 DB SID : 오라클 DB가 설치되어있는 곳에서 생성한 DB명

        네트워크를 연결하는 경우 host가 생성한 DB의 고유한 값과 guest가 불러온 DB의 구분을 위해 존재하는 것 같습니다.

👍이상 연결이 완료되고 host가 생성한 DB를 guest PC에서 확인할 수 있었습니다.

찾아보면 더 간편한 방법이 있을 수 있습니다. 정리한 방법은 다양한 정답 중 하나 정도로만 생각하고 참고하시면 좋을 것 같습니다.