울어라휘파람새야

ADODB.Command 오류 '800a0e7a'(ODBC관련) 본문

밥줄/ASP

ADODB.Command 오류 '800a0e7a'(ODBC관련)

꼬꼬리코 2011. 10. 20. 15:37

지금와서 돌아보지만...오류 관련 조사를 하다보니, 저 오류 코드는 Command만 가지고 생기는 오류는
아니고 DB connect 관련된 오류의 종합버전(?)인 것 같고, 결과적으로 해결된 상태이다.
해결 방법만 보려 한다면 제일 아래만 보면 되고, 원인 분석 차원에서 조사 로그는 계속 남겨둔다.  


-------------------------------------------------------------------------------------------
* 발단

B서버(웹서버)에서 C서버로 ODBC연결을 통해 DB에 접근하고 있고,

A서버(웹서버)에도 똑같은 환경으로 ODBC연결을 통해 C서버로 접근하려고 했으나 아래의 오류구문이 
나오면서 진행이 안 됨.

ADODB.Command 오류 '800a0e7a'공급자를 찾을 수 없습니다.
올바르게 설치되지 않았을 수 있습니다.

/test.asp,
줄 11* 해당 구문:Set aaa = Server.CreateObject("ADODB.Command")
aaa.ActiveConnection = Application("test")    <=== 오류 발생 라인
-------------------------------------------------------------------------------------------
상황.1 
A, B, C 서버 모두 MDAC 버전은 2.82로 똑같은 상황.

상황.2
A서버(리얼서버)에 'ODBC 데이터 원본 관리자'에선 C서버로 로그인 계정을 통해 정상적으로
연결 등록 및 테스트까지 가능함
B서버(임시서버)에 'ODBC 데이터 원본 관리자'에선 C서버로 로그인 계정을 통해 정상적으로
연결 등록 및 테스트까지 가능함.

상황.3 (문제점)
A서버에선 UDL 파일클릭 시 OLE Db Provider 목록에 'ODBC Drivers' 목록이 없다.B서버에선 UDL
파일클릭 시 OLE Db Provider 목록에 'ODBC Drivers' 목록이 있고, 정상적인 연결
테스트도 가능함.
상황.4

Component Checker 란 MDAC 버전 체크하는 프로그램을 통해 A, B 서버의 체크 결과는 아래와 같았다.
문제 서버에서 File Details 를 클릭하면 우측에 dll 파일 리스트가 펼쳐지고, 해당 파일들의 버전도 확인 할 수있었다. (개별 파일들 버전은 B서버와 모두 일치)

Component Checker 다운로드 링크:

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=1953



@ A서버(문제 서버)




@ B서버(정상 작동)







B서버 처럼 MDAC 2.8 SP2... 이런식으로 정렬이 되야 하는 거 같다는 생각만 들었지 아직까지는 구체적으로 뭘 해야하는지 몰랐음.


계속 검색을 한 결과 아래의 방법 때문에 비슷한 문제가 생길 수 있다는 글들을 발견.
(태오에서도 이 부분을 조사해보라고 답변을 받았음.)

cmd에서 c\program files\common files\ststem\ole db 로 간 뒤 regsvr32 sqloledb.dll 재등록.
-> 실패 아무 반응 없음.


------------------------------------------------------------------------------------------

MDAC 재설치가 답이라 생각하고, 재설치 방법 검색 결과

Windows/inf/mdac.inf 우클릭 후 실행(install) 후 재시작.

이걸 실행하고 난 뒤 A서버에서 Component Checker 를 실행하니 리스트에 아래와 같은 변화가 있었다. 


실행 후 바로 뜨는 팝업창




'예'를 클릭 한 뒤 바뀐 화면




File Details 안에 여러 가지가 한 번에 생겼고, 두 번째에 원하던 목록이 생기긴 했지만....

뜬금없는 MDAC 2.8 ON WINDOWS XP SP2 와 MULTOPLE 이란 것이 생겼다.

그리고 역시 원래 문제는 해결이 안 되는 상황...


------------------------------------------------------------------------------------------

다음 시도는 서버 초기 설치 버전(고스트 파일)으로 롤백을 시켰다.

완전 초기의 2003과 MS-SQL이 아닌 상태여서 그런지(심지어 SQL은 SP4까지 업데이트 된 상태)
결과는 마찬가지 였음.

------------------------------------------------------------------------------------------

MDAC_TYP.exe 파일(2.8버전)을 다운로드 후 재설치 해봤다.
-> 변동 없음.

------------------------------------------------------------------------------------------

2011. 10. 25. 

웹 서버 설치 문제로 가닥이 잡혀 시스템엔지니어가 웹서버를 재설치 했다. 
서버 재설치 후 바로 MS-SQL2005만 설치한 상태에서(업데이트 문제가 있을까봐) 다시 테스트가 진행
됐고, 바탕화면에 test.udl 파일을 만들어 ole db 공급자 목록을 확인했다. 

... 이번에도 역시 목록 갯수가 많이 부족했고 odbc 관련 목록이 안 보였다. 

여기까지만 보면 윈도우 서버 설치문제는 아니라는 건데...

------------------------------------------------------------------------------------------

2011. 10. 26.

구글 검색을 하다보니 뭔가 힌트가 될만한 내용을 찾았다. 

아래는 32bit OLE DB Provider 목록이라고 한다. 
  • Microsoft Jet 4.0 OLE DB Provider
  • Microsoft Office 12.0 Access Database Engine OLE DB Provider
  • Microsoft OLE DB Provider for Analysis Services 9.0
  • Microsoft OLE DB Provider For Data Mining Services
  • Microsoft OLE DB Provider for ODBC Drivers
  • Microsoft OLE DB Provider for OLAP Services 8.0
  • Microsoft OLE DB Provider for Oracle

URL: http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&wid=558


링크 속 Provider 목록 차이를 통해 볼 수 있듯이 32bit 와 64bit 의 Provider 목록이 서로 차이가 있고,

핵심이라고 생각되는 ODBC Drivers 관련 내용이 64bit에 아에 없다!

Microsoft Jet 2.0 OLE DB Provider 같은 걸 사용해서 DB 접속을 시도할 경우 

The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine
 
이런 오류가 발생한다고 한다. 

이걸 힌트로 다시 방법을 찾아봐야 할 거 같다. 

재밌는건 노트북 환경 Win 7 (64bit) 의 test.udl ole db Provider 목록은 구성이 조금 다르다. 



ODBC Drivers 와 SQL Server 모두 보인다. 

2003 Server 32bit, 64bit와는 구성이 좀 다른 것 같다. 

------------------------------------------------------------------------------------------
2011. 10. 26.

ODBC 관리자 도구의 32비트 버전 및 64비트 버전의 ODBC 관리자 도구 64비트 버전의 Windows 운영 체제에서 32비트 사용자 DSN 및 64 비트 사용자 DSN 표시

라는 내용을 검색을 통해 발견할 수 있었다. 

이 부분은 이번 문제와 직접적인 관계가 있는건지 잘 모르겠다. 
하지만 64비트와 32비트 운영체제, 응용 프로그램 사이에 이런 문제가 있을 수도 있다는 것을 기록으로 남겨 
여러가지 경우의 수를 참고 할 수 있게 하기 위해 기록해뒀다. 

URL: http://support.microsoft.com/kb/942976/ko

번역기가 돌린 말이고 내용이 어려운지라 아직은 다 파악이 안 됐지만...

재밌는건 아래의 내용이다. 
  • 32 비트 버전의 Odbcad32.exe 파일 %systemdrive%\Windows\SysWoW64 폴더에 있습니다.
  • 64비트 버전의 Odbcad32.exe 파일 %systemdrive%\Windows\System32 폴더에 있습니다.
64bit 운영체제를 깔면 program 폴더가 2개가 생긴다 (x86) 붙은놈은 32bit 용...

파일검색기에 odbcad32.exe를 돌리면 파일 2개가 검색되고 위의 경로에 하나씩 위치한다. 

64bit 환경에서 32bit 응용 프로그램을 실행할 경우 ..\SysWoW64 폴더에 있는 Odbcad32.exe를 사용하라는 건데...

문제가 됐던 웹서버에서 혹시 32비트 쪽 파일을 쓰고 있나 따라가봤더니 64bit 쪽 파일을 잘 쓰고 있었다. 

그렇다면 MS-SQL2005가 32bit 였던 것인가? (추정)
아니면 백업받은 DB파일이 32bit MS-SQL에서 나온 것이라 문제가 됐던 것인가? (진실)

현재 MS-SQL을 재설치 하는 과정이라 확인이 안 되고 있지만... 어쨌든 UDL 목록에서 안 보였던 건 어떻게 설명
해야할지 막막하기만 하다...

------------------------------------------------------------------------------------------
2011. 10. 27. 

문제가 해결됐다. 
본인의 해결이 아니라 윗 상사분이 해결해주셨다. 

25일 이전에 MDAC(2.8버전)을 재설치 한 적이 있었다. inf 파일 우클릭을 통한 재설치와 새로 다운로드 받은 뒤
덮어쓰는 방식의 재설치 방법.

둘 다 해결책이 아니었는데... 상사분은 두 번째 방법 즉, MDAC 재설치를 통해 해결하셨다고 한다. 

MDAC 64비트, 한글판을 인터넷을 통해 구한 뒤 설치하는 방법으로 해결 하셨다. 

내가 했던 방법과 무슨 차이가 있는지 보니... 일단 내가 구했던 MDAC 파일은 32비트인지 64비트인지
확인을 안 한 상태에서 설치 했던 것 같다. (아무래도 32비트 였나보다.)

적용 후 UDL 파일 Provider 목록에 ODBC가 생겼고, 실제 연결도 성공했다. 
OLE DB 구문을 통한 Command 사용 테스트도 정상적으로 성공했다. 

그렇다는것은 2003Sever Standard x64 버전(정품)을 그냥 깔았을 때, 위의 문제가 계속 있을 수 밖에 없다는 건데...
이 부분은 아직까지 남은 미스테리로 남는다. 왜?
(해당 MDAC 파일을 요 아래 첨부했습니다.)


끗.
 
------------------------------------------------------------------------------------------

참조.


* repair mdac on windows2003, mdac복구하기
(어느쪽이 원본인지 모르겠다. 둘 다 같은 내용임) 

Comments