2012-02-20 301 views
6

我見過幾篇文章,說Oracle 11g客戶端(適用於Windows)可以在數據庫高達9.2的情況下正常工作。但是,如果客戶端有時連接到11g,有時連接到10g數據庫,它是否還在工作?我的問題是:連接到10g和11g數據庫時是否有不同的配置?Oracle 11g客戶端連接到10g和11g數據庫

有些人告訴我有關GAC的政策。

謝謝!

回答

8

使用較新的客戶端驅動程序連接到較舊的Oracle數據庫通常沒有問題,例如,使用12g客戶端連接到10g或11g數據庫。答案的其餘部分屬於您的.Net程序中可能出現的技術問題,因爲Oracle客戶端(可能)已經安裝在執行程序的計算機上。


更新2014:

與此同時甲骨文已經發布了Oracle數據庫管理的.NET驅動程序。因此,與其安裝本地Oracle客戶端或提供Instant Client以及您的應用程序,首選的方式應該是僅提供受管驅動程序,而不依賴於本地配置。然後,您對安裝的客戶端,GAC,Oracle數據庫版本等沒有任何問題。您可以從the Oracle website下載受管驅動程序。


前面的答案,如果你不能使用管理驅動程序仍然需要:

的問題,如果你不知道,如果沒有安裝客戶端工作站上的Oracle客戶端開始。如果您在談論GAC 我假設您不知道是否安裝了Oracle客戶端,如果是,那麼它的版本是

如果您不想依賴已安裝的Oracle客戶端,則可以使用.Net應用程序交付Oracle即時客戶端。例如,您可以下載ODAC 11.2 Release 4 (11.2.0.3.0) with Oracle Developer Tools for Visual Studio,它爲您的開發人員工作站(Visual Studio支持DataSet開發和EntityFramework)以及即時客戶端所需的所有文件提供Oracle Client安裝。

您需要的下列文件(搜索他們在您的ODAC安裝的子文件夾)的即時客戶端:

  • OCI.DLL
  • OCIW32.DLL
  • Oracle.DataAccess.dll
  • orannzsbb11.dll
  • oraociicus11.dll(如果您正在使用英語,否則相應的.dll文件)
  • OraOpd11w.dll
  • 的tnsnames.ora(如果你需要它)

另外從Windows目錄所需的下列.dll文件:

  • mfc71.dll
  • MSVCR71.DLL

只需複製應用程序(其中.exe文件所在的位置)的工作目錄中的所有文件即可。

現在如何屬於GAC?

如果在客戶端機器上安裝了Oracle客戶端,那麼GAC中也有一個Oracle.DataAccess.dll。也有可能,一個政策安裝的規定是這樣的:在Oracle.DataAccess.dll程序的獨立的被引用,應始終使用您的GAC的Oracle.DataAccess.dll版本。如果你安裝了我剛纔的鏈接ODAC,你會發現在

Ç該文件:\ WINDOWS \ Microsoft.NET \裝配\ GAC_32 \ Policy.4.112.Oracle.DataAccess \ v4.0_4.112.3.0__89b483f429c47342

結果是,如果您嘗試加載Oracle.DataAccess.dll(帶有類似「提供程序不兼容...」的錯誤消息),您的.Net應用程序始終會引發異常,如果客戶端計算機安裝了另一版本的Oracle Client 11,而不是您在應用程序中引用的版本。

爲了解決這個問題,你可以配置你的app.conf,以便發佈政策將被忽略,且始終您的版本被加載:

<configuration> 
... 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" /> 
     <publisherPolicy apply="no" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
+0

我們是一個governement機構,因此,我們要控制哪些安裝在機器。這到處都是相同的客戶端版本。但我注意到你的回覆,所以如果我們看到奇怪的錯誤,我會知道從哪裏開始尋找。謝謝 ! – 2012-02-20 20:59:14

+0

@ ultraman69在這種情況下,您將在夜間輕鬆入眠:)由於您始終在所有機器上使用相同的客戶端,因此不會出現GAC或政策問題。只要你使用Oracle.DataAccess.dll的標準接口,你可以連接任何數據庫版本> 9.2。當然,11g特定函數/ SQL在低版本上不起作用。 – Desty 2012-02-20 22:08:02

+0

@Detsy我有和webservice,我不能將其設置爲32位。我可以使用相同步驟的ODC的64位即時客戶端版本嗎? – Laggel 2014-04-28 15:45:25

1

我用JAVA或.Net做這件事沒有任何問題。事實上,Oracle說,這是完美的罰款:

該版本包含Oracle數據庫客戶端11.2.0.3,它可以 訪問Oracle數據庫9.2及更高。 Oracle支持Entity Framework和LINQ with Microsoft Visual Studio 2010和.NET Framework 4,包括Entity Framework 4.1和4.2。 Code First不是 在此版本中受支持。

很明顯,你會想測試相同的進程,同時連接到每一個,並通過自己的測試進行驗證,但我認爲你會沒事的。