TNS簡單介紹與應用
Oracle中TNS的完整定義:transparence Network Substrate透明網路底層,監聽服務是它重要的一部分,不是全部,不要把TNS當作只是監聽器。
TNS是Oracle Net的一部分,專門用來管理和配置Oracle資料庫和客戶端連接的一個工具,在大多數情況下客戶端和資料庫要通訊,必須配置TNS,當然在少數情況下,不用配置TNS也可以連接Oracle資料庫,例如透過JDBC。如果透過TNS連接Oracle,那麼客戶端必須安裝Oracle client程式。
Oracle當中,如果想存取某個伺服器,必須要設定TNS,它不像SQL SERVER那樣在客戶端自動列舉出在區域網路內所有的線上伺服器,只需在客戶端選擇所需的伺服器,然後使用帳號與密碼登入即可。而Oracle不能自動列舉出網內的伺服器,需要透過讀取TNS設定檔才能列出經過設定的伺服器名稱。
設定檔名稱一般為:tnsnames.ora,預設路徑:%ORACLE_HOME%networkadmintnsnames.ora
上圖中的CGDB和STDCG就是一個對應的TNS,HOST是指向區域伺服器的網路計算機名稱也是可以的。透過客戶端Net Manager建立一個連接到資料庫伺服器的連線服務時,實際上就是在tnsnames.ora檔案中增加了一個TNS的內容。
TNS的詳細設定檔
TNS的設定檔包括伺服器端和客戶端兩部分。伺服器端有listener.ora、sqlnet.ora和tnsnames.ora,如果透過OCM(Oracle Connection Manage)和網域服務管理客戶端連接,伺服器端可能還包括cman.ora等檔案;客戶端有tnsnames.ora,sqlnet .ora。 Oracle所有的TNS設定檔的預設路徑:%ORACLE_HOME%networkadmin
listener.ora:監聽器設定文件,成功啟動後是駐留在伺服器端的一個服務。監聽器是用來偵聽客戶端的連線請求以及建立客戶端和伺服器端連線通道的服務程式。預設Oracle在1521連接埠上偵聽客戶端連線請求。
sqlnet.ora:用來管理和約束或限制tns連線的配置,透過在該檔案中設定一些參數,可以管理TNS連線。根據參數作用的不同,需要分別在伺服器和客戶端配置.。
tnsnames.ora:設定客戶端到伺服器端的連線服務,包括客戶端要連線到的伺服器和資料庫的設定資訊。
TNS設定
可以透過Oracle Net Configuretion Assitant設定TNS,也可以手動設定。首先在Oracle伺服器端安裝完成之後,應該先著手設定LISTENER,LISTENER是進行Oracle通訊的首要元件,緊接著在客戶端安裝Oracle client,同時設定tnsnames.ora檔案。
首先監聽器包含兩個部分:Oracle要監聽的位址、連接埠、通訊協定;Oracle要監聽的資料庫實例,非RAC環境下,LISTENER只能監聽本伺服器的位址和實例,RAC環境下,LISTENER還可以監聽遠端伺服器。每個資料庫最少要配置一個監聽器。 (註:RAC環境,指的是Oracle伺服器叢集配置的環境)
LISTENER部分配置了Oracle要監聽的位址和連接埠資訊;該檔案中還會包含SID_LIST_LISTENER部分,這部分配置了Oracle需要監聽的實例。 (註:在上述截圖中並沒有SID_LIST_LISTENER這一部分,這是因為Oracle自9i版本引入了動態監聽服務註冊,在資料庫啟動時,會自動註冊當前資料庫實例到監聽列表,所以無需配置SID_LIST_LISTENER部分了)
HOST參數可以是Oracle伺服器主機名稱,也可以是對應的IP位址。在多IP的伺服器上可以設定listener同時監聽多個位址,例如下面的設定:LISTENER= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.11)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.11) (PORT=1521))) ),或可設定多個監聽器,分別監聽不同的IP位址。
一般說的TNS配置其實就是對tnsnames.ora檔案的配置,tnsnames.ora有客戶端的配置,也有伺服器端的配置。客戶端和伺服器端配置的差異是因為伺服器端的配置跟LISTENER的配置相關。下面是一個簡單的設定範例:
tnsnames.ora也包括兩部分,ADDRESS_LIST 部分包含了Oracle資料庫伺服器的監聽位址信息,也就是要告訴TNS資料庫可透過這個位址和CLIENT進行通訊;CONNECT_DATA 定義了CLIENT要連接的資料庫,以及資料庫的連接方式,(專用或共享)。
在一個多IP環境中,TNS也可以配置多個遠端IP位址:CGDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.55)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.56)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = CGDB) (SERVER = DEDICATED) ) )
sqlnet.ora是個很重要的配置,它可以控制和配置,它可以控制和配置管理Oracle連線的屬性,根據參數作用的不同決定在客戶端配置還是在server端配置。 sqlnet.ora的配置是全域性的,也就說sqlnet.ora的配置是對所有的連線起作用,如果想對某個特殊的連線或服務進行約束或限制,可以 在TNS配置對應參數。
更多oracle資料庫tns設定方法詳解相關文章請關注PHP中文網!