2017-10-18 10 views
2

오라클 11 (32 비트) 대 오라클 12 (64 비트)의 문제가 있습니다. 여기서 일부 플랫폼은 여전히 ​​32 비트 창을 가지고 있으므로 32 비트 Oracle11을 사용하여 표준화했습니다. WinForms apps 및 Asp 사이트는 모든 플랫폼에서 32 비트 모드로 잘 작동합니다.IIS가 IIS-Express와 같은 버전의 Oracle을 사용하도록하는 방법

오직 내 dev 컴퓨터에만 Oracle 버전이 있습니다. VisualStudio 2015로 개발하고 IISExpress로 디버깅합니다. 그러나 개발 컴퓨터에서 IIS를 실행하면 64 비트 Oracle 12를 실행하고 예외를 throw합니다. Oracle.DataAccess.Client: the provider is not compatible with the version of Oracle Client.

오라클 12를 제거하는 것이 복잡해 보이므로 설치 디렉토리의 이름을 변경하여 사용을 중지했습니다. c:\oracle\product\12.1.0XXX. 또한 레지스트리 키 HKLM/Software/Oracle은 Oracle 12를 가리키며 Oracle-11 만있는 서버에는 존재하지 않으므로 제거했습니다.

또한 GAC에서 2.121.2.0 용 Oracle dll을 제거했습니다.

재부팅 후 VS2015와 IISExpress는 여전히 Oracle 코드에서 정상적으로 작동하지만 IIS를 사용하면 오류 : Unable to load DLL 'OraOps12.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)이 표시됩니다. 이것은 IIS가 IISExpress가 아닌 다른 장소에서 Oracle DDL을 찾는 것을 보여줍니다.

Oracle11은 Oracle11 이전의 PATH 변수에 언급되어 있습니다. 내가 오늘날 PATH를 쉽게 바꿀 수있는 방법을 모르기 때문에, 예전에는 autoexec.bat에 설정되어 있었지만 Oracle12 경로의 이름을 변경하여 처리했다고 생각했습니다. 응용 프로그램은 PATH에 언급 된 모든 디렉토리를 검사하고 Oracle12 디렉토리가없는 경우 PATH에서 다음 디렉토리를 계속 찾습니다. 그러나 IIS가 명시 적으로 OraOps12.dll을 찾으면 Oracle11을 사용하지 않습니다.

제 질문은 IIS에서 IISExpress와 같은 Oracle DLL을 사용하는 방법입니까?

+0

Procmon을 사용하여 DLL을 찾을 수있는 모든 장소를 볼 수 있습니다. IIS의 DLL로드 전략을 모르지만 LoadLibrary 호출이 경로없이 수행하는 것으로 PATH를 기반으로하는 경우가 많습니다. 또한 레지스트리에 저장된 경로를 사용할 수도 있습니다 (PROCMON은 레지스트리 액세스도 표시합니다). –

+0

@ LouFranco 업데이트 된 질문에서 PATH를 참조하십시오. – Roland

+0

당신이 말한 것을 토대로, 저는 Oracle 12를 정말로 제거해야한다고 생각합니다. 내 추측은 레지스트리의 어떤 부분이 그것을 제어한다는 것입니다. –

답변

0

아무 것도 작동하지 않아 Oracle 12를 제거했습니다. 문제가 해결되었습니다.

내가 해결하려고 한 이유는 Oracle 12를 제거하는 것이 매우 번거롭기 때문입니다. 모든 Oracle을 제거한 다음 Oracle 11을 다시 설치해야 모든 단계가 매우 느릴 수 있습니다. 모든 일에는 약 1 시간 반이 걸렸습니다. 그런 다음 2.111.7.20 대신 dll 버전 2.112.1.0을 사용 했으므로 빌드 할 수 있도록 Visual Studio의 여러 프로젝트 (전부는 아니지만)에서 참조를 대체해야했습니다.

결론은 C# Asp.Net 프로젝트에서 Oracle 12에서 64 비트 Oracle dll을 시도하면 안된다는 것입니다. 32 비트 Oracle 11을 사용하면 후회할 것입니다.