database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ㆍALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
ALTIBASE Q&A 99 게시물 읽기
No. 99
[ODBC 드라이버의 접속이 끊기는듯 한데]
작성자
골빈당
작성일
2007-07-23 16:19
조회수
9,016

AIX에 올린 Altibase 4.0을 사용하며, Windows에서 클라이언트 프로그램을 개발하는 중입니다.

최근데이타만 메모리테이블로 보관됩니다. 매일마다 각기 다른 테이블로  디스크로 옮겨져서 데이터가 보관됩니다.

최근 데이터를 가져오는 부분에서는 문제가 없지만

과거 이력조회로   과거 일주일정도는  제대로 표시가 되는데,  1달정도 데이터를 불러오는 부분에서는

ODBC 드라이버쪽에서 에러가 납니다.

그 위치가 사방에 정신없이 나오네여

ODBC readerAccessViolationException 쪽으로 에러메세지가 나오는데 ,

어쩔땐 넘어가고 대부분 에러가 나옵니다.

해당 에러가 발생한 시점에 ODBC Connection 오브젝트를 살펴보면 세션 상태가 close로 나옵니다. 


아무래도 먼저  ODBC 접속이 끊어지고 이후 발생하는 에러로 보이는데요

이런 문제를 어떻게 해결할 수 있을까요

//////
 아래고 같이 사용합니다.
 tableList 에는  날짜별 조회할 목록이 들어가고, 그것을 각가 조회해서 내부적으로 사용하는 구조체에 밀어넣습니다.
 옵션 안건드리고 그냥 사용하는 형태라 뭔가 조정이 필요한가요?

OdbcConnection conn = new OdbcConnection(source);
            conn.ConnectionTimeout = conn.ConnectionTimeout;
            try
            {
              
                conn.Open();
            }
            catch (OdbcException e)
            {
               System.Diagnostics.Debug.WriteLine(e.Errors.ToString());           
               return;
            }
                OdbcCommand cmd;
            OdbcDataReader reader;


                string tbl;
                for (i = 0; i < tableList.Count; i++)
                {

                    tbl = select.Replace("_DAY", "_" + tableList[i]);
                    cmd = new OdbcCommand(tbl, conn);
                    reader = cmd.ExecuteReader();
                    if (reader.HasRows == true)
                    {
                        while (reader.Read())
                        {
                            if (reader.GetValue(0) == null)
                                continue;

                            dbData.SetItem(Int64.Parse(reader[0].ToString()), reader.GetInt64(1), reader.GetInt64(2));
                        }

                            reader.Close();
                            reader = null;
                      
                       
                    }
                        cmd = new OdbcCommand("commit", conn);
                        cmd.ExecuteNonQuery();
                    }
                
  
            conn.Close();

이 글에 대한 댓글이 총 2건 있습니다.

정확히 어떤에러인지 메시지를 확인해봐야 알거 같네요^^

짐작으로는

ODBC연결후 작은데이터는 문제없이 가져오는데... 많은데이터 또는 오랜시간 걸리는 트랜젝션일경우

세션이 끊어지는 문제 같네요 ^^

다음의 프로퍼티를 확인해보시기 바랍니다.

#=================================================================
# SQL/SESSION TIMEOUT
#=================================================================
QUERY_TIMEOUT  = 600
FETCH_TIMEOUT  = 60
UTRANS_TIMEOUT = 3600
IDLE_TIMEOUT   = 0


위 프로퍼티는 세션 연결에 대한 타임아웃 프로퍼티 입니다. 단위는 초이구요^^

기본값으로 돼어있다면 쿼리실행(join 또는 sorting등)이 10분, 패치시간 1분,  변경연산시간(update, insert, delete)이 한시간 이상 일경우 세션을 DB서버에서 종료시켜버립니다.

타임아웃시간을 늘려서 해보시기 바랍니다.^^

최한열(검은호랑이)님이 2007-08-02 13:46에 작성한 댓글입니다.

ODBC에서는 문제가 생기지만

 같은 코드를 DAO를 통해서 하게되면

 문제가 없읍니다.

 DAO와 ODBC 드라이버의 차이로 보입니다.

 DAO가 훨씬 편하네요

 드라이버 설치과정도 없이 altibase.data.DLL 파일 하나면 되니깐요

 ODBC 드라이버 쪽을 좀 신경쓰셔야 할거 같네요..

 Windows에서 알티베이스 클라이언트 만드시는 분은

 ODBC 드라이버 대신 DOA로 가시는게 나중에 있을지 모르는 문제를 피해가는 

 방법이 될거 같습니다.

골빈당님이 2007-09-08 11:10에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
102[Q]FreeBSD용 알티베이스 드라이버 있으신분.. [3]
골빈당
2007-09-20
8253
101쿼리방식에 대한 질문- 어느게 더 시스템에 덜 무리가? [1]
골빈당
2007-09-08
7167
100Hybird MMDB에 대해서 [2]
mystyle
2007-08-31
9089
99[ODBC 드라이버의 접속이 끊기는듯 한데] [2]
골빈당
2007-07-23
9016
98altibase iloader 사용방법은? [2]
궁금증
2007-07-18
11969
96국내 모회사의 MMDBMS [4]
사용자
2007-04-06
9345
94정말 초보질문 입니다.... ^^ [1]
손현웅
2007-01-23
7292
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2022 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v14.2로 자료를 관리합니다