Oracle 網路配置用到的sqlnet.ora, tnsnames.ora, listener.ora檔案

lenx2000發表於2009-10-29

 

      listener.ora、tnsnames.ora和sqlnet.ora這3個檔案是關係oracle網路配置的3個主要檔案,都是放在$ORACLE_HOME\network\admin目錄下。其中listener.ora是和資料庫伺服器端相關,而tnsnames.ora和sqlnet.ora這2個檔案不僅僅關係到伺服器端,主要的還是和客戶端關係緊密。

一、客戶端設定
1.sqlnet.ora

透過這個檔案來決定怎樣找一個連線中出現的連線字串

示例檔案:
# sqlnet.ora Network Configuration File: F:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.

# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME, ONAMES, EZCONNECT)

#NAMES.DEFAULT_DOMAIN = oracle.com

內容說明:
      SQLNET.AUTHENTICATION_SERVICES= (NTS)----這個表示採用OS認證,在資料庫伺服器上,可以利用sqlplus / as sysdba。一般這個配置在windows上是ok的,在unix環境下可能會有問題,一般在unix下可以去掉這個配置。
      NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)----表示將首先利用tnsnames進行解析;如果tnsnames解析不到,將使用hostname解析;如果hostname解析不到,將採用onames進行解析;最後使用EZCONNECT解析。例如我們客戶端輸入:sqlplus zidi/zidi@changbai,那麼,客戶端就會首先在tnsnames.ora檔案中找orcl的記錄.如果沒有相應的記錄則嘗試把orcl當作一個主機名,透過網路的途徑去解析它的IP地址然後去連線這個IP上global_name=changbai這個例項,當然我這裡orcl並不是一個主機名。
      被註釋掉的NAMES.DEFAULT_DOMAIN = changbai.com----表示採用預設的域名為changbai.com,在tnsnames.ora中如果配置對應的解析,如果原來的資料庫別名是oralocal(即網路服務名),那麼,當啟用這個引數後,在tnsnames中的配置要改成oralocal.changbai.com。在使用tnsping時或者sqlplus登入時,只需寫前面的別名,系統會自動加上後面的域名來進行解析。    

2.tnsnames.ora
這個檔案放在客戶端機器上,記錄客戶端訪問資料庫的本地配置,其實就是定義網路服務,只有當sqlnet.ora中有"NAMES.DIRECTORY_PATH= (TNSNAMES)"這樣的字樣時,也就是客戶端解析連線字串的順序中有TNSNAMES時,才會嘗試使用這個檔案。
示例檔案:
# tnsnames.ora Network Configuration File: F:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

HUINAMN =網路服務名
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 108.108.108.108)(PORT = 1521))訪問資料庫使用的協議,資料庫計算機的主機名或IP地址,資料庫的埠號
)
(CONNECT_DATA =
(SID = HN)資料庫例項名,前提是所連線的資料庫是Oracle8或更低版本
)
)
CHANGBAI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 208.208.208.208)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CB)資料庫服務名,即全域性資料庫名
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)使用專用伺服器模式去連線,這需要跟伺服器的模式匹配,如果沒有就根據伺服器的模式自動調節
(SERVICE_NAME = orcl)
)
)

二、伺服器端設定listener.ora
      它是listener監聽器程式的配置檔案。關於listener程式就不多說了,接受遠端對資料庫的接入申請並轉交給oracle的伺服器程式。所以如果不是使用的遠端的連線,listener程式就不是必需的,同樣的如果關閉listener程式並不會影響已經存在的資料庫連線。
  示例檔案:
# listener.ora Network Configuration File: F:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =這裡定義LISTENER程式為哪個例項提供服務
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = F:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)

LISTENER =監聽器的名字,一臺資料庫可以有不止一個監聽器
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))監聽器監聽的協議,IP,埠等
(ADDRESS = (PROTOCOL = TCP)(HOST = dabeng)(PORT = 1521))
)
)
      上面的例子是一個最簡單的例子,但也是最普遍的。一個listener程式為一個資料庫例項(SID)提供服務。
三、總結
      上面說到的三個檔案都可以透過圖形的配置工具來完成配置:Database Configuration Assistant,Net Configuration Assistant  
      具體的配置可以嘗試一下,然後來看一下配置檔案,這樣一來總體結構就有了,是當你輸入sqlplus zidi/zidi@changbai的時候
      1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME
      2. 則查詢tnsnames.ora檔案,從裡邊找orcl的記錄,並且找到主機名,埠和service_name
      3. 如果listener程式沒有問題的話,建立與listener程式的連線。
      4. 根據不同的伺服器模式如專用伺服器模式或者共享伺服器模式,listener採取接下去的動作。預設是專用伺服器模式,沒有問題的話客戶端就連線上了資料庫的server process。
      5. 這時候網路連線已經建立,listener程式的歷史使命也就完成了。
換個角度理解:
      changbai是我們連線遠端資料庫用到的服務命名,但是最終必須轉化為host:port:servide_name這樣的連線字串,而這個轉化可以理解為是翻譯的過程,而要想翻譯成功,則必須選擇好翻譯方法,那麼sqlnet.ora就是我們用來選擇翻譯方法的,其中的NAMES.DIRECTORY_PATH= (TNSNAMES) 就是我們選擇的命名解析方法; tnsnames.ora是翻譯方法中的一種----本地命名解析方法的配置檔案,就好像我們選擇了查字典方法,這個檔案就是我們的字典一樣裡面存放著所有服務命名對應的連線字串;至於listener.ora則是負責接受我們請求的負責任人----連線地址配置檔案,裡面包括了連線負責人的連線地址,也放著經過他允許可以連線的資料庫資訊。這樣就構成了Oracle的網路架構。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11134849/viewspace-617727/,如需轉載,請註明出處,否則將追究法律責任。

相關文章