서버 전반적인 복습을 하고 있습니다만...

DB를 붙이려고 하니

 

공급자를 찾을 수 없다는 에러가 나왔습니다.

 

 

평소 회사에는 없던일이라 조금 당황하고 이것저것 삽질했습니다만..

결국위에 노란 형광펜으로 그은 SQLNCLI 가 문제였습니다.

 

이게 MS-SQL 2005, 2008 과 접속할때는 SQLNCLI 이지만,

제 집에 있는 PC에는 MS-SQL2012Express라, 이럴경우에는 SQLNCLI10 으로 지정해야 한다는군요.

 

 

 

.... 음.... orz

 

블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소

댓글을 달아 주세요

회사에서 작업으로 받은 컴퓨터가 더 이상 작업하는데 인내심을 요구해서

(팬4 RAM 2GB ... ㅡㅡ... 아무리 장인은 연장탓을 안한다곤 하지만.. 기획자들은 i7에 ssd 보급해주면서 참...  )

현재 안쓰는 테스팅 컴퓨터가 굴러다니길래 (쿼드Q8300 RAM 5GB) 여기에

윈7 64bit 를 설치하고, 가능한 최신 컴파일러의 힘을 보고싶어서 Visual Studio도 2005 -> 2010으로 올렸습니다.

 

그런데.....

가뜩이나 빌드 환경을 적용 시키고

Lua 의 LNK2001 _lua ... 의 에러도 일일히 lib 파일을 지정 시켜서 서버 프로그램 빌드를 성공 시키는건 좋았습니다만...

 

이걸 테스트 서버 (윈2003) 에서 돌리니 프로그램이 걍 죽어 버리더군요.

 

처음엔 64비트로 컴파일 환경이 바껴서 그런가 해서 컴파일 옵션에서 전부 x86환경으로 맞췄는데 결과는 똑같아서

천상 원격 디버깅 까지 해가면서 원인을 찾아보니

 

CADODataBase::CADODataBase()
{
     ::CoInitialize(NULL);
     m_pConnection.CreateInstance(__uuidof(Connection));
     if( m_pConnection == NULL ){ 
          ASSERT(false && "CoInitialize() 를 먼저 호출해야합니다.");
          LOGCON(_T("[CADODataBase][ERROR][ADODB.Connection]\n"));  
     }
}

 

위의 ASSERT에서 죽어버리더군요.

 

그런데... 이게, 컴파일한 win7환경에선 전혀 문제없이 객체 할당에 성공시키니 뭐가 문제일까 하고 열심히 검색하던중

저랑 같은 증상으로 고생하신 분이 계시더군요.

(참고한분 블러그 입니다. http://icartsh.tistory.com/3)

 

결론은 msado15.dll 이 윈7이전이랑 이후 버젼이 있어서 만약 이후 버젼에서 컴파일 하면 위와 같은 함수에서 객체 생성에 실패할 수 도 있다는 이야기 입니다.

 

ms에선 이렇게 설명하고 있습니다.

http://support.microsoft.com/kb/2517589

 

 C:\Program Files\Common Files\System\ado

 

msado15.dll

 

실제로 저 파일의 타임 스템프가 2010년으로 찍혀 있고, 용량도 2배로 늘어있더군요.

MS가 무슨짓을 했는지 잘 모르지만, 해당 폴더의 원래 있던 msado15.dll 을 msado15_win7.dll 로 바꿔준뒤

저 파일을 다운 받아 재 컴파일 해서 테스트 해보니 이상없이 돌아가네요.

 

ㅜㅜ... 이것땜에 하루가 또... ㅠㅠ

블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소

댓글을 달아 주세요

서버 점검하던중 뭔가 설정이 초기화 됬는지,

갑자기 서버 관리자 페이지에서 쿼리가 먹히지 않더군요.   (사용자 'x맨'이(가) 로그인 하지 못했습니다)

 

먼저 서비스 DB에 연결 되어있는건 확인됬고,

다음 게임 컨텐츠 DB에 연결 하려고, 안의 프로시저를 실행해본 결과, 특정 DB에만 접속을 못하고 아래의 에러가 나왔습니다.

"메시지 18456, 수준 14, 상태 1, 서버 <computer_name>, 줄 1"

"사용자 '<user_name>'이(가) 로그인하지 못했습니다."

"메시지 4064, 수준 16, 상태 1,"

사용자 기본 데이터베이스를 열 수 없습니다. 

 

 

결국, 이 얘긴 해당 DB에서 상대쪽 DB에 접근이 안된다는 의미이고,

msdn 의 http://support.microsoft.com/kb/307864/ko 의 도움말을 살펴본 결과

 

상대쪽 DB 보안 -> 로그인 -> 해당 계정의 기본 DB지정에 문제가 있음을 알게 되었습니다.

 

 

결국... 기본 DB를 연결해 주려는 DB로 설정하니 말끔이 해결...

 

... 알고나면 허망한 sql 세계 ㅠㅠ

블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소

댓글을 달아 주세요