◆ 작동 원리

① 사용자PC에서 Oracle Client를 설치하고 User Process역할을 하는 애(토드, 오렌지 등)한테 쿼리를 보낸다.
② User Process는 클라이언트쪽의 tnsnames.ora파일 안에 있는 서버IP를 가지고 해당 서버를 찾아간다.
③ 서버쪽의 listener.ora파일 안에 접속하려는 서버IP가 있으면 리스너가 Server Process를 부른다.
④ 리스너의 부름에 Server Process가 나온다.
⑤ 쿼리를 가져온 User Process는 Server Process에게 쿼리를 수행해달라고 부탁한다. Server Process는 해당 서버에서 작업을 마친 후 그 작업 결과를 User Process에게 준다.
⑥ User Process는 쿼리의 수행 결과를 사용자에게 전달한다.



그 다음에 또 같은 서버에 접속하려고 할 경우에는 리스너를 거치지 않고 바로 User Process와 Server Process가 서로 통신을 한다.
처음 접속할 때는 리스너가 있어야지만 Server Process를 불러올 수 있는데, 기존에 접속되어 있던 것들은 리스너가 없어도 통신이 유지된다.

오라클과 리스너는 별개의 프로그램이다.
오라클이 작동한다고 해서 리스너까지 같이 작동하는 것은 아니다.
오라클이 작동해도 리스너가 꺼져있을 수 있고, 오라클이 꺼져있어도 리스너가 켜져있을 수 있다.

접속문제의 거의 대부분은 리스너 문제이다.
리스너가 꺼져 있더라도 서버만 켜져있으면 핑이 간다.(명령어 ping)
리스너가 살아있는지 확인하려면 tnsping을 던져보면 된다.(명령어 tnsping)

리스너는 누군가 접속을 시도하면 그 기록을 listener.log에 저장해 놓는다.(해당 로그의 위치는 listener.ora파일 안에 적혀있다.)
listener.log파일의 용량이 2G가 넘어가면 죽는다.

ls -h(유닉스는 -k옵션) 명령어를 통해 용량을 수시로 조회한다.
리스너 로그파일의 용량이 크다 싶으면 아래와 같이 조치하면 된다.
$ cat /dev/null > listener.log
절대 리스너 로그파일을 지우고 다시 만든다던지 하면 리스너가 죽어버리므로 위와 같이 리스너 로그파일의 용량을 0으로 만들어 버려야 한다.

Posted by 겨울섬
,