로그수집을 위한 SQL문을 만드려고하는데, 너무나 막막해서 질문드립니다. 0 5 2,275

by 정진우 [SQL Query] 로그수집 [2014.01.09 18:38:21]


안녕하세요, ORACLE은 너무나도 초보인 정진우라고합니다.

지금 로그수집관련 개발을 하고있는데요. (실제 쓰이는것은 아니고 혼자 개발 하고 있습니다.)

ORACLE에 대한 공부는 많이는 하지 못하였습니다. ㅠ

ORACLE DB를 대상으로 개발을 하려는데,

쿼리 구현이 너무나 막혀서 이렇게 질문을 올립니다.

테이블은 총 3개의 테이블을 조회할 것이고, 이미 이전에 session 값과 url이 존재하는지 확인후 데이터를 insert 하려고합니다.

여기서 질문은 select를 통해 데이터여부를 확인 후, 데이터를 insert 할때 생성되는

시퀀스값을 바로 받을 수 있는 방법이 없나 해서입니다.

select session_id from visitor where session_id = %in_session_id; 로 조회하였는데 존재하지 않으면!

insert into visitor(idx, session_id)
values(seq_idx.NEXTVAL, session_id) 이러한 형식으로 삽입을 하려고 했는데.

이론상으로는 insert문을 성공한 후에, seq_idx.CURRVAL 을 하면 될 것 같지만,

용도가 로그 수집인 만큼, 페이지뷰가 일어나거나, 새로운 사용자가 접속이 이루어졌을때,

동시다발적으로 액션이 발생하면 seq 의 값이 틀려지지는 않을까 ? 해서요.

뭔가 좋은 방법이 없을까요 ?

아니면, 저렇게 구현하더라도 제가 염려하고 있는 상황은 발생하지 않을려나요 ..??
by 우리집아찌 [2014.01.09 19:52:58]

시퀀스.CURRVAL는  세션에 따라 종속됩니다.

다른세션에서 실행하면 null 이 나옵니다.

by 마농 [2014.01.10 08:10:59]
문제 없습니다.
currval 은 nextval 한 바로 그 값을 반환합니다.
다르게 말하면 nextval 없이 currval 을 하면 에러 납니다. 널이 나오는건 아니죠.

by 정진우 [2014.01.13 09:49:55]
두분다 답변 감사드립니다 :)

by sspkos [2014.01.10 11:41:42]
저는 로그 수집에 있어서 좀 다르게 고려해야 되지 않나 생각됩니다.
사용한 기능에 대한정보 및 id, ip,프로그램기능명, method,응답시간,수행횟수..... 여러가지 일텐데
 시퀀스를 사용한다는 것은 누군가가 혹은 어떤기능마다 call해야 하는 문제가
있지 않나요?
........
저의 견해로는 시퀀스를 사용하시는것보다

자바프로그램에서 UUID(Universally Unique ID) 를 생성하여 운영하시는것이 더 효과적이지 않나 생각됩니다.

자바프로그램으로 구현으로 가정하면
 WEB-INF/servlet.xml 파일에 interceptors 를 설정하고
수집하고자 하는 정보를 추출하여 데이타베이스에 insert하는 프로그램하나면 될거 같구요
테이블은 uuid를 key로 하여 하나만 만들어도 가능하리라 생각됩니다.


자바프로그램의 response,request를 활용하면 쉽게 log를 생성하실 수가 있습니다.
HandlerInterceptorAdapter 를 참고하시면
preHandle,postHandle,afterCompletion 에 대한 정보들을 쉽게 찾으실수 있을겁니다.
이렇게 처리하면 원하시는 정보를 얻으실수 있으며
이후 데이타베이스에 수집된 정보를 쿼리를 잘 만드시면 되리라 생각됩니다.
수고하세요^^



by 정진우 [2014.01.13 09:49:41]
감사합니다 !

UUID 는 어떠한 방식인지 모르겠지만, 사용자 구분을 위해서

사용자 관련 세센키와, PC의 고유키 등을 고려해 따로 인덱스를 주려고도 하고있습니다.

또한 URL의 접근의 경우 같은 URL의 긴자료형이 중복으로 저장되지 않게하기위해서

URL전용 TABLE을 생성해서 해당 부분에 URL정보만을 따로 누적하려고도 하고있습니다.



제가 생각해놓은 방식으로도 구현해보고,

말씀해주신 방법으로도 쌍방으로 구현해보겠습니다. :)


댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입