해당 블로그는 개인의 공부를 목적으로 별도 정리하여 작성된 내용이므로, 잘못된 내용을 포함할 수 있습니다.
혹시나 틀린 내용이 있을 경우, 댓글로 말씀해주시면 계속하여 수정하겠습니다. 감사합니다.
실무를 하면서 업무용 PC에서 DB에 붙어야 하는 경우, 2가지 방식으로 접근이 가능하다.
1. DB 서버에 직접 접속하여 sqlplus 등으로 접속
2. Orange 와 같은 DB 접속, 관리 툴을 이용하여 접속
보통의 경우에는 2번의 방법을 통해 접속한다. 또한 각종 AP 서버(Application, Web, Was 등)에서 DB에 붙기도 한다.
Q) 특정 DB(Oracle)에 붙어있는 애들이 어떤 것들이 있는가?
(해당 DB가 내용연수가 끝나거나, 센터 이전 등의 이유로 IP가 변경되는 등의 상황)
SELECT MACHINE, COUNT (*)
FROM V$SESSION
GROUP BY MACHINE
ORDER BY SESSION_COUNT DESC;
이때, 디비에 접속이 안 되는 경우가 간혹 있는데, 거의 대다수가 방화벽이 뚫려있지 않거나 또는 오라클(DB) 인스턴스/리스너가 올라와있지 않은 경우이다.
이를 확인할 수 있는 여러가지 방법(= 내가 지금 접속하려는 DB는 정상적인 상태인가를 확인하는 방법)들이 있지만, 그 중에 가장 유용하게 썼던 4가지 정도만 기록해두려고 한다.
개인 PC에서 DB Server로 접속하는 경우
- Database Instance(Service) 및 Listener, 네트워크 상태 조회
1. tnsping
tnsping은 방화벽 관련 기능이다. 예를 들어, 특정 업무의 tnsname 등록 내역이 아래와 같을 때를 가정해보자.
(tnsname.ora ~~ , 해당 파일은 일반적으로 ORACLE_HOME/network/admin 에 위치한다.
## 업무 이름 [서비스명] = ( DESCRIPTION = ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = [DB 서버 IP] ) ( PORT = [포트] ) ( CONNECT_DATA = ( SERVICE_NAME = [서비스명] ) ) ) |
업무용 PC가 윈도우 OS 일 때를 가정하자.
cmd 창을 켜서 tnsping [ tns에 등록된 서비스명 또는 IP ] 의 명령어로 해당 서버의 떠있는 서비스로? 인스턴스로 ping을 날려볼 수 있다. (뒤에 10을 붙이면 핑을 10번 보냄 / IP로 확인할 경우 포트까지 명시해야함 - 조금 더 가시적임)
OS에서는 특정 서버로 SFTP, SCP(= 파일 전송 프로토콜, 따로 포스팅) 등을 이용해야하는 경우, 사전에 ping 또는 telnet 등으로 해당 IP와 통신이 되는지 확인한다 (ping, telnet => 아래 2, 3번에서 자세하게 설명)
클라이언트에서 해당 디비 서버로 붙어야하는 경우(Orange 또는 Dbeaver와 같은 툴을 활용)에도 통신을 확인할 수 있는 방법이 존재하는데, 그게 바로 tnsping 이다. tnsping은 오라클에서 제공하는 기능으로, 해당 디비 서버로 ping은 날아가지만 (= 방화벽 네트워크 등은 문제없지만) 디비로 접속이 안 될 때, Listener 또는 Instance(Service)가 정상적으로 올라와있는지 등을 확인할 수 있다. 예를 들어, 리스너가 안 떠있으면 tnsping을 날렸을 때, "no listener" 라는 에러가 나온다.
2. ping
ping(Packet INternet Groper) 명령어는 네트워크 상태를 확인하는 명령어이다. ICMP 프로토콜 응답 확인 도구이며 호스트가 IP 네트워크에 연결 되는지 계속해서 테스트를 시도한다 (ICMP, 인터넷 제어 메시지 프로토콜 - Internet Control Message Protocol, 네트워크 내 장치가 데이터 전송과 관련된 문제를 전달하기 위해 사용하는 프로토콜)
$ ping (IP 또는 도메인주소) |
명령어를 입력하면 위와 같이 멈추게 할때까지 계속 출력이 된다. 주로 네트워크 연결을 테스트하기 위해 사용된다. 목적지 호스트에ICMP 패킷을 전송하고 해당 호스트로부터 응답을 받아와서 네트워크 상태를 확인한다. 일반적으로는 호스트의 도달 가능성과 응답 속도를 확인하는데 사용한다.
3. telnet
$ telnet [hostname or IP address] [port] |
telnet은 원격 호스트에 접속하고 특정 포트를 통해 서비스에 연결하기 위해 사용된다. 보안에 취약점이 많아(평문으로 데이터를 전송함) ssh로 대체되었고, 요즘 회사에서는 그냥 특정 서버 호스트의 특정 포트로 네트워크 통신이 되는지만 빠르게 확인하고 싶을 때 사용하는 듯 하다.
Ping은 주로 네트워크 연결 상태를 확인하고, Telnet은 원격 시스템에 접속하거나 특정 포트로의 연결을 확인하는 데 사용된다. Ping을 사용하면 목표 호스트로의 패킷을 보내고, 해당 호스트로부터 응답이 돌아오는 데 걸리는 시간을 확인할 수 있다. 이를 통해 호스트 간의 연결 여부와 속도를 확인한다. 반면에 Telnet은 특정 호스트와 포트로 연결을 시도하며, 이를 통해 해당 포트에서 동작하는 서비스에 접근하거나, 원격으로 다른 시스템에 로그인하여 명령어를 실행할 수 있다.
4. curl
curl(client url) : 각종 프로토콜들(http, https, ftp, scp, telnet ~)을 이용해 URL로 데이터를 전송해 서버에 데이터를 보내거나 가져올 때 사용하기 위한 명령줄 도구 및 라이브러리이다. 회사에서는 주로 개발하는 사람들이 많이 쓰는 듯하다. 프론트엔드 개발할 때, Javascript 환경에서 REST API(http)를 테스트하고 싶다면 보통 ajax, fetch 를 이용해 요청을 보내보고, 응답을 받아본다. 이 과정을 쉘(커맨드라인) 환경에서 하는 거라고 보면 된다.
- 네이버 웹페이지 가져오기 $ curl http://www.naver.com ( = curl 192.168 ~~ ) - seojiwon 이라고 검색한 결과 가져오기 $ curl "https://search.naver.com/search.naver?query=seojiwon" |
5. netstat
netstat -an | grep 포트번호 (netstat -nap 또는 grep LISTEN) |
netstat 명령어는 네트워크 연결 상태, 라우팅 테이블, 인터페이스 상태 등을 보여주는 명령어이다. 보통 -an 옵션과 함께 사용하는데, 현재 시스템의 모든 네트워크 연결 목록을 표시해준다. 포트번호를 grep으로 잡으면, 특정 포트가 현재 사용중인지 알 수 있다. (-p 옵션은 현재 열려있는 모든 포트를 표시)
Local Address column은 현재 열려있거나 혹은 리스닝하고있는 ip, port를 나타낸다. 만약 해당 ip가 0.0.0.0이라면 all interface를 받는 다는 뜻이며 모든 ip에 대해서 열려있다는 뜻이다. 반대로 127.0.0.1로 되어있다면 loopback이라는 뜻으로 자기자신만 호출가능한 상태를 뜻한다.
예를 들어, 오라클 리스너가 1521 포트에 떠있어야 한다면, netstat 잡아두고 grep 으로 1521 걸어서 해당 포트를 LISTEN 하고 있는 지 확인해보면 된다.
'Linux' 카테고리의 다른 글
SSH 와 SFTP 그리고 SCP (0) | 2024.05.27 |
---|