天天看點

Oracle Database Instant Client

http://www.oracle.com/technetwork/database/features/oci/ic-faq-094177.html

本文内容

  • Instant Client 一般問題與回答
  •     Instant Client 可以做什麼?
  •     Instant Client 是否收費?
  •     Instant Client 是否支援 Pro*C?
  •     Instant Client 是否支援 SQL*Plus?
  •     Instant Client 是否可以使用 LDAP?
  •     獨立軟體供應商(Independent Software Vendors,ISV)是否可以捆綁 Instant Client?
  •     Instant Client 是否可以重新部署?
  •     Instant Client 與不同版本資料庫的互操作性如何?
  •     Instant Client 是否用 Oracle Names 運作?
  •     如何在 Instant Client 模式指定連接配接?
  •     如何保證 Instant Client 正在使用的是我的 "tnsnames.ora" 檔案?
  •     Windows 上的 Instant Client 如何使用系統資料庫設定?
  •     Instant Client 如何與 ORACLE_HOME 互動?
  •     Instant Client 如何與一個現存的、基于 ORACLE_HOME 用戶端的安裝進行互動?
  •     Instant Client 對 Oracle 環境變量都有哪些行為的變化?
  • Instant Client 常見錯誤
  •     為什麼得到 "message file not found" 錯誤資訊?
  •     當用 Instant Client 運作你的應用程式時,為什麼看到一個增加虛拟記憶體的提示?
  •     PL/SQL Developer 連接配接資料庫伺服器時提示 "無法加載 DLL (oci.dll)"
  •     PL/SQL Developer 連接配接資料庫伺服器時提示 "ORA-12154: TNS:無法解析指定的連接配接辨別符"
  •     PL/SQL Developer 連接配接資料庫伺服器時提示 "ORA-12737:instant client light :不支援伺服器字元集 ZHS16GBK"
  •     PL/SQL Developer 可以成功連接配接資料庫伺服器,但是應用程式抛出異常 "'Oracle.DataAccess.Client.OracleConnection' 類型初始值設定項引發異常"
  • 示範使用 Instant Client
  • 參考資料
  • 修改記錄

Oracle Instant Client 一般問題與回答

Instant Client 可以做什麼?

Instant Client 可以在不安裝完整的 Oracle 用戶端的情況下,運作你的 OCI、OCCI、Pro*C、JDBC 和 ODBC 應用程式。另外,Instant Client 支援 SQL*Plus。從 Instant Client 10.2 開始,可以通過 Instant Client SDK 用 OCI 和 OCCI 開發應用程式。

Instant Client 是否收費?

Instant Client 是完全免費的,用于開發或産生環境。但使用者隻能調用 Oracle 服務。

Instant Client 是否支援 Pro*C?

是。Unix 平台從 Instant Client 10.2.0.x 開始支援 Pro*C,但 Windows 上目前還不支援。

Instant Client 是否支援 SQL*Plus?

是。

Instant Client 是否可以使用 LDAP?

是。從Instant Client 10.1.0.4 開始支援 LDAP。

獨立軟體供應商(Independent Software Vendors,ISV)是否可以捆綁 Instant Client?

是。

Instant Client 是否可以重新部署?

是。參考 Instant Client 許可證:http://www.oracle.com/technology/software/htdocs/client_lic.html

Instant Client 與不同版本資料庫的互操作性如何?

相容各個版本的資料庫。

下面一些問題關系到如何在不安裝标準的 Oracle 用戶端的情況下,僅僅利用複制 Instant Client 以及适當的配置連接配接 Oracle 資料庫。
Instant Client 是否用 Oracle Names 運作?

否。Instant Client 不用 Oracle Names。Instant Client 向後相容,但不支援現在已經過時的功能,包括 Oracle Names。

如何在 Instant Client 模式指定連接配接?

所有的 Oracle 網絡命名方法都可以在 Instant Client 模式下運作,無需使用 ORACLE_HOME 或 TNS_ADMIN(用來定位配置檔案,如 tnsnames.ora 或 sqlnet.ora)。特别地,可以指定形式的連接配接字元串:

一個 SQL 連接配接 URL 字元串的形式:

//host:[port][/service name]       

例如:

//dbase-server-5:4321/ORDERS      

而一個 Oracle 的網絡鍵值對。例如:

"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=dlsun242)       
(PORT=5521))       
(CONNECT_DATA=(SERVICE_NAME=bjava21)))"       

如果設定了 TNS_ADMIN 環境變量,那麼就使用它指定的配置檔案。

如果沒有設定 TNS_ADMIN 環境變量,以及使用 TNSNAMES 條目,如 inst1,等等,則必須設定 ORACLE_HOME 環境變量,并且期望配置檔案位于 $ORACLE_HOME/network/admin 目錄。

注意,在這種情況下,ORACLE_HOME 變量用來定位 Oracle 網絡配置檔案,而用戶端代碼庫元件(OCI、NLS 等等)不會使用 ORACLE_HOME 變量的值。

不支援 bequeath adapter 或空連接配接字元串。但使用空連接配接字元串的一個方法是,在 UNIX 系統上設定 TWO_TASK 環境變量為 tnsnames.ora 檔案路徑或一個 Oracle 網絡鍵值對;而 Windows 上設定 LOCAL 變量。如果 TWO_TASK 或 LOCAL 變量設定為 tnsnames.ora 檔案路徑,那麼 tnsnames.ora 檔案必須能夠被必須是能夠被 TNS_ADMIN 或 ORACLE_HOME 設定加載。

Instant Client 如何與 ORACLE_HOME 互動?

隻要庫加載路徑包含 Instant Client 檔案目錄(例如 instantclient 目錄),并在 ORACLE_HOME 中的庫目錄之前,那麼應用程式将在 Instant Client 模式下操作,就不會再使用 ORACLE_HOME 中的庫。

Instant Client 對 Oracle 環境變量都有哪些行為的變化?

環境變量 ORA_NLS33、ORA_NLS32 和 ORA_NLS 在 Instant Client 模式下被忽略。ORA_TZFILE 環境變量應設定為大的時區檔案的名稱,而不是它的完整路徑。其他環境變量(如 NLS_LANG)在行為上沒有任何變化。

Windows 上的 Instant Client 如何使用系統資料庫設定?

Special settings for Instant Client enabled applications can be set in the registry for all users or on a per-user basis.

  • 使用系統資料庫編輯器(regedit 或 regedt32),在 HKEY_LOCAL_MACHINE\SOFTWARE 下進行全局設定(或在 HKEY_LOCAL_MACHINE\HKEY_CURRENT_USER\SOFTWARE 下為每個特定使用者進行設定)。
  • 添加 ORACLE 組鍵。
  • 在 ORACLE 鍵内添加你需要的新值(NLS_LANG、TNS_ADMIN 等)。
Instant Client 如何與一個現存的、基于 ORACLE_HOME 用戶端的安裝進行互動?

如果在你的機器上已經安裝了 Oracle 用戶端,那麼建議:

  • 不要解壓或複制 Instant Client 庫到 ORACLE_HOME/lib 或 ORACLE_HOME/bin 目錄,以避免覆寫檔案,處于不一緻的狀态。一般地,建議把 Instant Client 庫單獨放到一個幹淨的目錄。
  • 不要把 Instant Client 和 Oracle Client 目錄的路徑都放到環境變量指定的庫路徑中,無論以什麼順序。請在庫的路徑(LD_LIBRARY_PATH 或 PATH,依賴系統平台)中使用它們其中一個,不能都使用,這是基于你使用的版本。
如何保證 Instant Client 正在使用的是我的 "tnsnames.ora" 檔案?

必須設定 TNS_ADMIN 環境變量或設定相應的系統資料庫鍵值(值為 tnsnames.ora 絕對路徑)。這樣将保證,當你運作 Instant Client 時,正在使用正确的 tnsnames.ora 檔案。

Instant Client 常見錯誤

為什麼得到 "message file not found" 錯誤資訊?

一些 Oracle 應用程式在 Instant Client 下會驗證。一旦驗證完成,該消息就會消失。

當用 Instant Client 運作你的應用程式時,為什麼看到一個增加虛拟記憶體的提示?

The Instant Client libraries occupy a virtual address space that is equal to the size of the files. However, only frequently used error messages from the libraries occupy physical memory. Under most cases, the physical memory load is a few kilobytes despite the larger reserved virtual address space.

以下是我在 Windows 7 家庭版上連接配接 Oracle 資料庫所遇到的問題。
PL/SQL Developer 連接配接資料庫伺服器時提示 "無法加載 DLL (oci.dll)"

當你用戶端的作業系統為 Windows 7 64 位,而資料庫伺服器是 Oracle 32/64 位時,你若想使用 PL/SQL Developer 連接配接資料庫伺服器,就隻能安裝 32 位相關的 Oracle 用戶端。因為 PL/SQL Developer 是 32 位,它不能加載 64 位的 OCI.dll。

另外,不能在 Windows 7 64 位作業系統安裝完整的 Oracle 用戶端,甚至通不過安裝前的檢查。是以,隻能安裝 Instant Client 或 ODAC。如隻是要用像 PL/SQL Developer 這樣的三方工具,安裝并配置 Instant Client 就行。如果除了這樣,還要一個開發環境,比如使用 ODP.NET,那就要安裝 ODAC。

PL/SQL Developer 連接配接資料庫伺服器時提示 "ORA-12154: TNS:無法解析指定的連接配接辨別符"

從 Oracle 官網下載下傳、解壓,并複制 Instant Client 到本地後,若沒有正确配置 TNS_ADMIN 和 ORACLE_HOME 環境變量,意味着 PL/SQL Developer 不能正确找到連接配接資料庫伺服器所需的相關檔案或庫,就會提示該資訊。

PL/SQL Developer 連接配接資料庫伺服器時提示 "ORA-12737:instant client light :不支援伺服器字元集 ZHS16GBK"

當你用戶端的作業系統為 Windows 7 64 位,而資料庫伺服器是 Oracle 11g 32/64 位,并且安裝時指定的字元集是 ZHS16GBK 時,上面講到,Oracle 資料庫附帶的完整用戶端是按不上的,隻能搞個 Instant Client,雖說 Instant Client 是向下相容的,可你要是找個 Instant Client 10g 來用,即便正确配置了 TNS_ADMIN 和 ORACLE_HOME 環境變量,PL/SQL Developer 連接配接資料庫伺服器時,就會提示不支援 ZHS16GBK。因為 Instant Client 10g 隻支援英文。

PL/SQL Developer 可以成功連接配接資料庫伺服器,但是應用程式抛出異常 "'Oracle.DataAccess.Client.OracleConnection' 類型初始值設定項引發異常"

此時,你需要的不僅僅是用 PL/SQL Developer 連接配接資料庫伺服器,你還需要一個開發環境。是以,當你用戶端的作業系統為 Windows 7 64 位,資料庫伺服器是 Oracle 11g 32 位,開發環境是 VS 時,正确安裝 Instant Client 11g 隻能讓你的 PL/SQL Developer 可以連接配接上 Oracle 資料庫,但是使用 ODP.NET 的 VS 不能連接配接資料庫。因為沒有 Oracle.DataAccess.dll,即便你複制到應用程式直接引用,也是不行的。

關鍵問題在于 ODP.NET 在你開發環境和 Oracle 用戶端之間還不存在任何聯系。此時,别按 Instant Client 了,直接 ODAC。你會發現,它們安裝後的目錄結構完全相同,隻是内容上的不同。

将 $ORACLE_HOME/NETWORK/ADMIN 目錄複制到 ODAC 的安裝目錄,VS 就可以連接配接 Oracle 資料庫。

示範使用 Instant Client

環境
  • 伺服器端作業系統 Windows 2003
  • 伺服器端資料庫 Oracle 11g Release 1 (11.1) 32 位
  • 用戶端作業系統 Windows 7 64 位家庭版
  • 用戶端連接配接資料庫三方工具 PL/SQL Developer 7
  • 用戶端資料庫用戶端 instantclient basic 32 位 11.2.0.1.0
PL/SQL Developer 連接配接 Oracle 資料庫的配置

假設你把 instantclient basic 複制到 "C:\app\product\11.2.0\instantclient_11_2"。那麼,

  • 設定作業系統環境變量 ORACLE_HOME 為 C:\app\product\11.2.0\instantclient_11_2
  • 設定作業系統環境變量 TNS_ADMIN 為 $ORACLE_HOME\NETWORK\ADMIN
  • 随便從哪個地方複制 sqlnet.ora 和 tnsnames.ora 檔案到 $ORACLE_HOME\NETWORK\ADMIN 路徑下,并添加資料庫連接配接到 tnsnames.ora。
ora11 =      
(DESCRIPTION =      
(ADDRESS_LIST =      
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.247)(PORT = 1521))      
)      
(CONNECT_DATA =      
(SERVICE_NAME = ora11)      
)      
)      

其中,HOST 為資料庫伺服器的 IP 位址;SERVICE_NAME 為資料庫執行個體。

此時,PL/SQL Developer 就應該可以連接配接 Oracle 資料庫。另外,instantclient basiclite 是 instantclient basic 的精簡版,還是不要用的好。

配置時,像 sqlnet.ora 和 tnsnames.ora 檔案的位置,最好不要改變。

目前為止,我見過五個跟 Oracle 用戶端有關的程式。它們的側重點不同,使用的場景和使用者群不同:
  • Oracle 伺服器端自安裝完之後,你會在 instantclient 目錄,裡邊除了 NETWORK\ADMIN,幾乎什麼都沒有。
  • Oracle 用戶端,這個是安裝程式。
  • Oracle instant client basic 程式。這個不需要安裝,直接複制就行。
  • Oracle instant client basiclite 程式。比 Oracle instant client basic 還要小,是精簡版。
  • ODAC 程式,更 Oracle 用戶端安裝程式類似。用于開發。
無論它們有什麼不同,目錄結構都是一樣的。
開發環境配置

假設你的開發環境是 VS,并使用 ODP.NET 連接配接 Oracle 資料庫。

以上隻能保證 PL/SQL Developer 能連接配接 Oracle 資料庫。但是你開發的應用程式卻不能。此時,别安裝 instantclient basic,而是安 ODAC 更友善。如果你将 ODAC 安裝到 "C:\app\product\11.2.0\instantclient_11_2",那麼,

按照上面的三個設定,你用 VS 開發的應用程式就可以連接配接 Oracle 資料庫。

參考資料

  • Instant Client Downloads http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
  • Oracle Database Instant Client http://www.oracle.com/technetwork/database/features/instant-client/index-100365.html
  • 32-bit Oracle Data Access Components (ODAC) with Oracle Developer Tools for Visual Studio http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

修改記錄

  • 第一次 2012-8-21 [ADD]
Oracle Database Instant Client
Oracle Database Instant Client