oracle instant client,tnsping,tnsnames.ora和ORACLE_HOME

來源:互聯網
上載者:User

標籤:instant   names   lis   定義   community   包括   key   amp   用戶端   

前段時間要遠端連線oracle資料庫,可是又不想在自己電腦上完整安裝oracleclient,於是到oracle官網下載了輕量級clientinstant client。

這玩意沒有圖形介面,全靠sqlplus遠端連線server,所以不佔地方,正好滿足我這樣的追求“簡單就好”的強迫症患者需求。

可是呢,可能是server那邊沒開監聽port,我在自己的機子上嘗試了各種配置,包含tnsnames.ora,sqlnet.ora等,遠端連線均告失敗。為了排查問題。我先ping了一下server的外網地址,發現沒問題。網上說,光ping還是不夠的,還要再tnsping一下。

tnsping,僅僅看名字的話。似乎也是ping的一種。可是,這個工具僅僅包括於完整的oracle用戶端裡。假設你安裝的是instant client。就無法使用tnsping。

我恰好用的就是instant client,是不是非常悲劇?只是。當我到OTN Community逛了一圈之後。我發現tnsping也並不是那麼神奇。OTN Community上面有個文章把tnsping講得非常透徹。我打算轉述於此。原帖在https://community.oracle.com/thread/2434899?

start=0&tstart=0,有興趣的能夠看下。

tnsping所能做的,就是從TNS連接字串中讀取HOST和PORT參數,開啟一個通訊端串連。然後向監聽發送一個ping。監聽則以一個pong來響應。tnsping不能讓TNS連接字串中的其它參數生效,不能確定資料庫執行個體和資料庫服務的可用性。也不能確定諸如SID, SERVICE_NAME或INSTANCE_NAME等參數是否有效。可見。tnsping從來都不是多麼高端的工具,非常多人用它測試TNS連接字串,它僅僅是被用爛了而已。

instant client沒有tnsping工具?不要緊。由於你能夠用telnet <host> <port>取代tnsping。 串連測試成功之後。你再斷開telnet就可以。

前面一直在說tnsping讀取HOST和PORT參數。問題來了:這些參數在哪?要解決問題,就不得不提一個至關重要的設定檔:tnsnames.ora。

tnsnames.ora是一種設定檔,它定義了建立到一個資料庫的串連所需的各種地址。

假設你安裝了完整的oracleclient,該設定檔應該位於ORACLE_HOME\NETWORK\ADMIN檔案夾下。其形式例如以下:

<addressname> = (DESCRIPTION =   (ADDRESS_LIST =     (ADDRESS = (PROTOCOL = TCP)(Host = <hostname>)(Port = <port>))   ) (CONNECT_DATA =   (SERVICE_NAME = <sid>) ))

一個完整的tnsnames.ora示範範例例如以下:

ORA11 = (DESCRIPTION =    (ADDRESS_LIST =     (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))   ) (CONNECT_DATA =   (SERVICE_NAME = ORA11) ))

當然。假設你安裝的是instant client,這個檔案是不存在的,只是,你全然能夠自建一個tnsnames.ora放在特定檔案夾下。tnsnames.ora在用戶端和server端各有一份。這些內容我參考了http://orafaq.com/wiki/Tnsnames.ora,上面還有更加具體的說明。那麼,tnsnames.ora究竟起了什麼作用?

事實上。這個設定檔有點像我們電腦裡面的hosts檔案。

這個檔案實際上也是一個設定檔,作用就是把一些經常使用網址的網域名稱和它的IP地址建立映射,當你在瀏覽器中輸入一個網址網域名稱,按下斷行符號,系統首先自己主動從hosts檔案裡尋找該網域名稱相應的IP地址,找到後就開啟該地址相應的網頁;假設沒找到相應的IP地址,系統就把網址提交到DNS網域名稱解析server上,由server解析出相應的IP地址。

hosts檔案將便於記憶的網址解析為IP地址,tnsnames.ora則把便於記憶的TNS別名解析為連接字串。連接字串的格式通常為“(DISCRIPTION=(ADDRESS=<address details>)(CONNECT_DATA=<database details>)”。

對照上面給出的tnsnames.ora示範範例。能夠看出實際上tnsnames.ora正是包括了這個所謂的連接字串。所以,當你使用sqlplus遠程登入資料庫時,你能夠有兩種方式。

一種方式是把連接字串全然寫出來,例如以下所看到的:

sqlplus scott/[email protected]"(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP)(HOST=my-dev.mydomain.com)(PORT=1521)) (CONNECT_DATA= (SID=orcldev) (SERVER=dedicated)))"

還有一種是直接將TNS別名寫出來,以上面給出的tnsnames.ora為例:

sqlplus scott/[email protected]
顯然,另外一種方式更加簡單。尤其在你須要頻繁登入資料庫的時候。用設定檔無疑會讓你的效率大大提升,這個道理就像你為了編譯方便而寫makefile檔案是一樣的。

剛才說過,假設你安裝的是instant client,它不帶tnsping工具。沒關係,你僅僅要明確tnsping是幹什麼的即可。

其實,它僅僅做三件事:1.假設你指定了TNS別名,它將別名解析為連接字串(假設你登入時直接使用了完整的連接字串,則跳過此步驟);2.依據連接字串的HOST參數,測試你要串連的監聽器的IP地址。3.依據連接字串的PORT參數,測試你要串連的監聽器的對應port。

顯然,除了第1件事以外。第2,3件事你都能夠使用telnet <hostname> <port>取代。

instant client還有個不太方便的地方,剛才也提到過,就是它沒有內建tnsnames.ora檔案。只是,剛才也說過,你能夠自己建立一個tnsnames.ora檔案。

那麼。oracle用戶端如何找到這個檔案呢?這就須要你加入一個名為TNS_ADMIN的環境變數,儲存tnsnames.ora地址。系統會依據這個變數給出的地址找到相應的tnsnames.ora檔案。

最後簡單說一下ORACLE_HOME。這個變數表示oracle的安裝資料夾,也能夠表示一個指向oracle安裝資料夾的環境變數。

在windows下。假設想要查看當前的ORACLE_HOME,使用echo命令就可以。要想加入或者設定ORFACLE_HOME環境變數,使用set命令就可以。當然,在注冊表中也能夠找到ORACLE_HOME,可能位置是HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE。

更加詳細的內容能夠參考http://orafaq.com/wiki/ORACLE_HOME。

oracle instant client,tnsping,tnsnames.ora和ORACLE_HOME

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.