Oracle中Basic與TNS的區別及與Oracle三種連接方式的關系


 

Oracle JDBC連接一共有三種方式,分別是:SERVICE_NAME、SID和TNSName。

1.SERVICE_NAME方式:jdbc:oracle:thin:@//<host>:<port>/<SERVICE_NAME>  

2.SID連接方式:jdbc:oracle:thin:@<host>:<port>:<SID> 
                    或:jdbc:oracle:thin:@<host>:<port>/<SID>

3.TNSName連接方式:jdbc:oracle:thin:@<TNSName>

打開oracle路徑下的D:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN\tnsames.ora文件

 

紅線框內的db25就是TNSName,是屬於客戶端的參數,其余內容都是服務端的參數。

SERVICE_NAME和SID的比較:
    SID是對內的,是實例級別的一個名字,用來內部之間稱呼用。
    SERVICE_NAME是對外的,是數據庫級別的一個名字,用來告訴外面的人,我數據庫叫"SERVICE_NAME"。

訪問數據庫的過程:
要想訪問數據庫,必須把數據庫文件加載進實例中。SID即INSTANCE_NAME是用來唯一標示實例的。SERVICE_NAME是oracle8i新引進的,8i之前,一個數據庫只能由一個實例對應,但是隨着高性能的需求,並行技術的使用,一個數據庫可以由多個實例對應了,比較典型的應用如RAC。為了充分利用所有實例,並且令客戶端連接配置簡單,ORACLE提出了SERVICE_NAME的概念,該參數直接對應數據庫,而不是某個實例。自此Oracle JDBC連接多使用SERVICE_NAME方式連接,逐漸替代SID方式連接。

 

 

===========================================================

 

 

oracle連接是TNSName格式,之前沒有見過這樣的格式,於是研究了下。
首先附上oracle連接:
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.32)(PORT = 1551)) (CONNECT_DATA = (SERVER = CWDB) (SERVICE_NAME = CWDB) ) )

然后百度了下這種連接方式,發現Oracle其實是有三種連接方式的,感謝這位博主的文章:
https://blog.csdn.net/u012062455/article/details/52442838

然后嘗試用Navicat 12.1連接數據庫,發現一些連接參數看不懂。百度了下沒找到類似的問題解答,下面說下自己的感悟吧,不一定對,不對的地方希望大神幫忙改正:

 

1:連接類型。
這里連接類型有兩種:Basic和TNS兩種。
我的理解是。Basic是基礎的連接類型,可以支持SID和ServiceName兩種連接方式連接Oracle,
TNS支持用TNSName的方式連接Oracle。
測試用連接類型改為TNS,參數改為上面的,可以連接成功:

TNS網絡服務名其實可以讀取文件中的幾個服務,選中就可以如下:)

 

 

 

2.服務名和SID
服務名對應ServiceName的連接方式,SID對應的是SID的連接方式。只要將對應的service_name和sid輸入即可。(此處沒有測試。)

另Navicat12.1有時候會因為和oracle版本不一樣連接不上,需要修改這里的配置:
工具—選項—環境:

 

 

 

這個網上很多,可以多備用幾個。更改完需要重啟。

 

 

轉 : https://blog.csdn.net/qq_40391559/article/details/87936681

https://blog.csdn.net/qq_39688195/article/details/103579926

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM