|
에러 내용으로 보아하니
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는 공통 함수로 처리를 하구요.
:
: 이런 경험있으신분들 조언좀 부탁드립니다.
|