오류 메시지는 다음과 같은 메시지 입니다.
내용을 들여다 보면, 초기화를 못했다는 메시지와
- System.TypeInitializationException
그러면서 OracleConnetion이 초기화가 되지 못한 것 같습니다.
주요 오류 내용은
"The provider is not compatible with the version of Oracle client"
입니다.
한국어로는
"제공자가 oracle 클라이언트 버전과 호환되지 않습니다"
1. 문제의 시작
첫번째로 문제의 시작에 대해서 말해야 할 것 같은 데요.
- 가. 원래 닷넷 프레임워크 3.5 부터 시작된 Oracle.Data.Access 를 프레임워크 4.5 로 올리면서 까지 사용하고 있었다는 것이고
- 나. 어찌어찌 설정한 것을 지금까지 조심조심(?) 써 왔다는 것입니다.
- 다. 그러다가, 갑자기 좋지 못한 상황이 발생 되서 다시 이 오라클 클라이언트 설정을 잡아야 했다는
것입니다.
2. ODAC 의 설치
그래서, 설치 과정이 없는 ODAC 를 사용 해보기로 결정 하였습니다.
참고로 64비트는
입니다.
3. 삽질의 역사
각 자의 PC 에 있는 개발 환경들은 어찌어찌 삽질을 해 봤더니 정말~어쩌다보니 설정을 잡았는 데,
문제는 서버에 설치 하면서 삽질이 시작 되었습니다.
다음은 결국에는 삽질한 역사가 되겠습니다.
4. 알게 된 것들
그래서, 위의 삽질의 결과 알아낸 것들은 GAC 라는 것들이랑 설정을 어떻게 잡아야 할 것인지에 대한 것들입니다.
4.1 Oracle.DataAccess Client 버전 별 GAC 위치
이 글로벌한 어셈블리 캐시는 버전에 따라서 들어가는 위치가 좀 틀린 데요
- .NET 3.5 까지는 Windows 밑에 assembly에 들어가고
- .NET 4.0 부터는 Windows 밑에 Microsoft.NET 밑에 assembly 밑에
- 32비트의 경우 GAC32
- 64비트의 경우 GAC64
들어간다는 것을 알아 냈습니다.
예를 들면. 내가 Oracle.Data.Access.dll 버전이 2.X 의 경우에는
Windows 밑에 assembly 에 들어가게 된다는 것입니다.
Oracle.Data.Access.dll 버전 2.X x86>
윈도우 폴더처럼 보기 위해서는 레지스트리를 건드리는 아주 위험한(?) 일을 감수 해야 하기 때문에 하지 않도록 하겠습니다(^^)
여하튼 위에서 보듯이 32비트의 경우 x84으로 64비트의 경우 AMD64 로 프로세스가 나타 나는 것입니다. 그러면, Oracle.Data.Access.dll 버전이 4.X 의 경우는 어떨까요?
.NET 4.0 부터는 Windows 밑에 Microsoft.NET 밑에 assembly 밑에 들어가게 된다는 것이죠
Oracle.Data.Access.dll 버전 4.X x86>
4.2 Oracle.DataAccess Client 맞게 설치하기
그럼, 개발을 해왔던 레거시 시스템이 있었기 때문에 원래 환경 기반으로 얘기를 해보자면
기본 조정 조건은
- 클라이언트는 2.X odp.net 를 사용한 32비트 버전
이라는 것입니다.
위에 오류 메시지를 없애기 위해서는 조심스럽게 접근 해야만 합니다.
우선, ODAC 를 설치한 디렉토리는
C:\oracle32와 C:\oracl64 두 개를 다 설치 하였습니다.
위 조정 조건에 따라서 본다면, 다음과 같은 명령어를 실행 해야 하겠죠
cd C:\oracle32
rem 우선 GAC를 비우자
unconfigure all [설치할 때 준 별명]
rem 그런 다음 GAC에 넣자
configure odp.net2 [설치할 때 준 별명]
위의 그림처럼, Windows 밑에 assembly 에 들어가게 될 것입니다.
4.3 machine.config?
아래 삽질을 하고, 오늘까지 삽질을 한 다음 새로 알게 된 사실입니다.
이 파일은 위 글에서 언급 했듯이 두군데 존재 합니다.
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
따라서, 위의 기본 조정 조건인
- 클라이언트는 2.X odp.net 를 사용한 32비트 버전
으로 설치를 하게 되면 불행히도 생성 되는 곳이 없으나,
만약 기본 조정 조건이
- 클라이언트는 4.X odp.net 를 사용한 32/64비트 버전
으로 설치를 하게 된다면 위의 두 파일 안에 있는 내용에 추가 되거나, 수정 되게 됩니다.
중요 할 것이라고 생각 되는 파일이긴 합니다. 자세한 내용은 구글링 해보시기 바라며, 이 파일을 언급한 이유를 조금 있다가 설명 하도록 하겠습니다.
5. 컴파일 및 빌드
그럼 이때까지 사실들을 기반으로 해서 한번 컴파일과 빌드를 해 보았습니다.
코드는 아래에서 가져 왔습니다.(원본은 스택오버플로우)
위의 기본 조정 조건으로 설치 된
- 클라이언트는 2.X odp.net 를 사용한 32비트 버전
으로 컴파일과 빌드를 해 보기 위해서 설정은 다음과 같이 잡았습니다.
비주얼 스튜디오 화면
윈도우 밑에 assembly
모든 것이 완벽 한 것 같습니다 만,
엉뚱한 메시지가 툭하고 튀어나오네요.
"요청한 .net framework data provider를 찾을 수 없습니다. 설치되지 않았을 수 있습니다 "
서두에서 언급했듯이 아무것도 없는 깨~끗한 서버이기 때문에 .NET 프레임워크가 없는 것으로 생각하고 그냥 건너 뛰겠습니다.
5.1 조정 조건 바꾸기
위의 기본 조정 조건을 다음 처럼 바꾸도록 하겠습니다.
- 클라이언트는 4.X odp.net 를 사용한 32비트 버전
자 그럼 위의 조정 조건 처럼 된다면 다시 환경 설정을 잡아 줄 필요가 있습니다.
cd C:\oracle32
rem 우선 GAC를 비우자
unconfigure all [설치할 때 준 별명]
rem 그런 다음 GAC에 넣자
configure odp.net4 [설치할 때 준 별명]
unconfigure all 해준 다음에 Windows 밑에 assembly에서 해당하는 클라이언트 버전을 삭제 하면 됩니다. 깨끗이~ ( unconfigure 해주지 않으면 지워지지 않더군요)
자 그럼
Visual Studio
Assembly 폴더
그리고 machine.config(짤리긴 했지만요...)
이렇게 하면 제대로 동작 했습니다.
5.3. Oracle.DataAccess 2.X 오류 해결 하기
정말 마지막으로
"요청한 .net framework data provider를 찾을 수 없습니다. 설치되지 않았을 수 있습니다 "
이 부분에 대한 오류를 다시 함 잡아 보도록 하겠습니다.
이미 위 글 마지막에서 언급 하였는데요... 해당 파일 여기서는 x86 이기 때문에
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
파일 내에 <DbProviderFactories> 엘리먼트를 수정 해 주면 되겠습니다.
아까도 말했지만, .NET 4.0 에서는 이 파일을 자동으로 수정 해 주지만, 그 이하에서는 다음과 같이
사용자가 수작업으로 넣어 주어야 되나 봅니다.
<system.data>
<DbProviderFactories>
<add name="Oracle Data Provider for .NET"
invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET"
type="Oracle.DataAccess.Client.OracleClientFactory,
Oracle.DataAccess, Version=2.112.4.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
이상.
'프로그래밍' 카테고리의 다른 글
자바에서 Bit Masking (1) | 2022.11.26 |
---|---|
final 키워드가 자바 가비지콜렉션을 향상 시킬까요? (0) | 2022.11.25 |
Python 101: Equality(동일성) vs Identity(동등성) (0) | 2022.11.23 |
Bucket Sort 알고리즘 (0) | 2022.11.21 |
쿠버네티스-Pod 관련 실행 연습 (0) | 2022.11.20 |