source

공급자가 Oracle 클라이언트 버전과 호환되지 않습니다.

bestscript 2023. 3. 16. 21:35

공급자가 Oracle 클라이언트 버전과 호환되지 않습니다.

Oracle ODP를 사용하려고 합니다.NET 11g (11.1.0.6.20) Instant Client는 ASP.net에서 데이터 프로바이더로 프로젝트하지만 aspx 페이지를 실행하면 "The provider is not compatible with the version of Oracle client"라는 오류 메시지가 나타납니다.어떤 도움이라도 주시면 감사하겠습니다.

Visual Studio 2005에서 데이터 공급자를 참조했는데 뒤에 있는 코드는 다음과 같습니다.

using Oracle.DataAccess.Client;
..

OracleConnection oOracleConn = new OracleConnection();
oOracleConn.ConnectionString =
    "Data Source=MyOracleServerName;" +
    "Integrated Security=SSPI";
oOracleConn.Open();

//Do Something

oOracleConn.Close();

페이지의 에러는 다음과 같습니다.

Exception Details: Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client

Source Error: 
Line 21: 
Line 22: 
Line 23:             OracleConnection oOracleConn = new OracleConnection();
Line 24:             oOracleConn.ConnectionString =
Line 25:                 "Data Source=MyOracleServerName;" +

[OracleException (0x80004005): The provider is not compatible with the version of Oracle client]
   Oracle.DataAccess.Client.OracleInit.Initialize() +494
   Oracle.DataAccess.Client.OracleConnection..cctor() +483

Stack Trace: 
[TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.]
   Oracle.DataAccess.Client.OracleConnection..ctor() +0
   Boeing.IVX.Web.RoyTesting.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\CE218C\Desktop\IVX.Net\Web\IVX\RoyTesting.aspx.cs:23
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436

이 문제에 대해 자세히 알아보았습니다.다운로드된 동일한 버전의 ODP에서 적절한 DLL을 모두 가져오기만 하면 됩니다.ODP를 사용하기 때문에 exe 파일과 동일한 폴더에 넣습니다.넷은 버전 번호를 섞지 않는 것에 대해 까다롭다.

이 방법에 대해서는, 이쪽에서 설명했습니다.http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c 의 요지는 다음과 같습니다.

  • ODP를 다운로드합니다.그물
  • 파일을 압축 해제합니다.
  • 안에 있는 모든 JAR 압축 해제
  • dll을 사용하다
    • oci.dbl ('oci.dbl'에서 변경)
    • Oracle.DataAccess.dll
    • oraociicus11.124
    • OraOps11w.dll
    • orannzsbb11.disples
    • oraocci11.124
    • ociw32.dbl ('ociw32.dbl'에서 변경)
  • 모든 DLL을 C# 실행 파일과 같은 폴더에 넣습니다.

여기서 말하는 모든 x86/x64를 "무시"하고 ODP를 시도해 보십시오.NET Managed Driver(사용하는 경우).넷 v4+:

https://www.nuget.org/packages/Oracle.ManagedDataAccess/

https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/

Oracle ODP.net Managed 드라이버와 Unmanaged 드라이버

아키텍처가 발행하는 DLL의 모든 "관리되지 않음"을 피하십시오. :D (Oracle에 대해서)

NuGet 패키지(11g에서도 사용 가능):

여기에 이미지 설명 입력

이전/수동 방식:

관리 라이브러리를 사용하여 변환하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

  • 먼저 관리대상과 비관리대상 코드를 비교합니다.http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148
  • ODP를 다운로드했는지 확인합니다.NET, 관리 드라이버 Xcopy 버전만
  • 다운로드한 zip 파일에서 프로젝트 디렉토리에 복사하여 붙여넣습니다.
    • Oracle.ManagedDataAccessDTC.dll
    • Oracle.ManagedDataAccess.dll
  • Oracle에 대한 참조를 추가합니다.Managed Data Access.dll
  • exe가 (VS2010에서 Application Folder에 추가) 양쪽 dll과 함께 출시되었는지 확인합니다.

Oracle Data Provider만 설치했습니다.NET 2.0(11.1.0.6.20)Oracle Instant Client(11.1.0.6.0)를 설치하지 않았습니다.

방금 설치했는데 오류가 사라졌어요!

이 문제는 64비트를 실행함으로써 발생할 수 있습니다.32비트 Oracle 클라이언트에 대한 NET 런타임.이 문제는 서버에서 앱을 실행 중인 서버가 64비트일 때 발생할 수 있습니다.가 실행됩니다.64비트 런타임의 NET 앱.VS에서 프로젝트의 CPU 플래그가 32비트 런타임에 실행되도록 설정할 수 있습니다.

요약해 보겠습니다.

"The provider is not compatible with the version of Oracle client" 오류 메시지는 여러 가지 이유로 인해 발생할 수 있습니다.한편 오류 메시지는 "Object reference not set to an object instance of object" 또는 "Cannot load file or assembly 'Oracle' 등 다양한 플레이버를 가질 수 있습니다.Data Access' 또는 그 종속성 중 하나.

  • Oracle Client가 설치되어 있지 않습니다.이 경우 오류 메시지는 확실히 오해를 불러일으킬 수 있습니다.

Oracle Data Provider for.NET(ODP) 파일 NET, net netOracle.DataAccess.dll는 Oracle Instant Client에 포함되어 있지 않습니다.따라서 설치해야 합니다(32비트 Oracle Data Access Components(ODAC) 또는 64비트 Oracle Data Access Components(ODAC) 다운로드에서 다운로드).또는 Oracle Universal Installer(OUI)에서 해당 옵션을 선택해야 합니다.

Oracle Data Provider > = 12.1을 설치할 때 공급자는 GAC에 자동으로 등록되지 않습니다.필요한 경우 Oracle Doc 2272241.1을 참조하십시오.

  • ODP " Client하지 않습니다.NET 오라클 클라이언트!!너!!!!!!!!!!!!!를 들어, 「」라고 하는 것은,Oracle.DataAccess.dll버전 4.112.3.0은 Oracle Client 11.2.0.4와 호환되지 않습니다.ODP 버전을 확인합니다.NET 및 Oracle Client를 주의 깊게 살펴보십시오.sigcheck를 사용할 수 있습니다.oraociei*.dll "/"/"OraOps*w.dllOracle 클라이언트

    다른 번호 체계에 주의해 주세요.파일 버전 4.112.3.0은 다음을 의미합니다.NET Framework 버전 4, Oracle 릴리스 11.2.0.3.x.

    ODP가 있습니다.NET 버전 "1.x", "2.x" 및 "4.x"이러한 번호는, Microsoft 에 관련하고 있습니다.NET Framework 버전 1.0.3705/1.1.4322, 2.0.50727 및 4.0.30319.버전 1.x는 Oracle Client 11.1까지 사용 가능했습니다.버전 4.x는 Oracle Client 11.2에서 도입되었습니다.

  • ODP의 아키텍처(32비트 또는 64비트).NET이 애플리케이션 아키텍처와 일치하지 않습니다.32비트 애플리케이션은 32비트 Oracle Client/ODP에서만 작동합니다.NET 64비트 애플리케이션에는 각각 64비트 Oracle Client/ODP가 필요합니다.NET(ODP를 사용하지 않는 한).NET 관리 드라이버)

  • .NET Framework 버전이 일치하지 않습니다.예를 들어 Target을 사용하여 응용 프로그램을 컴파일하는 경우.NET Framework 2.0에서는 ODP를 사용할 수 없습니다.NET 버전 4.x.NET Framework 대상 버전은 ODP 버전 이상이어야 합니다.그물.

  • Oracle.DataAccess.dll(컴파일 중에 로드되는 버전)이 대상 시스템의 버전보다 높습니다.

  • 「 」는 .Oracle.DataAccess.dll는 기본적으로 로컬로 제공되는 파일보다 우선되는 GAC에서 로드될 수 있습니다.

  • ODP의 새로운 릴리즈NET 에는, 보다 고도의 Microsoft 가 필요합니다.NET Framework 버전예를 들어 ODP입니다.NET 버전 21.4 에는, 가 필요합니다.NET Framework 4.8"Data Provider for" (데이터 프로바이더용)에서 시스템 요건을 확인합니다.NET Developer's Guide참조해 주세요.

솔루션

  • ODP 사용을 검토합니다.NET Managed Driver 64비트 Oracle Data Access Components(ODAC) 다운로드 페이지에서 다운로드할 수 있습니다.복사만 하면 됩니다.Oracle.ManagedDataAccess.dll하다32번 64번

  • 고객님의 고객명*.csproj, resp.*.vbprojODP를 사용하다NET:

     <Reference Include="Oracle.DataAccess">
       <SpecificVersion>False</SpecificVersion>
       <Private>False</Private>
     </Reference>
    

등의 속성Version=... ★★★★★★★★★★★★★★★★★」processorArchitecture=...는 필수가 아닙니다.선택한 아키텍처와 타겟에 따라 어플리케이션이 올바르게 로드됩니다.NET 프레임워크(적절하게 설치되어 있는 경우) -> 100% 검증되지 않음

  • 타겟 머신의 Oracle Client 버전을 모르는 경우(예를 들어 고객의 머신일 수 있음):위에서 설명한 다운로드 페이지로 이동하여 Oracle Data Access Components의 최소 XCopy 버전을 다운로드합니다.zip 압축 해제 및 복사Oracle.DataAccess.dll파일을 로컬 머신에 저장합니다.VS 'DLL' ('DLL')입니다.NET net net net net net net net net net net net net net애플리케이션을 실행하면 GAC의 퍼블리셔 정책이 실제로 설치된 버전으로 리다이렉트됩니다.

  • 단일 DLL을 가져와서 특정 폴더에 복사하는 것은 현명한 접근 방식이 아니라고 생각합니다."네이크" 머신에서는 동작할 수 있지만 타겟 머신에 Oracle 제품이 설치되어 있는 경우 버전 불일치의 위험이 높습니다.시스템에서 Oracle 제품을 제거하고 새로 설치합니다.Oracle 11g(클라이언트)의 언인스톨/완전 삭제 방법을 봐 주세요.아주 깨끗한 기계를 얻도록 지시합니다.

  • 32비트 애플리케이션과 64비트 애플리케이션을 동시에 조작할 필요가 있는 경우는, 다음의 순서에 따라서, 양쪽의 버전을 1대의 머신에 인스톨 합니다.

Oracle Home이라고 불립니다.OraClient11g_home111gR2라고 합니다.

  • 설치된 Oracle 클라이언트 제거(선택 사항)

  • x86 Client를 하여 Oracle x86 Client에 설치합니다.C:\Oracle\11.2\Client_x86

  • 를 다른예: Oracle x64 Client).C:\Oracle\11.2\Client_x64

  • 도구를 % %WINDIR% 폴더는 %WINDIR% 폴더입니다.\통상은 System32( )C:\Windows\System32 링크를 .ora112 ★★★C:\Oracle\11.2\Client_x64) (아래 참조)

  • %일반적으로 %WINDIR%\SysWOW64)로합니다.C:\Windows\SysWOW64 링크를 .ora112 ★★★C:\Oracle\11.2\Client_x86 (), (아래 참조)

  • 「 」를합니다.PATH 환경변수, 환경변수, 환경변수, 환경변수, 등의 모든 항목을 .C:\Oracle\11.2\Client_x86 ★★★★★★★★★★★★★★★★★」C:\Oracle\11.2\Client_x64타타에 C:\Windows\System32\ora112의 「」, 「」, 「」의\bin주의: ★★★★★★★★★★★★★★★★★★★★★」C:\Windows\SysWOW64\ora112는 안 .

  • 에 따라서, 을 합니다.ORACLE_HOME에서 ''로C:\Windows\System32\ora112

  • 이치노 값 " " " 를 설정합니다.HKLM\Software\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME로로 합니다.C:\Windows\System32\ora112

  • 값 " " " 를 설정합니다.HKLM\Software\Wow6432Node\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME로로 합니다.C:\Windows\System32\ora112)C:\Windows\SysWOW64\ora112)

  • 당신은 해냈어요!이제 x86과 x64 Oracle 클라이언트를 심리스하게 함께 사용할 수 있습니다.즉, x86 어플리케이션은 x86 라이브러리를 로드하고 x64 어플리케이션은 시스템에서 추가 수정 없이 x64 라이브러리를 로드합니다.

심볼릭 링크를 작성하기 위한 명령어:

cd C:\Windows\System32
mklink /d ora112 C:\Oracle\11.2\Client_x64
cd C:\Windows\SysWOW64
mklink /d ora112 C:\Oracle\11.2\Client_x86

주의사항:

  • 두 심볼 링크는 동일한 이름을 가져야 합니다.ora112.

  • ODP를 설치하고 싶은 경우.그 후, 수동으로 NET 를 인스톨 할 폴더를 선택해 주세요.

  • 폴더 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」C:\Windows\System32 라이브러리가 만, 「x64」에는 「x64」가 포함되어 있습니다.C:\Windows\SysWOW64에는 x86(32비트) 라이브러리가 포함되어 있습니다.헷갈리지 마세요.

  • 자신의 도 모릅니다.TNS_ADMIN안 돼, 안하다. TNS_ADMIN합니다.TNS_ADMIN=C:\Oracle\Common\network.

몇 시간 동안 트러블 슈팅을 실시한 결과, 이 문제는 Oracle이 원인이라는 것을 알게 되었습니다.프로젝트 bin 디렉토리에 DataAccess.dll(v4.0)이 있지만 실행 시 Oracle도 로드됩니다.GAC로부터의 DataAccess.dll(v2.x)Oracle 제거 및 재설치프로젝트 레퍼런스의 Data Access 엔트리로 문제가 해결되었습니다.

여기에 언급된 다른 파일들은 제 상황에서는 필요하지 않은 것 같습니다.

갱신하다

"공급자가 Oracle 클라이언트 버전과 호환되지 않습니다" 오류의 근본 원인은 일반적으로 관리되는 어셈블리가 버전과 일치하지 않는 관리되지 않는 라이브러리를 로드하려고 하기 때문입니다.web.config에서1 라이브러리 경로를 지정하면 Oracle 드라이버가 올바른 라이브러리를 사용하도록 강제할 수 있습니다.

<configuration>
  <oracle.dataaccess.client>
    <settings>
      <add name="DllPath" value="C:\oracle\bin"/>
      <!-- ... -->
    </settings>
  </oracle.dataaccess.client>
</configuration>

ODP를 설치합니다.타깃 머신에 접속하면 문제가 해결됩니다.dll을 복사하는 것은 좋은 생각이 아닌 것 같습니다...

Oracle 11g(11.1.0.7.20)에서는 다음 dll과 함께 exe를 추가해야 동작합니다.

  1. oci.module
  2. OraOps11w.dll
  3. oraociicus 11.199 (30 mb에 가까운 매우 큰 크기)
  4. Oracle.DataAccess.dll

Oracle Istant Client를 사용하는 ODP가 있지만 ODP가 실제 Oracle Client를 사용하려고 하는 것 같습니다.머신에도 표준 Oracle 클라이언트가 설치되어 있습니까?Oracle은 같은 머신에서 여러 클라이언트에 대해 상당히 까다로웠던 것으로 기억합니다.

같은 문제가 있습니다만, 제 경우는 dls를 bin 폴더에 카피할 수 없고, 어셈블리 버전만 「리바인드」합니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>    
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" culture="neutral"/>
        <bindingRedirect oldVersion="2.112.2.0" newVersion="2.112.1.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

다음은 3시간 동안 지속된 이 문제를 해결하기 위해 수행한 작업입니다.

  1. .C:\oracle\product\11.2.0는는 called called called called called라는 .client_1이전에 설치했던 장소ODP.NETWindows 64(윈도우 64)

  2. 나중에 ASP 디버깅을 시도합니다.Visual Studio 2012를 사용하는 NET Web API 앱에서 다음과 같은 오류 메시지가 계속 표시됩니다.공급자가 Oracle 클라이언트 버전과 호환되지 않습니다.

  3. 구글을 검색해보니 이 일이 일어난 이유는ODP.NET그리고 64번 잡았습니다.ODP.NETWindows 32 비트의 경우는 인스톨 되어 있습니다만, 같은 에러 메세지가 계속 표시됩니다.

  4. 해결책: 폴더를 삭제했습니다.client_1「」를 재인스톨 .ODP.NET버전의 하고 있었습니다.64비트 버전과 32비트 버전의 비트가 다소 혼재하고 있었습니다.★★★★★★★★★★★★★★★★★★▼

  5. 을 열 수 .OracleConnection ! 디 :! :)

TLDR 버전:

  • 대신 12c 100% 관리 공급자를 사용하십시오.
  • 이전 공급자를 사용해야 하는 경우 오라클을 가리켜야 합니다.올바른 버전의 관리되지 않는 Oracle Client Dll에 대한 DataAccess.dll.머신에 여러 Oracle Client가 설치되어 있는 경우 앱 구성에 "DllPath" 구성 변수(아래 참조)를 포함하는 간단한 방법이 있을 수 있지만, 가리키는 새 Oracle 클라이언트를 설치해야 할 수도 있습니다.

풀 버전:

먼저 오래된 관리 대상 프로바이더의 컴포넌트를 이해하고 있는지 확인합니다(새로운 12c 100% 관리 대상 프로바이더가 아닙니다).두 부분으로 구성되어 있습니다.

  1. 관리 대상 .net 컴포넌트 - 오라클.Data Access.dll
  2. 비관리(비.net) 클라이언트

간단히 말하면 Oracle입니다.DataAccess.dll은 거의 래퍼에 불과하며 .net 명령을 관리 대상 클라이언트의 ORACLE-NET 명령으로 변환합니다.

즉, Oracle을 로드하는 경우입니다.DataAccess는 필요한 관리되지 않는 클라이언트 dll을 찾는 순서가 있습니다.Oracle 문서:

오라클.DataAccess.dll은 다음 순서에 따라 종속 관리되지 않는 DLL(예: 오라클 클라이언트)을 검색합니다.

(1) 어플리케이션 또는 실행 파일의 디렉토리.

2. 어플리케이션 config 또는 web.config에 의해 지정된 DllPath 설정.

3. machine.config에 의해 지정된 DllPath 설정.

4. Windows 레지스트리에 의해 지정된 DllPath 설정.

HKEY_LOCAL_MACHINE\소프트웨어\Oracle\ODP.NET\version\DllPath

5. Windows PATH 환경변수에 의해 지정된 디렉토리.

따라서 귀하의 경우, 귀하의 앱은 위의 프로세스를 따라 Oracle에 비해 너무 오래된 dll을 변경하지 않은 경로를 찾았습니다.사용 중인 DataAccess.dll 어셈블리.

해당 머신에 설치된 Oracle Client가 너무 오래되었을 수 있습니다.그러나 이 기능은 여러 클라이언트가 머신에 설치되어 있고 관리되지 않은 파일이 다른 오래된 설치에서 먼저 발견된 경우에 적용됩니다.나중에 수행하는 간단한 방법은 Configuration에서 dllPath 구성 변수를 사용하여 올바른 Oracle Home Bin 폴더를 지정하는 것입니다.

<configuration>
  <oracle.dataaccess.client> 
    <add key="DllPath" value="c:\oracle\product\1.1.0-xcopy-dep\BIN"/>
  </oracle.dataaccess.client>
</configuration>

클라이언트의 새로운 복사본을 설치하는 경우 xcopy 버전이 가장 작고 "instant client"가 포함되어 위의 DllPath가 이 새 위치를 가리킵니다.그러나 Oracle 클라이언트 설치는 모두 작동합니다.

그러나 이러한 관리되지 않는 클라이언트 문제 해결을 피하고 싶다면 100% 관리되는 공급자를 대신 사용하도록 앱을 업데이트할 수 있는지 확인하십시오. 실제로는 관리되지 않은 파일에 의존하지 않고 관리되는 어셈블리가 한두 개뿐입니다.

또한 Oracle을 로드하지 않을 수도 있습니다.data Access.dll이 bin 디렉토리와 GAC 양쪽에 설치되어 있다면 그렇게 생각하겠지만, senario가 될 가능성은 낮다고 생각합니다.자세한 내용은 어셈블리 해결 프로세스를 참조하십시오.

IIS/IWAM 사용자에게 Oracle 디렉토리에 대한 권한이 있습니까?Excel이나 Access와 같은 다른 앱을 사용하여 이 데이터 소스에 연결할 수 있습니까?

나도 똑같은 문제가 있었어.어플리케이션 컴파일 후 oraociei11.dll을 삭제(삭제했다는 것을 잊어버렸습니다)하였습니다.그리고 실행하려고 할 때 이 오류가 발생했습니다.따라서 oraociei11.dll을 찾을 수 없는 경우 이 오류가 표시됩니다.이 에러가 발생하는 경우는 다른 경우도 있습니다만, 이것도 그 중 하나인 것 같습니다.

또한 IIS 응용 프로그램 풀 Enable 32-bit true 또는 false 플래그를 찾습니다.이 메시지가 뜨면 Oracle 포럼에서 이에 대한 지시를 받았습니다.

이 문제가 아직 해결되지 않은 분들을 위해: 이 기사에 근거합니다.

http://oradim.blogspot.com/2009/09/odpnet-provider-is-not-compatible-with.html

서버에 Microsoft C++ Visual Runtime Library가 없는 것을 알게 되었습니다.Visual Studio가 설치되어 있기 때문에 개발 머신에 설치되어 있었습니다.여기서 라이브러리의 최신 버전을 다운로드하여 설치했습니다.

http://www.microsoft.com/en-us/download/details.aspx?id=13523

셋업을 실행하여 C#에서 Oracle 호출이 실행되었습니다.

난 새 DLL을 얻으려고 노력하지 않았어.기존 프로젝트들은 완벽하게 잘 작동했고, 새로운 프로젝트들 때문에 골치가 아팠기 때문에 다른 것을 시도해 보기로 했습니다.

Oracle Internal.dll을 사용합니다. Access 데이터 액세스.dllv4.112.3.0 ' Studio'를 올렸습니다.v4.121.0.0설정 파일에 명시적으로 지정되어 있지 않은 경우도 있습니다.그래서 에러가 나는 거예요.

그래서 내가 한 일은:

  1. 되고 있는 중 의 Internal.했습니다./bin( 을을 ( ( )
  2. Oracle 복 oracle되고 있는 중 에서 웹 사이트의DataAccess.dll/bin.
  3. 내 웹 사이트에서 둘 다에 대한 참조를 추가합니다.
  4. 오라클가 Data Access에 되었습니다.myWebSite.csproj 지만만잘잘 , , , , , , , 。v4.121.0.0v4.112.3.0.
  5. 는 수동으로 했습니다.myWebSite.csproj뭇매를 맞다

    <Reference Include="Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>bin\Oracle.DataAccess.dll</HintPath>
    </Reference> 
    

는 여러 클라이언트가되지 않는 할 수 Oracle이 다른 할 수 있습니다.
문제를 은 두 가지가 있습니다.

  1. 첫 번째 빠른 솔루션은 관리되지 않는 참조를 제거하고 NuGet에서 관리되는 참조를 사용하는 것입니다. ODP 간의 차이점옵션을 사용하려면 앞서 살펴 보십시오.NET 관리 대상 드라이버 및 관리 대상 외 드라이버

  2. 두 번째 솔루션은 다음과 같은 프로젝트 관리 대상 버전을 수정하는 것입니다.

  • Oracle (Dependencies > Assemblys)> Oracle (Dependencies > Assemblys)> Oracle)DataAccess " " > " :

    여기에 이미지 설명 입력

    여기에 이미지 설명 입력

그런 다음 Oracle GAC 버전을 확인합니다.

  • 실행(+)WinR에서 gac으로 이동(%windir%\)마이크로소프트(MS.NET\어셈블리"
    여기에 이미지 설명 입력

  • 플랫폼과 합니다.

    여기에 이미지 설명 입력

  • 플랫폼을 속성)

    여기에 이미지 설명 입력

  • gac으로 이동합니다. Access data data data data

    여기에 이미지 설명 입력

  • 오라클[ Access ]> [ ]> [ ]및 버전 [ Data Access ]> [ Properties ]> [ Properties ]> [ Properties ]> [ ]

    여기에 이미지 설명 입력

  • 버전이 다르면 이것이 문제입니다.이 문제를 수정하려면 어셈블리 버전을 수정해야 합니다(스타트업 프로젝트에서 config 파일로 이동하여 아래 섹션을 추가합니다).

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.121.2.0" />
      </dependentAssembly>
</assemblyBinding>

이렇게

: newVersion : version publicKeyoldVersion : newVersion : GAC publicKey : your your your your your your your your your your your your your your your your your your your your your your your your your your your your your your your your your your new new new your your버전을 커버해야 합니다.:에서 ('GAC'로)

여기에 이미지 설명 입력

같은 문제가 있었습니다.오라클 때문에요네트워크 공유의 Data.dll 어셈블리는 DBA에 의해 갱신되었습니다.프로젝트에서 참조를 삭제하고 다시 추가하면 문제가 해결되었습니다.

이 문제를 해결하려면 두 단계만 하면 됩니다.

  1. 응용 프로그램 풀의 고급 설정으로 이동하여 '32비트 응용 프로그램 사용' 플래그를 참으로 설정합니다.
  2. 당신의 빈에 있는 모든 DLL이 32비트 버전인지 확인합니다.

행운을 빌어요.

최근에는 솔루션과 모든 프로젝트가 x32 플랫폼을 대상으로 하는 오래된 프로젝트를 진행해야 했습니다.오라클을 따라하려고 계속 노력했어요.DataAccess.dll 및 기타 모든 권장 Oracle 파일은 모든 장소에 있지만 매번 벽에 부딪힙니다.마지막으로 헤드 전구에 불이 들어와(8시간 후) 장착된 ODAC 어셈블리와 해당 플랫폼을 점검하도록 요청했습니다.64비트(x64)의 ODAC 클라이언트는 모두 인스톨 되어 있습니다만, 32비트(x32)의 ODAC 클라이언트는 인스톨 되어 있지 않습니다.32bit ODAC를 장착하면 문제가 해소된다.

설치된 ODAC 버전을 확인하는 방법: 폴더 C:\Windows\assembly."프로세서 아키텍처" 속성은 설치된 ODAC를 플랫폼에 알립니다.

8시간은 전구가 켜지기에는 긴 시간이다.그래서 항상 열심히 일해야 해요. :)

Oracle Data Tools for Visual Studio 2015를 설치한 후 Oracle과 1시간 동안 싸운 후 이 문제가 발생했습니다.파일 복사, 구성 변경 등의 번거로움 대신 Oracle 클라이언트를 다시 설치해보기로 했습니다.그것은 저에게 효과가 있었습니다.

비슷한 문제에 직면했습니다.근본적인 원인은 GAC에 v4.0_4.112.2.0과 v4.0_4.112.4.0이라는2개의 oraccess 버전이 있기 때문입니다.어플리케이션은 v4.0_4.112.2.0을 참조하고 있기 때문에 GAC에서 v4.0_4.4.112.4.0을 삭제했을 때 정상적으로 동작했습니다.

GAC 경로 : C:\Windows\Microsoft.NET\어셈블리\GAC_64\Oracle데이터 액세스

이전:

이후:

버전을 삭제하려면 해당 폴더를 GAC에서 삭제하기만 하면 됩니다.

  • 64비트 머신에서는 C에서 "msvcr71.dll"을 복사합니다.\Windows\SysWOW64를 어플리케이션의 bin 디렉토리로 이동합니다.
  • 32비트 머신에서는 C에서 "msvcr71.dll"을 복사합니다.\Windows\응용 프로그램의 bin 디렉토리에 System32를 연결합니다.

http://randomdevtips.blogspot.com/2012/06/provider-is-not-compatible-with-version.html

Chris의 솔루션은 나에게도 효과가 있었다.그러나 다음과 같은 오류 메시지가 나타납니다.

Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.

보아하니 Oraclish라는 외국어로 말하자면 프로그램이 모든 플랫폼 또는 32비트 머신을 대상으로 하고 있는 것 같습니다.Project Properties에서 타겟 플랫폼을 64비트로 변경하기만 하면 최상의 결과를 기대할 수 있습니다.

오라클에서도 같은 문제가 있었습니다.DataAccess.dll v4.121.2.0. (32비트 및 64비트 버전).32비트 버전의 workerd, 64비트 버전은 그렇지 않습니다.

제 경우 (2일간 시행한 후) 64비트 홈버전에서의 권한에 문제가 있음을 알게 되었습니다.해당 버전의 많은 디렉토리는 "Authenticated Users" 역할에 부모 디렉토리에서 기본적으로 설정된 "Read" 액세스 권한이 없는 경우에만 권한을 재정의했습니다.이러한 서브 디렉토리에는, 「bin」, 「network/admin」, 「nls」, 「oracore」, 「RDBMS」등이 있습니다."Procmon.exe" 유틸리티의 "ACCESS DENIED" 결과를 시스템 인터페이스에서 필터링하여 발견했습니다.권한이 상위 디렉토리에서 하위 디렉토리로 상속되면 모든 작업이 시작됩니다.

전체 오라클 홈에 대한 권한을 재정의하지 않았기 때문에 한 번에 한 디렉토리씩 했습니다만, 보안에 대해 크게 걱정하지 않으시면 해당 오라클 홈 디렉토리 전체에서 재설정할 수 있습니다.

여기에는 많은 이론적인 답변이 있지만, 다음은 복사하여 붙여넣고 즉시 테스트할 수 있는 코드를 사용한 작업 예입니다.

  1. Oracle Express 데이터베이스 OracleXE112를 설치했습니다.이 데이터베이스에는 데모 테이블이 이미 설치되어 있습니다.
  2. 인스톨러를 기동하면, 패스워드의 입력하도록 요구됩니다.비밀번호로 "xxx"를 입력했습니다.(생산에는 사용되지 않음)
  3. 서버는 192.168.1.158 머신 상에서 동작합니다.
  4. 서버에서 Windows 방화벽의 TNSLSNR.exe 프로세스에 대한 액세스를 명시적으로 허용해야 합니다.이 프로세스는 포트 1521에서 리슨합니다.아래 코드로부터 타임아웃 에러가 발생했을 경우는, 방화벽을 확인해 주세요.
  5. 옵션 A: C#(.NET2 또는 .NET4)는 Oracle을 추가해야 하는 ODAC11을 다운로드할 수 있습니다.DataAccess.dll을 프로젝트에 추가합니다.또한 이 DLL은 OraOps11w.dll, oci.dll, oraociei11.dll(130MB!), msvcr80.dll에 의존합니다.이러한 DLL은 EXE와 같은 디렉토리에 있거나 다음 위치에서 DLL 경로를 지정해야 합니다.HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath에서는 64비트 머신에서는 64비트 머신에 추가로 HKLM\SOFTWARE\Wow6432Node\Oracle\...
  6. 옵션 B: ODAC12를 다운로드한 경우 Oracle이 필요합니다.DataAccess.dll, OraOps12w.dll, ociei12.dll(160MB!), oraons.dll, msvcr100.dll.레지스트리 경로는HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
  7. 옵션 C: 100MB가 넘는 대용량 DLL을 원하지 않는 경우 ODP를 다운로드해야 합니다.NET_Managed12.x.x.x.xxxx.zip 이 있는 곳Oracle.ManagedDataAccess.dll이는 4MB에 불과하며 32비트 및 64비트 프로세스에서도 동작하며 다른 DLL에 의존하지 않고 레지스트리 엔트리를 필요로 하지 않는 순수 관리 DLL입니다.
  8. 다음의 C# 코드는, 서버측의 설정 없이 기능합니다(디폴트 인스톨만).
Oracle을 사용합니다.데이터 액세스클라이언트또는Oracle을 사용합니다.Managed Data Access.클라이언트
....
string oradb = "Data Source=(DESCRIPTION=)"+ "(주소_목록=(ADDRESS=(PROTOCOL=RESS)(HOST=192.168.1.158)(PORT=1521)))+ "(CONNECT_DATA=(SERVER=SERVER));"+ "사용자 ID=SYSTEM; 비밀번호=xxx;"
사용(OracleConnection conn = new OracleConnection(oradb)) 
{접속합니다.오픈();사용(OracleCommand cmd = new OracleCommand()){cmd.연결 = conn;cmd.CommandText = "DBA에서 TABLESPACE_NAME을 선택하십시오"데이터 파일";
(OracleDataReaderdr = cmd)를 사용합니다.ExecuteReader(){(박사님) 동안읽기(){listBox.Items.Add (dr["TABLESPACE_NAME"]);}}}}

언급URL : https://stackoverflow.com/questions/659341/the-provider-is-not-compatible-with-the-version-of-oracle-client