oracle instant client,tnsping,tnsnames.ora和ORACLE_HOME,oracletnsping
前段時間要遠端連線oracle資料庫,但是又不想在自己電腦上完整安裝oracle用戶端,於是到oracle官網下載了輕量級用戶端instant client。這玩意沒有圖形介面,全靠sqlplus遠端連線伺服器,所以不佔地方,正好滿足我這種追求“簡單就好”的強迫症患者需求。
但是呢,可能是伺服器那邊沒開監聽連接埠,我在自己的機子上嘗試了各種配置,包括tnsnames.ora,sqlnet.ora等,遠端連線均告失敗。為了排查問題,我先ping了一下伺服器的外網地址,發現沒問題。網上說,光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是一種設定檔,它定義了建立到一個資料庫的串連所需的各種地址。如果你安裝了完整的oracle用戶端,該設定檔應該位於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在用戶端和伺服器端各有一份。這些內容我參考了http://orafaq.com/wiki/Tnsnames.ora,上面還有更加詳細的說明。那麼,tnsnames.ora到底起了什麼作用?
其實,這個設定檔有點像我們電腦裡面的hosts檔案。這個檔案實際上也是一個設定檔,作用就是把一些常用網址的網域名稱和它的IP地址建立映射,當你在瀏覽器中輸入一個網址網域名稱,按下斷行符號,系統首先自動從hosts檔案中尋找該網域名稱對應的IP地址,找到後就開啟該地址對應的網頁;如果沒找到對應的IP地址,系統就把網址提交到DNS網域名稱解析伺服器上,由伺服器解析出相應的IP地址。
hosts檔案將便於記憶的網址解析為IP地址,tnsnames.ora則把便於記憶的TNS別名解析為連接字串。連接字串的格式通常為“(DISCRIPTION=(ADDRESS=<address details>)(CONNECT_DATA=<database details>)”。對比上面給出的tnsnames.ora樣本,可以看出實際上tnsnames.ora正是包含了這個所謂的連接字串。所以,當你使用sqlplus遠程登入資料庫時,你可以有兩種方式。一種方式是把連接字串完全寫出來,如下所示:
sqlplus scott/tiger@"(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP)(HOST=my-dev.mydomain.com)(PORT=1521)) (CONNECT_DATA= (SID=orcldev) (SERVER=dedicated)))"
另一種是直接將TNS別名寫出來,以上面給出的tnsnames.ora為例:
sqlplus scott/tiger@ORA11
顯然,第二種方式更加簡單。尤其在你需要頻繁登入資料庫的時候,用設定檔無疑會讓你的效率大大提升,這個道理就像你為了編譯方便而寫makefile檔案是一樣的。
剛才說過,如果你安裝的是instant client,它不帶tnsping工具,沒關係,你只要明白tnsping是幹什麼的就行。事實上,它只做三件事:1.如果你指定了TNS別名,它將別名解析為連接字串(如果你登入時直接使用了完整的連接字串,則跳過此步驟);2.根據連接字串的HOST參數,測試你要串連的監聽器的IP地址;3.根據連接字串的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用戶端instantclient_11_2\network\admin這個目錄下的tnsnamesora檔案內容各個屬性是什
WIN7上怎安裝Oracle用戶端?需要通過配置tnsnamesora,使用P/L sql去串連其他資料庫
如下方法
Windows XP Vista Win7中安裝Oracle用戶端
1.從Oracle官方下載“Instant Client Package”的軟體,較好的實現了Oracle用戶端綠化的解決方案。
為:www.oracle.com/...t.html
可下載的程式包有:
下載程式包:
instantclient-basic-win32-11.1.0.x.0.zip (目前有版本: 11.1.0.6.0 和 11.1.0.7.0)
或
instantclient-basic-win32-10.2.0.x.zip (目前有版本: 10.2.0.3 和 10.2.0.4)
或
instantclient-basic-win32-10.1.0.5-20060419.zip
2.解壓到安裝目錄,例如:D:\ORA10 下,然後在這個目錄下建立network/admin 兩層檔案夾,然後在admin內建立 tnsnames.ora檔案,
輸入格式如下:
ZTRIOA_192.168.0.17 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.17)(PORT = 1521))
)
(CONNECT_DATA = (SID = ZTRIOA)(SERVER = DEDICATED))
)
這雷根據自己的實際情況進行修改,注意中間的空格問題,如果空格多了或少了都會出現錯誤的。
3.配置系統的環境變數
在 Path 變數值最前面寫上: D:\ORA10;
並建立變數:變數名為:oracle_home 變數值為:D:\ORA10
4.安裝 PLSQL Developer 7.1或其它版本吧。注意安裝時不要安裝在帶“(x86)”的目錄內,容易出錯。
5.運行“PLSQL Developer”吧,串連一下試試,正常情況下就可以串連成功了。
處理PLSQL Developer串連後出現亂碼情況
問題描述:使用Oracle綠色版用戶端串連到其它Oracle資料庫後,查詢出來的資訊出現亂碼情況。
解決方案:
6.開啟 PLSQL Developer 安裝目錄下,看到有PLSQLDev.exe的目錄,
在PLSQL Developer檔案夾內建立“PLSql_run.bat”檔案,在該檔案中輸入下面內容:
---------------------------------------------------------------------------------------------
set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
PLSQLDev.exe
---------------------------------------------------------------------------------------------
7.每次啟動時請使......餘下全文>>