오라클 listener 등록 및 DBeaver tool로 접속하기

 

먼저 DBEAVER로 오라클에 접속하려면 오라클 클라이언트를 설치해야한다.

 

각 오라클 버전에 맞는 클라이언트 설치

 

압축파일 해제시 아래와 같이 설치파일들이 풀리는데 

setup.exe로 설치해주자.

 

 

 

 

설치 완료 이후엔 아래와 같이 network를 제외한 폴더 및 jar들이 풀린다.

network/admin/ 폴더 추가뒤 tnsnames.ora 를 만들어준다.

 

 

 

(client) tnsnames.ora

PRACCT01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = VM서버의 아이피)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PRACCT01)
    )
  )

 

 

여기까지 설정이 끝났다면 우선적으로 DB 내에서도 listner.ora와 tnsnames.ora를 설정해주자

 

(vm) listener.ora


ADR_BASE_LISTENER_PRACCT01 = /home/oracle/base

LISTENER_PRACCT01 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PRACCT01)
      (ORACLE_HOME = /home/oracle/base/product/11.2.0/dbhome_1)
    )
  )

--여기서 0.0.0.0은 모든 ip 허용을 뜻한다. 본인 pc만 허용할거라면 pc ip를 입력해주면 된다.

 

 

(vm) tnsnames.ora


PRACCT01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = VM서버의 아이피 )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PRACCT01)
    )
  )

vm 서버내의 tnsname은 안해줘도 되지만 리스너를 통한 접속을 테스트해보기 위해서 설정해줬다

 

1. vm에서 listener 상태 확인

 

lsnerctl status 리스너이름 (본인은 추후 멀티인스턴스 환경 구성을 목적으로 리스너 name을 분리했다)

 

만약에 아래와 같이 Service has instance가 아닌 

listener supports no services 와 같이 나온다면 현재 instance가 리스너에 등록되어있지 않다는 뜻이다

 

 

이때는 수동으로 등록을 해주어야하는데, 초기 설치간 리스너먼저 설정하고 db 등록할경우 이럴 수 있다고 한다.

 

sqlplus 접속

 

sqlplus / as sysdba


SQL> SHOW PARAMETER local_listener;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string


VALUE가 비어있다면 DB 연결이 안되었다는것.



SQL> ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=VM아이피)(PORT=1521))' SCOPE=BOTH;

System altered.

SQL> ALTER SYSTEM REGISTER;

System altered.

 

로컬 리스너의 아이피를 파라미터에 등록해주고 system register 해주면 등록 완료

 

등록이 되어있지 않다면 당연히 리스너를 통한 접속은 불가하다

orac-12514 발생

 

 

VM 내에서 @ 를 통하여 리스너 접속이 되었다면 리스너와 DB의 문제는 이제 없다.

 

그럼에도 tool로의 접속이 안된다면

1.먼저 해당 포트가 열려있는지 확인

[root@localhost ~]# netstat -tlnp | grep 1521
tcp        0      0 :::1521                     :::*                        LISTEN      47225/tnslsnr

(하지만 방금 tns를 통한 vm에서 접속을 확인했으므로 리스너 포트의 문제는 아니다)

 

2.방화벽 확인

centos6의 경우 firewalld가 아닌 iptables 로 방화벽 설정을 해주어야한다.

 

a) 현재 방화벽 정책 확인

[root@localhost ~]# sudo service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22  <- 22를 제외한 나머지는 전부 reject 
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination


b) iptable tcp 4번에 해당되는 정책에 1521 포트 신규 허용 

[root@localhost ~]# sudo iptables -I INPUT 4 -p tcp --dport 1521 -j ACCEPT


c) 1521 만 확인

[root@localhost ~]# sudo iptables -L -n | grep 1521
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:1521


d) 변경한 uptables save

[root@localhost ~]# sudo service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@localhost ~]# sudo service iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:
                                                           [  OK  ]

e) 최종 확인
[root@localhost ~]#  service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:1521  <<4번자리에 모든ip 1521의 방화벽 허용됨.
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

 

여기까지 한다면 CentOS6에서도 외부 PC에서 tool을 활용한 접속에 문제가 없을것이다.

 

추가 안되는 부분이 있으면 댓글 적어주세요

 

반응형