데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요.
VC++ 에서 ADO 의 RecordSet 을 이용하여 MSSQL DB 에서 select 를 하는데,
'db_e_object open object was open' 가 리턴되고 있는데,
문제될 수 있는 부분, 또는 문제를 추가로 분석하기 위해, 필요한 것이 있다면 어떤 부분이 있을지 궁금하여 문의 드립니다.
- 기존 사용중이던 테이블인데, 키도 없고, 인덱스도 없는 상태 입니다.
1. 컬럼 중 시간 컬럼이 있어서, 정렬하여 가져오는 부분이 있는데, 이 부분으로 인해 비용이 많이 발생되는 듯 하여,
제외하고 수행해봤으나, 결과는 같았습니다.
2. 총 4개의 컬럼이 있는데, 컬럼 전체 조회가 아닌, 1개 혹은 2개 컬럼의 데이터만 가져오게끔 하면 성공하기도 하는 것은
확인 했으나, 이것으로 원인 유추가 가능할 부분이 있을지 모르겠습니다.
- 추가로 테스트 중인 DB 정보는 아래와 같습니다.
DB : MSSQL 2008 R2 Express버전 (해당 버전의 DB별 최대용량은 10기가로 알고 있습니다)
- 문제 분석중인 DB 상태
MDF 파일 용량은 10기가로 확인되고 있으며, 데이터 ROW갯수는 1600만 남짓 입니다.
그럼 모쪼록 도움 부탁드리겠습니다.
감사합니다!
Comment 2
-
Cover Fly
2021.09.02 21:31
관련 부분도 살펴보지 않은 것은 아니지만, 놓친 부분은 없을지 다시 한번 체크해봐야겠네욥~
코난님~ 자세한 답변 감사드립니다! 경과에 따라 추가 덧글 작성토록 하겠습니다^^
아래는 델파이의 오류지만, 컨셉은 같을 듯 합니다.
"Object Was Open" error using Delphi, SQL Server and ADO - Stack Overflow
즉, 데이터가 클 경우에 timeout 등의 이유로 발생하는 것으로 보입니다.
위의 stackoverflow처럼, timeout property 부터 체크해 보세요.
예를 들어 timeout이면,
Stored Procedure Properties Example (VC++) - ActiveX Data Objects (ADO) | Microsoft Docs
이렇게, 이런 command 부분 등에서 바꾸면서 해 보시길 권장해 드립니다.
_bstr_t strCnn("Provider='sqloledb'; Data Source='My_Data_Source'; Initial Catalog='pubs'; Integrated Security='SSPI';");
try {
// Define a command object for a stored procedure.
TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
hr = pConnection->Open(strCnn, "", "", adConnectUnspecified);
TESTHR(pCmdByRoyalty.CreateInstance(__uuidof(Command)));
pCmdByRoyalty->ActiveConnection = pConnection;
pCmdByRoyalty->CommandText = "byRoyalty";
pCmdByRoyalty->CommandType = adCmdStoredProc;
pCmdByRoyalty->CommandTimeout = 15;