> 환경 <
윈도우2000프로페셔널
.net 2003
mysql윈도우버전
서버에서 여러대의 클라이언트에 접근하여
mysql안의 정보를 일정 시간동안 수거 및 정산하는
프로그램을 제작 중입니다.
mysql의 연결을 너무 자주 놓치기에 글을
남겨봅니다.
일단 구조는..
메인() {
서버mysql
오픈
1~50까지 DB연결
시도
}
쓰레드 1()
{
일정시간을 간격으로
1-50번까지 연결이 완료된 DB만 데이터를
수거
서버DB에 수거된 데이터를
기록
}
쓰레드 2()
{
주기적으로 데이터를
갱신하여 리스트컨트롤에 뿌려줌
}
버튼 {
서버DB에 쿼리를 날려
데이터의 합산 및 평균을 구함
}
* 프로그램이 종료될때까지
한번 연결한 DB는 끝까지 연결을
유지함
위와 같은 구조로 되어있습니다.
쓰레드 1의 경우 1시간만에 한번씩 연결을
시도하는데 1초의 간격씩을 두고 1~50번까지 수거를
합니다.
쓰레드 2의 경우는 3분만에 한번씩 DB를 검사하여
리스트 컨트롤을 갱신해줍니다.
아무일도 하지 않고 쓰레드만 돌렸을 경우는 연결을
잃는 경우가 좀덜하지만... (그래도 자주 놓칩니다
ㅠ,.ㅠ)
버튼을 눌러 데이터를 정산하면 너무 쉽게 DB연결을
잃어 버립니다. (100%그러는것이 아니라 자주 그럽니다
ㅠ,.ㅠ)
실제 네트웍이라든지 PC연결 상태는 이상이
없습니다.
질문 1)
현재 데이터를 기록하는 도중 DB연결을 놓치면
무조건 재연결을 시도하는 구조를 추가할까 하고
생각중입니다.
재연결을 생각하는것보다는 근본적인 해결이 더
낫다고 생각합니다.
연결을 놓치지 않게하는 좋은 방법이 있으면!
알려주세요!!
질문 2 ) -- 발생하는 에러
Error: 2006
(CR_SERVER_GONE_ERROR
)
Message: MySQL server has
gone away
이 에러가 나타날수 있는 조건이 어떤게 있을
까요?
질문 3) -- 발생하는 에러
Error: 2013
(CR_SERVER_LOST )
Message: Lost connection to
MySQL server during query
이 에러가 나타날수 있는 조건이 어떤게 있을
까요?
질문 4)
DB에 쿼리를 날릴때 mysql_query() 함수를
사용합니다.
이 함수를 사용할때 사용된 변수
MYSQL mysql;
mysql_query(&mysql,szQuery);
에서 MYSQL mysql;을 매번 free 시켜주어야
하는건가요?
free시켜야 한다면 어떻게 할수있는지 궁금합니다.
delete로 소멸시켜버리는 터라.. 쿼리를 날릴때마다
생성해줄순 없잖아요.
장마철 건강 조심하세요
|