Q&A

  • DB session이 끊겼을 때 자동으로 다시 session을 맺는 좋은 방법 좀 가르쳐 주세요.
DB를 약간 약하게 사용하는 프로그램을 짜고 있습니다...
거의 단순 select, update, insert 사용하는, DB 의 내용을 읽는 비율이 다른 프로그램보다 약한 그런 프로그램요... 근데 문제는 사용자의 손을 거의 타지 않는 즉 서비스로도 변경 가능 해야 한다는 겁니다.
DB 의 경우 MSCS 로 묶여져서 session이 끊어질 가능성이 언제나 있어서 session이 끊어지면 다시 맺어야 합니다.
제가 해본 것들은 아래와 같고, Connection object를 가지고 해보았는 데, 모두 이상한 듯 하니...쩝... 좋은 방법 알고 계시는 분들.. 좀.. 도와주십시오...
ㅡㅡㅋㆀ

환경 :  DB서버-Oracle 8i / Delphi 6 / RTL patch까지 모두 마침..

1. ADO : TADOConnection의 경우 connected = true 가 되고 난 다음에는 전혀 반응이 없습니다. 가령 네트웍이 연결된 상태에서 connected := true 시켜놓고 네트웍을 끊고 난 다음 connected := false; / connected := true; 이렇게 해도 전혀 exception을 발생시키지 않습니다. 따라서 connected = true 상태에서 TADODataSet 등을 이용해서 작업하다가 db-session 이 끊어진 것을 알았을 때, connected := false; / connected := true 로 해놓고 작업해도 전혀 반응 없습니다.  TADOConnection 을 새로 만들어서 사용하는 방법을 이용해 보았으나 네트웍 케이블을 뽑아서 실험해 보니... 새로 connection 을 맺는 것이 딱 2번만 성공하고 3번째는 전혀 반응하지 않더군요... 성공했으면 계속 성공하고 아님 처음부터 성공하지 말아야 할 텐데.. 어떤 경우인지 전혀... 이해가 안됨... ADO의 경우 target이 Win2000 이상이면 따로 배포할 필요도 없이 프로그램 파일만 배포하면 되니까 제가 제일 선호하는 쪽인데.. 전혀.. 도움이 안되는 군요..
2. dbExpress : TSQLConnection의 경우 단지 connected := false / connected := true 의 형식만으로 connection 가능 여부를 exception 을 통해서 알 수 있었읍니다. 그러나... 오라클의 경우... Database만 정확하면 사용자/암호를 전혀 신경 쓰지 않고(암 거나 넣어도 접속됩니다.), connected := true 시에 except 걸고 검사하는 코드를 계속 돌리면... 메모리가 장난 아니게 늘어납니다. Process viewer 로 본 결과... 걍 메모리만 늘어나면 어찌 쓰겠는 데... Heap이 거의 50~100K 씩 늘어나는 군요... dbExperss 역시도 그냥 해당 dll 만 같이 배포하면 되서 좋은 데.. 이 메모리 문제 땜시 전혀 사용 못하고 있는 실정입니다.
3. bde : TDatabase 역시 connected := false; / connected := true; 로 db-connection 검사 및 새로 맺어 주는 게 가능하더군요.. 하지만 역시나 메모리 문제는 있는 듯 합니다... 증가가 없을 때는 없는 데.. 증가분이 있는 경우는 10~20K 씩 힙이 늘어나는 군요... bde의 경우 볼랜드에서도 권고 사항이 아니구... 배포문제도 있고.. 해서 가장 마지막 선택인데... 개인적으로는 bde 쓰기 싫거든요... ㅡㅡㆀ
0  COMMENTS