oracle thin和oci 區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

Features of?Oracle?JDBC Drivers:

1.JDBC Oci 此驅動類似于傳統的ODBC 驅動。因為它需要Oracle Call Interface and Net8,所以它需要在運行使用此驅動的Java程序的機器上安裝客戶端軟件

?

2.JDBC Thin 這種驅動一般用在運行在WEB瀏覽器中的JAVA程序。它不是通過OCI or Net8,而是通過Java?sockets進行通信 ,因此不需要在使用JDBC Thin的客戶端機器上安裝客戶端軟件

?

連接Oracle數據庫提供了兩中方式OCI方式和thin方式,OCI方式是通過本地動態連接庫和Oracle進行套接字通訊,速度和安全性比較好,thin方式是通過遠程訪問Oracle。一般情況,OIC方式用于服務器端開發的數據庫連接方式而thin方式可用于applet等需要遠程訪問數據庫的方式。

?

-----------------------------------------------------------

根據oracle的說法,java程序連接oracle數據庫時,用oci驅動要比用thin驅動性能好些。主要的區別是使用thin驅動時,不需要安裝oracle的客戶端,而使用oci時則要安裝oracle的客戶端。

  從使用thin驅動切換到oci驅動在配置來說很簡單,只需把連接字符串java:oracle:thin:@hostip:1521:實例名換為java:oracle:oci@本地服務名即可。如:

  從jdbc:oracle:thin:@10.1.1.2:1521:shdb改成jdbc:oracle:oci8:@shdb

  但這里這臺機需安裝oracle數據庫的客戶端并配置本地服務名,同時還需指定NLS_LANG環境變量,NLS_LANG環境變量是用來控制客戶端在顯示oracle數據庫的數據時所用的字符集和本地化習慣。通常把NLS_LANG的字符集部分指定為數據庫所用的字符集則就不會存在java顯示的亂碼問題了。

  對于oracle數據庫客戶端的安裝,有二種選擇,一是老實的用oracle數據庫的安裝光盤安裝對應版本的oracle客戶端。二是下載oracle提從的即時客戶端,即時客戶端是不用安裝的,把下載包解壓即可。

  要使java web正常的通過oci驅動訪問oracle,還需要客戶端正確的配置一下相關變量。主要如下:

  對于windows系統并使用oracle客戶端時:

  1. 把%ORACLE_HOME%\lib加到PATH環境變量.

  2. 把%ORACLE_HOME%\jdbc\lib\classes12.jar加到CLASSPATH環境變量里.也可以把classes12.jar拷貝到tomcat的comman\lib目錄下。

  對于windows系統并使用oracle的即時客戶端時(假定即時客戶端解壓在d盤):

  1. 把d:\instantclient_10_2加到PATH環境變量

  2. 把d:\instantclient_10_2\classes12.jar加到CLASSPATH環境變量里.也可以把classes12.jar拷貝到tomcat的comman\lib目錄下。

  對于Linux系統并使用oracle客戶端時:

  1. 在使用tomcat的用戶主目錄下的.bash_profile文件中加入

  exprot ORACLE_HOME=/u01/app/oracle/product/9.2.0.4

  export LD_LIBRARY_PATH=$ORACLE_HOME/lib

  2. 把classes12.jar拷貝到tomcat的comman\lib目錄下。

  對于linux系統并使用oracle即時客戶端時:

  1. 在使用tomcat的用戶主目錄下的.bash_profile文件中加入

  exprot ORACLE_HOME=/instantclient_10_2

  export LD_LIBRARY_PATH=$ORACLE_HOME/lib

  2. 把instantclient_10_2目錄下的classes12.jar拷貝到tomcat的comman\lib目錄下。

  如果一個tomcat下帶了幾個應用,且幾個應用都要連接oracle數據庫時,則要注意的時,不要在每個應用的WEB-INF/lib目錄下放入 oracle的classes12.jar/zip文件。而應該把classes12.jar/zip文件放到tomcat的common/lib目錄下。否則會出來ojdbclib9/10庫重復加載的錯誤。

  使用oracle即時客戶端是,本地服務名的建立可以在目錄instantclient_10_2下建立tnsnames.ora下添加連接串,如:

SHDB =
?????(DESCRIPTION =
????????(ADDRESS_LIST =
??????????(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.236)(PORT = 1521)))
?????(CONNECT_DATA =
????????(SERVICE_NAME = shdb)
??????)
)

總結:

  • 從使用上來說,oci必須在客戶機上安裝oracle客戶端或才能連接,而thin就不需要,因此從使用上來講thin還是更加方便,這也是thin比較常見的原因。
  • 原理上來看,thin是純java實現tcp/ip的c/s通訊;而oci方式,客戶端通過native java method調用c library訪問服務端,而這個c library就是oci(oracle called interface),因此這個oci總是需要隨著oracle客戶端安裝(從oracle10.1.0開始,單獨提供OCI Instant Client,不用再完整的安裝client)
  • 它們分別是不同的驅動類別,oci是二類驅動, thin是四類驅動,但它們在功能上并無差異。

?

另外1)從使用上來說,oci必須在客戶機上安裝oracle客戶端或才能連接,而thin就不需要,因此從使用上來講thin還是更加方便,這也是thin比較常見的原因。?
2)原理上來看,thin是純java實現tcp/ip的c/s通訊;而oci方式,客戶端通過native java method調用c library訪問服務端,而這個c library就是oci(oracle called interface),因此這個oci總是需要隨著oracle客戶端安裝(從oracle10.1.0開始,單獨提供OCI Instant Client,不用再完整的安裝client)
3)它們分別是不同的驅動類別,oci是二類驅動, thin是四類驅動,但它們在功能上并無差異。
4)雖然很多人說oci的速度快于thin,但找了半天沒有找到相關的測試報告。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451692.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451692.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451692.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從拿到班車手冊.xls到搜索附近班車地點

起因 七月份要去某廠報道了,異地租房的時候發現想租一個有公司班車的地方,卻不知道哪里有班車。輾轉流傳出班車手冊后發現搜索實在是太不方便了,于是有了一個主義,想做一個可以搜索房子地址,找出附近班車點&#xff08…

2018.08.09洛谷P3959 寶藏(隨機化貪心)

傳送門 回想起了自己賽場上亂搜的20分。 好吧現在也就是寫了一個隨機化貪心就水過去了&#xff0c;不得不說隨機化貪心大法好。 代碼&#xff1a; #include<bits/stdc.h> using namespace std; inline int read(){int ans0;char chgetchar();while(!isdigit(ch))chget…

AWT和Swing

AWT 是Abstract Window ToolKit (抽象窗口工具包)的縮寫&#xff0c;這個工具包提供了一套與本地圖形界面進行交互的接口。AWT 中的圖形函數與操作系統所提供的圖形函數之間有著一一對應的關系&#xff0c;我們把它稱為peers。 也就是說&#xff0c;當我們利用 AWT 來構件圖形用…

解決 : Apache Tomcat/8.0.0-RC1 - Error report ... HTTP Status 404

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.報錯&#xff1a; Apache Tomcat/8.0.0-RC1 - Error report HTTP Status 404 - /richer/getOnLineRicherCount The requested resour…

py 5.24

#面向對象 #類&#xff1a;模子。Person&#xff0c;不具體。 #實例/對象&#xff1a;依托于類產生的具體的帶有屬性的。alex #實例化&#xff1a;產生對象的過程。 alex Person() #類&#xff1a; #分為靜態屬性&#xff08;一般的變量&#xff09;。動態屬性(函數&#xff0…

多線程原理實例應用詳解

從單進程單線程到多進程多線程是操作系統發展的一種必然趨勢&#xff0c;當年的DOS系統屬于單任務操作系統&#xff0c;最優秀的程序員也只能通過駐留內存的方式實現所謂的"多任務"&#xff0c;而如今的Win32操作系統卻可以一邊聽音樂&#xff0c;一邊編程&#xff0…

git中使用fork

在git中使用fork相當于你在原項目的主分支上又建立了一個分支&#xff0c;你可以在該分支上任意修改。如果想將你的修改合并到原項目中時&#xff0c;可以pull request&#xff0c;這樣原項目的作者如果認同你的修改&#xff0c;就可以將你修改的東西合并到原項目的主分支上去。…

一、【Collection、泛型】

主要內容 Collection集合迭代器增強for泛型 教學目標 能夠說出集合與數組的區別 說出Collection集合的常用功能 能夠使用迭代器對集合進行取元素 能夠說出集合的使用細節 能夠使用集合存儲自定義類型 能夠使用foreach循環遍歷集合 能夠使用泛型定義集合對象 能夠理解泛型上下…

字符裝換

2019獨角獸企業重金招聘Python工程師標準>>> 字母大小寫轉換 a →A char toUpperCase( char ch){ if((ch >a) && (ch <z)){ return (char)(ch - 32); // 主要 這里(char)是必要的&#xff0c;因為char -32是返回的數值&#xff0c;必須轉換成對應的字…

解決 Unable to translate SQLException with Error code ‘17059‘, will now try the fallback translator

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.報錯&#xff1a; Unable to translate SQLException with Error code 17059, will now try the fallback translator 報錯如下&…

企業使用開源軟件的風險

很多時候&#xff0c;我們過高地估計了開源軟件面臨的版權威脅&#xff0c;開源軟件并非天生就比專有軟件存在更多風險。雖然在企業中開源軟件越來越普及&#xff0c;但開源軟件始終難以擺脫知識產權帶來的陰影。2007年&#xff0c;微軟聲稱開源軟件侵犯了它235項專利&#xff…

杭電多校 Harvest of Apples 莫隊

問題 B: Harvest of Apples 時間限制: 1 Sec 內存限制: 128 MB 提交: 78 解決: 35 [提交] [狀態] [討論版] [命題人:admin] 題目描述 There are n apples on a tree, numbered from 1 to n. Count the number of ways to pick at most m apples. 輸入 The first line of the …

linux和GNU之間的關系

Linux只是一個操作系統內核而已&#xff0c;而GNU提供了大量的自由軟件來豐富在其之上各種應用程序。 因此&#xff0c;嚴格來講&#xff0c;Linux這個詞本身只表示Linux內核&#xff0c;但在實際上人們已經習慣了用Linux來形容整個基于Linux內核&#xff0c;并且使用GNU 工程各…

二、【List、Set、數據結構、Collections】

主要內容 數據結構List集合Set集合Collections 教學目標 能夠說出List集合特點 能夠說出常見的數據結構 能夠說出數組結構特點 能夠說出棧結構特點 能夠說出隊列結構特點 能夠說出單向鏈表結構特點 能夠說出Set集合的特點 能夠說出哈希表的特點 使用HashSet集合存儲自定義元素…

@Java | Thread synchronized - [ 線程同步鎖 基本使用]

對實現了Runnable或者Callable接口類&#xff0c;可以通過多線程執行同一實例的run或call方法&#xff0c;那么對于同一實例中的局部變量&#xff08;非方法變量&#xff09;就會有多個線程進行更改或讀取&#xff0c;這就會導致數據不一致&#xff0c;synchronized(關鍵字)可以…

解決bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: 無效字符

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 報錯&#xff1a; ### Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 無效字符; bad SQL grammar []; nested exception is …

開源代碼的使用 二次開發

開源開發&#xff0c;就我的理解&#xff0c;有三種。 1、當作底層基礎&#xff0c;使用。例如大家使用mysql就算。有人會認為我說錯了。但我認為&#xff0c;開發不代表就是要同一個語言&#xff0c;甚至修改代碼。例如我們使用動態庫&#xff0c;原先的動態庫是什么寫的并不重…

Java Application和Java Applet

Java Applet和Java Application 主要區別&#xff1a; &#xff08;1&#xff09;運行方式不同。Java Applet程序不能單獨運行&#xff0c;它必須依附于一個用HTML語言編寫的網頁并嵌入其中&#xff0c;通過與Java兼容的瀏覽器來控制執行。 Java Application是完整的程序&a…

激活prompt

1.下載SQLPrompt 2. 斷網&#xff0c; 打開注冊機&#xff0c;拷貝驗證碼 2. 點擊activate&#xff0c; 拷貝代碼 轉載于:https://www.cnblogs.com/zxhome/p/9459415.html

Map 四種獲取 key 和 value 值的方法,以及對 map 中的元素排序

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。1. 獲取map的值主要有四種方法&#xff0c;分為兩類&#xff1a; 調用 map.keySet() 方法來獲取 key 和 value 的值&#xff1b; 通…