C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[63373] Re:Re: 답변 감사합니다. 우선 해결은 했는데.근본적인 해결책인지 모르겠네요
사루짱 [] 1319 읽음    2010-12-29 11:42
아제님 답변 감사드립니다.
DB커넥션에서 문제가 있었는듯 합니다.
지금 서버에서 DB커넥션을 ADOCN, ADOCN1, ADOCN2
이렇게 세개를 해놓고 있습니다.
그런데 왠만한 쿼리들이 ADOCN 요고 하나만 바라보고 있더라구요..
밑에 소스에 있는 쿼리는 연속적으로 많이 일어나는것 역시 그렇습니다.
DB쪽 관리자에게 물어보니 세션에서 하나만 커서 수가 확 올라가고 다른 두개는 사용을 안한다고 해서
ADOCN2 이쪽 으로 쿼리를 날리니 이상없이 이미지가 들어오드라구요.
우선 이런식으로 해결을 했는데.

궁금한게 있는데 TADOQuery 콤포넌트가 DB에 접속 할때 어느정도의 한계가 있는건가요??
ADORS           = new TADOQuery(Application);
ADORS->Connection = ADOCN;
ADORS1           = new TADOQuery(Application);
ADORS1->Connection = ADOCN;                      
.

요렇게 커넥션을 넘겨 받는 콤포넌트가 많습니다.
대부분 ADOCN <- 요넘을 보고 있었구요.
아제나님이 말씀하시는 동시 접속자 수가 이런것을 말하는건가요??

아제나 님이 쓰신 글 :
: 에러 내용으로 보아하니
:
: DB 연결을 지속적으로 이용하시는거 같은데,
:
: 오라클 관리자툴로 들어가셔서 동시 접속자 수를 늘리시던가
:
: 이미지 전송이 끝나면 DB와 접속을 끊는 명시적인 코드를 삽입하시면 될 것 같습니다.
:
:
:
:
: 사루짱 님이 쓰신 글 :
: : 우선 상황은 이렇습니다.
: : C빌더6.0 으로 작성하고 있습니다.
: : 장비 120대 정도를 제어해야하는 서버 환경입니다.
: : 장비쪽에서 커넥을 하면 상태정보를 주고 받고
: : 서버는 연결된 장비에 최종으로 전송한 이미지를 다시 전송하게 됩니다.
: :
: : 문제는
: : 120대의 장비가 서버로 커넥을 할 경우 처음 60대 정도는 DB에서 이미지를 읽어와 전송이 제대로 됩니다.
: : 그런데 60번째로 접속하는 장비에 이미지를 전송하려고
: : DB에서 이미지를 읽어 들이는 쿼리
: :       sSQL  = "SELECT LIB_IMG FROM LIB_IMAGE WHERE LIB_NO = '3'";
: :       OpenQuery(ADORSInc, sSQL);
: : 이런 단순 쿼리 인데도 쿼리 에러가 나버립니다.
: : 처음 접속된 60대의 장비는 이 쿼리가 문제 없이 실행됩니다.
: :
: : 쿼리 오픈시 혹시나 해서 에러 메세지를 찍어보니
: : ORA-00604 : 순환  SQL 레벨 1 에 오류가 발생했습니다.
: : ORA-01000 : 최대 열기 커서 수를 초과했습니다.
: : 이런 오라클 에러가 뜹니다.
: : 밑에 쿼리 오픈 함수입니다.
: : (catch 문에 걸려 -1을 리턴에서 정확한 패킷이 만들어지지 않는 상황)
: :
: : int OpenQuery(TADOQuery* ADORS, AnsiString strsql)
: : {
: :     int iCnt;
: :
: :     CoInitialize(NULL);
: :
: :     try {
: :
: :         ADORS->SQL->Clear();
: :             ADORS->Close();
: :         ADORS->SQL->Add(strsql);
: :         ADORS->Open();
: :
: :     } catch (Exception &e) {
: :         //ShowMessage("OpenQuery() : " + e.Message);
: :         ADORS->Close();
: :         ::CoUninitialize();
: :
: :         return -1;
: :     }
: :
: :     iCnt = ADORS->RecordCount;
: :
: :     ::CoUninitialize();
: :
: :     return iCnt;
: : }
: :
: : 그리고 이건 찾다가 혹시나 해서 같이 씁니다.
: : 지금 장비 120대에 대한 객체 생성을
: : while(!ADORS->Eof)
: : {
: :     m_pList[index] = new CObject(this);
: :     index++;
: : }
: : 이렇게 120대 장비에대한 객체를 생성하구요.
: : CObject 클래스에서 위에 내용인 패킷 생성 및 이미지 전송, 리시브을 처리 하고 있습니다.
: : 소켓은  TServerSocket을 쓰고있습니다.  <- (통신부가 쓰레드로 처리가 안되어 있습니다. 이 부분도 문제인가요?)
: : OpenQuery는 공통 함수로 처리를 하구요.
: :
: : 이런 경험있으신분들 조언좀 부탁드립니다.

+ -

관련 글 리스트
63369 DB SELECT시 에러가 나는데 조언 좀 부탁드립니다. 사루짱 1666 2010/12/29
63372     Re:DB SELECT시 에러가 나는데 조언 좀 부탁드립니다. 아제나 1965 2010/12/29
63373         Re:Re: 답변 감사합니다. 우선 해결은 했는데.근본적인 해결책인지 모르겠네요 사루짱 1319 2010/12/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.