Q&A

  • 오라클 select 시 문제!!
쓰레드로 여러개의 폼을 띄어 놓습니다.



그리고 그 여러개의 폼들은 특정 이벤트가 발생할 시에 오라클에서 특정값을 조회해

옵니다.-데이터베이스 컴포넌트 사용했습니다.



몇 달간 아무 이상없이 잘 사용했습니다.(24시간돌아가는 프로그램입니다)



타이머 컴포넌트를 사용하여 쿼리를 오픈하고 7초가 경과했을 경우에는

타임아웃이라는 메세지를 표시하도록 하였습니다.



그런데 언젠가 부터 아침이나 점심시간이 바로 지났을 때-즉 일정시간 이상 이벤트가 없다가 이벤트를 받게될 때-가 되면 타임아웃메세지가 떠있는 상태에서 더이상 진행이

되지 않습니다(길 때는 약 20분정도).

즉 쿼리를 했는데 오라클에서 데이터가 안오는거지요. 오라클에 쿼리를 해서 데이터가 오면 이 메세지는 없어지게 되 있습니다.



왜 이런 현상이 벌어지는 걸까요?



데이터베이스 컴포넌트의 Connect속성을 체크하여 쿼리를 하기전에 연결이

끊어지면 다시 연결을 시킨 후에 쿼리를 날리게 되어 있는데두요.



이럴 경우 프로그램을 종료했다가 재 가동시키면 다시 잘 되구요.



프로그램이 바쁘게 돌아가는 시간에는 이런 문제가 일어나지 않습니다.



즉 프로그램이 db에 1시간 이상 엑세스하지 않다가 쿼리를 날리면 이런 현상이 벌어집니다.-프로그램에서는 보통 저녘 6시 부터 다음날 아침 9시, 그리고 정오부터 오후 1시까지는 db에 쿼리를 날리지 않게 되어있습니다.



쿼리 자체를 테스트 하였을 경우에는 적어도 0.5초안에 데이터가 옵니다.



이러한 현상의 원인에 대해 알고싶습니다.

알고 계시거나 짐작이 가는 점이 있다면 부디 지나치지 말아 주세요.



1  COMMENTS
  • Profile
    hjjung4 2001.11.16 03:49
    hpyoon wrote:

    > 쓰레드로 여러개의 폼을 띄어 놓습니다.

    >

    > 그리고 그 여러개의 폼들은 특정 이벤트가 발생할 시에 오라클에서 특정값을 조회해

    > 옵니다.-데이터베이스 컴포넌트 사용했습니다.

    >

    > 몇 달간 아무 이상없이 잘 사용했습니다.(24시간돌아가는 프로그램입니다)

    >

    > 타이머 컴포넌트를 사용하여 쿼리를 오픈하고 7초가 경과했을 경우에는

    > 타임아웃이라는 메세지를 표시하도록 하였습니다.

    >

    > 그런데 언젠가 부터 아침이나 점심시간이 바로 지났을 때-즉 일정시간 이상 이벤트가 없다가 이벤트를 받게될 때-가 되면 타임아웃메세지가 떠있는 상태에서 더이상 진행이

    > 되지 않습니다(길 때는 약 20분정도).

    > 즉 쿼리를 했는데 오라클에서 데이터가 안오는거지요. 오라클에 쿼리를 해서 데이터가 오면 이 메세지는 없어지게 되 있습니다.

    >

    > 왜 이런 현상이 벌어지는 걸까요?

    >

    ************************************************************

    > ****데이터베이스 컴포넌트의 Connect속성을 체크하여 *******

    ************************************************************



    쿼리를 하기전에 연결이

    > 끊어지면 다시 연결을 시킨 후에 쿼리를 날리게 되어 있는데두요.

    >

    > 이럴 경우 프로그램을 종료했다가 재 가동시키면 다시 잘 되구요.

    >

    > 프로그램이 바쁘게 돌아가는 시간에는 이런 문제가 일어나지 않습니다.

    >

    > 즉 프로그램이 db에 1시간 이상 엑세스하지 않다가 쿼리를 날리면 이런 현상이 벌어집니다.-프로그램에서는 보통 저녘 6시 부터 다음날 아침 9시, 그리고 정오부터 오후 1시까지는 db에 쿼리를 날리지 않게 되어있습니다.

    >

    > 쿼리 자체를 테스트 하였을 경우에는 적어도 0.5초안에 데이터가 옵니다.

    >

    > 이러한 현상의 원인에 대해 알고싶습니다.

    > 알고 계시거나 짐작이 가는 점이 있다면 부디 지나치지 말아 주세요.

    >



    위의 ***** 친 부분에서 먼저 Connected 를 False 로 한다음 True 로 지정하여

    해 보십시요. 다시 말해서 항상 db 작업을 할 때 끊고 다시 연결해서 작업을

    하는 것이지요.



    서버가 죽거나 네트웍 문제가 발생하여도 Connected 는 여전히 True 입니다.

    또 , 위의 경우에 서버에 문제가 생겼는지 알 수 있는 시간은 약 90 초가 걸

    리는 것으로 알고 있습니다. 위에서 약 20 분이라고 말씀하셨는데

    타이머 메세지가 메세지 큐에 쌓여서 생기는 문제 인거 같군요.