2012年11月16日 星期五

Oracle ODAC + ASP.NET MVC 佈署

我在去年以及今年年初的時候有寫了一系列介紹使用 ODAC with Oracle Developer for Visual Studio,讓我們可以在 Visual Studio 開發 ADO.NET Entity Framework 時可以使用 Oracle 資料庫,那一陣子 ODAC 的版本是從 Release 3 開始講,之後做了一次的更新說明 Release 4,而隨著 Visual Studio 2012 的上市,所以 Oracle ODAC 也做了一次的更新,Release 5 於 2012-09-11 發佈,可以支援 Visual Studio 2012 以及 .NET 4.5。

但這是一連串都是在開發相關的事項中來做討論,而開發網站總是會有上線的一天,而網站佈署與網站開發都屬於專案開發的一部分,佈署網站本身就不是一件容易的事情,尤其專案的資料庫是使用 Oracle 以及專案的資料存取又是使用 EF + ODAC 的時候。

這一篇文章是補齊之前那一系列文章的內容,把最後的佈署也做個說明。

 


情境一:Server 已經有安裝 Oracle Client

這樣的情況是最常見到的,因為之前專案就已經使用 .NET 搭配 Oracle 資料庫的開發,所以 Server 上大多會安裝 Oracle Client,

Oracle Database 11g Release 2 (11.2.0.1.0) - Standard Edition, Standard Edition One, and Enterprise Edition

image

安裝了 Oracle Client,

image

也設定好 Service Name,

image

但因為我們開發時有使用了 ADO.NET Entity Framework 以及 Oracle ODAC,所以網站專案部屬到只有安裝 Oracle Client 的 Server 上後,網站一執行就會看到以下這樣的畫面,

image

其實也不用仔細的去看堆疊追蹤訊息,因為答案很明顯的就是那暗紅色的幾個大字:

「找不到必要的 .Net Framework Data Provider。可能尚未安裝」

處理這個問題的方式其實很簡單,但有時會看到就是當遇到這問題出現後就把「ODAC with Oracle Developer Tools for Visual Studio」給安裝到 Server 上,雖然是可以 Work,但是這樣的作法並不是正確的,因為我們使用 ADO.NET Entity Framework 來開發,為了要讓 EF 可以支援 Oracle 資料庫,所以在開發環境中安裝了官方所發佈的「ODAC with Oracle Developer Tools for Visual Studio」,其中最重要的就是那個 Data Provider,有了這個 ODAC Data Provider 才能在 EF 去使用 Oracle 資料庫,開發端的環境是如此,但是 Server 環境不必為了要這個 Data Provider 就把整個「ODAC with Oracle Developer Tools for Visual Studio」給安裝上去,如果 Server 是自己管理或是可以讓我們惡搞的情況下,安裝「ODAC with Oracle Developer Tools for Visual Studio」是不會遇到困難,但 Server 管理是比較嚴格的情況下,安裝「ODAC with Oracle Developer Tools for Visual Studio」到 Server 上就會相當困難了。

那怎麼解決這個問題呢?

既然不要在 Server 安裝「ODAC with Oracle Developer Tools for Visual Studio」,那麼又該做些什麼事情才呢?

我們到「ODAC with Oracle Developer Tools for Visual Studio」的下載頁面看看,

http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html

image

在每一個 Release 版本都會有一個 with Xcopy Deployment 的檔案,而這個就是讓我們把 Data Provider 給安裝佈署到 Server,所以對照著專案所使用的 Release 版本下載相對應的 Xcopy Deployment 檔案,我這邊的範例專案是使用 Release 4 的版本,所以我是下載 ODAC 11.2 Release 4 Xcopy version

image

下載下來是一個壓縮檔「ODAC112030Xcopy_32bit.zip

image

解開壓縮後,請各位務必把「readme.htm」文件檔給看個仔細,詳細的安裝與反安裝說明都在 readme.htm 裡,

image

根據 readme.htm 內容的說明,安裝 ODAC Xcopy 可以執行「install.bat all 安裝路徑 odac」這個指令,這會安裝所有 ODAC 的產品:

a) instantclient_11_2 - Oracle Instant Client
b) ODP.NET20 - Oracle Data Provider for .NET 2
c) ODP.NET4 - Oracle Data Provider for .NET 4
d) ASP.NET - Oracle Providers for ASP.NET 2
e) ASP.NET4 - Oracle Providers for ASP.NET 4
f) OLEDB - Oracle Provider for OLEDB
g) OO4O - Oracle Objects for OLE
h) OraMTS - Oracle Services for MTS

至於個別產品的安裝、反安裝以及注意的相關事項就請詳閱 readme.htm,這邊我是執行「install.bat all c:\oracle odac」指令來進行安裝。

開啟命令提示字元視窗,並且進入解壓縮後的 ODAC112030Xcopy_32bit 目錄,

image

接著輸入 install.bat all c:\oracle odac 指令並執行,

image

執行完畢後,開啟檔案總管就可以看到建立的指定目錄,

image

接著我們再重新瀏覽網站,因為已經安裝了 Oracle Data Provider,所以網站就可以正常執行了,

image

 

 

情境二:Server 沒有安裝過 Oracle Client

這個情況應該是出現在一台完全乾淨的 Server 上,沒有安裝過任何 Oracle 相關的產品,這樣的情境下是比較單純的,可以不必安裝 Oracle Client,只需要安裝 ODAC Xcopy 就可以,

image

跟情境一的狀況一樣,就是下載相對應版本的 ODAC Xcopy 並且安裝到 Server 上,

image

安裝完成之後直接瀏覽網站,網站可以正常執行,

image

這個範例網站的資料庫連接字串並不是使用 Service Name,而是直接使用以下的資料庫連接字串,

(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.228)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = xe)))

假如我們要使用 Service Name 的話,就必須到 ODAC 的安裝目錄中去增加以下的目錄與檔案,

目錄:安裝目錄/Network/Admin

檔案:tnsnames.ora

image

 


如前言所說的,這一篇是補齊整個系列文章的內容,之前都是在講開發端環境的安裝與使用,但是到了需要把網站佈署到 Server 的時候就沒有再做說明了,在我實際開發專案的時候也有遇到這樣的問題,並不是說我不知道怎麼把 OADC 安裝佈署到 Server 上,而是要讓 Server 管理者了解原本的 Oracle Client 與 ODAC 的不同,為何需要另外安裝 ODAC Xcopy 這部份就讓我花了不少的時間來解釋,因為以往的開發專案都沒有遇到過需要安裝 ODAC 的經驗,也可見在我之前的專案開發仍舊使用 System.Data.OracleClient 而未改用 Oracle.DataAccess,所以會不明白為何改使用 ADO.NET Entity Framework 來開發就需要安裝這些東西(增加 Server 管理員的負擔)。

技術是不斷地往前推進,維護既有專案當然是延續當時開發的技術與內容,並不需要把既有專案給翻新;但是新專案的開發,如果環境許可的狀況下,我真的建議應該採用比較新的技術來開發,無論是開發速度以及系統執行效能上是會有明顯效益的,像專案會使用到 Oracle 的開發,一般傳統的作法還是大多使用 ADO.NET 的方式來處理,此時 Oracle 已經發佈官方正式的 Data Provider,建議大家可以改採用 ADO.NET Entity Framework,當然改用 ORM 之後的效能會比傳統 ADO.NET 的存取效能要差一些,但是在開發以及後續維護的人力時間成本消耗上,是有明顯的差異,不過前提是開發人員要能夠熟悉 ADO.NET Entity Framework 的使用。

 

延伸閱讀:

黑暗執行緒 - System.Data.OracleClient將走入歷史

 

以上

3 則留言:

  1. 這玩意好像未支援Code First

    然後R5在Visual Studio 2012上開發.NET 4的專案一直跟我講"找不到必要的 .Net Framework Data Provider。可能尚未安裝", 但是開發.NET 4.5的專案以及VS本身卻又正常

    回覆刪除
    回覆
    1. 有關於 Code First 的開發應用,這方面我並不熟,
      專案上大多是使用 Database First 為主,
      所以相關問題可能要到 Oracle 的 Forum 去尋找相關問題或提問會比較快。

      刪除
  2. 網誌管理員已經移除這則留言。

    回覆刪除

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。