* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
Window8 64bit | |
[cubrid_rel] CUBRID 9.2.0.0155 | |
[도움말]-[버전정보] CUBRID 매니저 2014.01 빌드 0377 (64bit) | |
OLEDB ,ADO, VC++ |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
안녕하세요.
cubrid를 사용하여 개발중에 문제가 발생하여 문의드립니다.
1. 사용개요
windows 64bit에서 cubrid를 설치하여 개발중에 있으며,
Visual c++에서 ADO를 통한 OLEDB를 사용하여 테이블에 업데이트를 수행하고 있으나
맨처음 한번은 업데이트가 수행되고 반복적으로 수행하면 업데이트가 되지 않습니다.
에러가 발생하진 않으나, 업데이트가 성공적이면 15초 정도가 걸리며, 업데이트가 이루어지지 않을 경우 바로 성공을 리턴합니다.
( 만약 브로커를 재시작하면 맨처음 업데이가 이루어집니다.)
매니저프로그램에서는 문제없이 동작하고 있습니다.
평균적인 업데이트 시간 : 15초 정도 , 업데이트 행 32,000개
DBMS 설정 및 브로커 설정은 기본입니다.
update query는
update report_data_20140118 inner join report_ip_20140118 on report_ip_20140118.client_key = report_data_20140118.client_key and report_ip_20140118.client_check = 1 set report_data_20140118.client_check = 1
로 다른 테이블을 조인하여 업데이트 하는 쿼리 입니다.
update report_data_20140118 set client_check = 1 은 반복적인 실행에는 이상없이 동작합니다.
테스트 소스코드는 아래와 같습니다.
소스 확인 부탁드리며, 설정이 잘못 된점이 있는지 검토 부탁드립니다.
_RecordsetPtr pRstEmployee = NULL;
_ConnectionPtr pConnection = NULL;
// Define string variables.
_bstr_t strCnn("Provider=CUBRIDProvider;Data Source=xx_dbname;Location=127.0.0.1;User ID=xx_id;Password=xx_pass;Port=33000;Fetch Size=100;");
HRESULT hr = CoInitialize( NULL ) ;
if( hr != S_OK )
return ;
try {
// open connection and record set
pConnection.CreateInstance(__uuidof(Connection));
pConnection->Open(strCnn, "", "", adConnectUnspecified);
pRstEmployee.CreateInstance(__uuidof(Recordset));
_variant_t vtCount;
pConnection->Execute( "update query ........" ,
&vtCount, -1 );
}
catch(_com_error &e) {
// Display errors, if any. Pass a connection pointer accessed from the Connection.
TRACE("rn ERROR") ;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
// Print COM errors.
TRACE("Errorn");
TRACE("tCode = %08lxn", e.Error());
TRACE("tCode meaning = %sn", e.ErrorMessage());
TRACE("tSource = %sn", (LPCSTR) bstrSource);
TRACE("tDescription = %sn", (LPCSTR) bstrDescription);
}
// Clean up objects before exit.
if (pRstEmployee)
if (pRstEmployee->State == adStateOpen)
pRstEmployee->Close();
if (pConnection)
if (pConnection->State == adStateOpen)
pConnection->Close();
CoUninitialize() ;
안녕하세요. 답변이 늦어 죄송합니다.
CUBRID 홈 디렉토리(Default : C:CUBRID) 아래 conf 디렉토리를 확인해 보시면, cubrid_broker.conf 파일이 있을 것입니다.
해당 파일을 열어, CCI_DEFAULT_AUTOCOMMIT 파라미터가 어떻게 설정되어 있는지, 만약 없다면 각각의 Broker마다 해당 파라미터 값을 OFF로 설정해 주신 후에 응용을 재확인 부탁 드립니다.
참고로, 해당 파라미터는 변경 후, Broker를 재시작 해야 하니 참고해 주세요.
CCI_DEFAULT_AUTOCOMMIT : http://www.cubrid.org/manual/ko/9.2.0/admin/config.html#id22
감사합니다.