標籤:
listener.ora、tnsnames.ora和sqlnet.ora這3個檔案是關係oracle網路設定的3個主要檔案,都是放在$ORACLE_HOME\network\admin目錄下。其中listener.ora是和資料庫伺服器端相關,而tnsnames.ora和sqlnet.ora這2個檔案不僅僅關係到伺服器端,主要的還是和用戶端關係緊密。
一、用戶端設定
1.sqlnet.ora
通過這個檔案來決定怎樣找一個串連中出現的連接字串orcl
SQL>conn sys/[email protected] as sysdba
樣本檔案:
# sqlnet.ora Network Configuration File: F:\oracle\product\10.2.0\db_1\network\admi\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解析。例如我們用戶端輸入:sqlplustest/[email protected],那麼,用戶端就會首先在tnsnames.ora檔案中找orcl的記錄.如果沒有相應的記錄則嘗試把orcl當作一個主機名稱,通過網路的途徑去解析它的IP地址然後去串連這個IP上global_name=orcl這個執行個體,當然我這裡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或更低版本
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED) //使用專用伺服器模式去串連,這需要跟伺服器的模式比對,如果沒有就根據伺服器的模式自動調節
(SERVICE_NAME = orcl) //資料庫服務名,即全域資料庫名,SQL>show parameter service_name查看
)
)
二、伺服器端設定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 =/u01/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
---------------靜態註冊orcl只需在此加入下面內容-----------
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME =/u01/oracle/product/10.2.0/db_1)
(SID_NAME = orcl)
)
----------------------------------------------------
)
LISTENER = //監聽器的名字,一台資料庫可以有不止一個監聽器
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dabeng)(PORT = 1521)) //監聽器監聽的協議,IP,連接埠等
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
)
上面的例子是一個最簡單的例子,但也是最普遍的。一個listener進程為一個資料庫執行個體(SID)提供服務。
======================
配置動態監聽:在資料庫中設定參數local_listener,instance_name和service_names三個參數,並寫入spfile中,然後重新啟動資料庫。
SQL> alter system set local_listener=‘(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.80.128)(PORT = 1521))‘ scope=spfile;
SQL> alter system set instance_name=‘orcl‘ scope=spfile;
SQL> alter system set service_names=‘orcl‘ scope=spfile;
SQL> shutdown immediate
三、總結
上面說到的三個檔案都可以通過圖形的組態工具來完成配置:Database Configuration Assistant,Net Configuration Assistant
$ netca //開啟圖形化介面
或者用 $ netmgr
profile 配置的是sqlnet.ora也就是名稱解析的方式
service name 配置的是tnsnames.ora檔案
listeners配置的是listener.ora檔案,即監聽器進程
具體的配置可以嘗試一下,然後來看一下設定檔,這樣一來總體結構就有了,是當你輸入SQL>sqlplustest/[email protected]的時候
1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME
2. 則查詢tnsnames.ora檔案,從裡邊找orcl的記錄,並且找到主機名稱,連接埠和service_name
3. 如果listener進程沒有問題的話,建立與listener進程的串連。
4. 根據不同的伺服器模式如專用伺服器模式或者共用伺服器模式,listener採取接下去的動作。預設是專用伺服器模式,沒有問題的話用戶端就串連上了資料庫的server process。
5. 這時候網路連接已經建立,listener進程的曆史使命也就完成了。
換個角度理解:
orcl是我們串連遠端資料庫用到的服務命名,但是最終必須轉化為host:port:servide_name這樣的串連字串,而這個轉化可以理解為是翻譯的過程,而要想翻譯成功,則必須選擇好翻譯方法,那麼sqlnet.ora就是我們用來選擇翻譯方法的,其中的NAMES.DIRECTORY_PATH= (TNSNAMES) 就是我們選擇的命名解析方法; tnsnames.ora是翻譯方法中的一種----本地命名解析方法的設定檔,就好像我們選擇了查字典方法,這個檔案就是我們的字典一樣裡面存放著所有服務命名對應的串連字串;至於listener.ora則是負責接受我們請求的負責任人----串連地址設定檔,裡麵包括了串連負責人的串連地址,也放著經過他允許可以串連的資料庫資訊。這樣就構成了Oracle的網路架構
Oracle的網路監聽配置