標籤:
在oracle安裝目錄$HOME/network/admin下,,經常看到sqlnet.ora tnsnames.ora listener.ora這三個檔案,除了tnsnames.ora,其他兩個檔案詳細的用途很多人都不太瞭解。1. sqlnet.ora 用在oracle client端,用於配置串連服務端oracle的相關參數.2. tnsnames.ora 用在oracle client端,使用者配置串連資料庫的別名參數,就像系統中的hosts檔案一樣。3. listener.ora 用在oracle server端,配置oracle服務端程式的監聽辦法,比如限制某些ip等參數。在安裝目錄$HOME/network/admin/samples下,會看到如上上個檔案的樣本檔案,裡面會有相關參數的說明和用法,如果遇到什麼問題,大家可以對照這些樣本檔案中相關參數的說明進行解決。如果串連資料庫出了什麼問題,在保證網路出正常,沒有防火牆幹擾的情況下,尋找問題的步驟是:1)在用戶端順序檢查sqlnet.ora,tnsnames.ora是有問題。2)在伺服器端檢查listener.ora配置,並且保證監聽程式啟動,資料庫服務載入。
1. 認識sqlnet.ora 下面只講述幾個常用參數配置,詳細的資料,大家可以查看樣本sqlnet.ora得到。sqlnet.ora可以刪除,這樣在oracle用戶端串連資料庫的時候,預設採用tnsnames.ora中的配置。1).NAMES.DEFAULT_DOMAIN網域名稱domain定義,在你用sqlplus訪問資料庫的時候,會在tns別名後面加上".domain"樣本:sqlnet.ora中:NAMES.DEFAULT_DOMAIN=comtnsnames.ora中的tns定義如下:local_dev = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = linuxdb) ))在用戶端執行命令:sqlplus username/[email protected]_dev[/email]的時候,會出現如下錯誤資訊:"ORA-12154: TNS: 無法處理服務名"或者"ORA-12154: TNS:could not resolve service name"這樣的錯誤資訊。因為sqlplus username/[email protected]_dev[/email]的時候,將tns別名“local_dev”轉換成了“local_dev.com”,所以local_dev.com在tnsnames.ora中找不到,就報錯了。修改tnsnames.ora中的定義如下:local_dev.com = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = linuxdb) ))再執行sqlplus [email=username/[email protected]_dev]username/[email protected]_dev[/email],串連成功。2)NAMES.DIRECTORY_PATH定義了在用戶端串連資料庫時,採用什麼樣的匹配方式。樣本sqlnet.ora內容如下:NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)那麼在用戶端執行sqlplus username/[email protected]_dev[/email]串連資料庫的時首先採用tnsnames.ora的別名配置串連資料庫,若連不上再採用ONAMES進行解析,最後採用主機名稱進行解析。ONAMES表示Oracle使用自己的名稱伺服器(Oracle Name Server)來解析,目前Oracle建議使用輕量目錄訪問協議LDAP來取代ONAMES;HOSTNAME表示使用host檔案,DNS,NIS等來解析;3)SQLNET.AUTHENTICATION_SERVICES定義登入資料庫的認證方式。NONE表示Oracle資料庫身分識別驗證,NTS表示作業系統身分識別驗證,兩種方式可以並用。 可以設定成SQLNET.AUTHENTICATION_SERVICES=(NONE,NTS)先後順序表明驗證的優先方式。樣本sqlnet.ora內容如下:SQLNET.AUTHENTICATION_SERVICES=(NONE)在命令列上執行如下命令:sqlplus "/ as sysdba"時,執行失敗。提示錯誤資訊ORA-01031: insufficient privileges這個參數預設沒有設定。
2. 認識tnsnames.ora 提供了用戶端串連某個資料庫的詳細資料,主機地址,連接埠,資料庫執行個體名等。下面給出一個樣本來說明問題:local_dev = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = linuxdb) ))PROTOCOL參數一般是TCP,可以根據伺服器情況選擇一種配置方式。HOST 一般是ip地址,也可以是主機名稱,這個主機名稱字只要能用ping hostname通就行,一般在用戶端系統的host檔案上配好主機名稱和ip地址的映射關係。PORT 標準是1521,根據伺服器端的監聽連接埠而定。SERVICE_NAME 就是資料庫的服務名,用system使用者登陸後,sqlplus> show parameter service_name命令查看。
3. 認識listener.ora tnslsnr進程是監聽、並接受遠端連線資料庫請求的監聽進程,listener.ora是tnslsnr進程的設定檔,監聽的參數都是從該設定檔中讀取。該檔案位於服務端,如果只安裝oracle用戶端,一般不存在這個檔案。如果你只需要在本地串連資料庫,不接受遠端連線,那麼也不需要啟動tnslsnr進程,也不需要去維護listener.ora檔案。啟動監聽進程的命令,在命令模式下,執行lsnrctl start命令就啟動了監聽進程tnslsnr。監聽可以有多個,也就是說,可以同時監聽多個oracle執行個體,可以在listener.ora中定義多個監聽器進行監聽。下面給出一個簡單的樣本listener.ora中的內容:LISTENER_CSB = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.14)(PORT = 1621)) ) ) )SID_LIST_LISTENER_CSB = (SID_LIST = (SID_DESC = (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db) (SID_NAME = zjdevcsb) ) )#############################################LISTENER_CSA = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.14)(PORT = 1521)) ) ) )SID_LIST_LISTENER_CSA = (SID_LIST = (SID_DESC = (ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db) (SID_NAME = zjdevcsa) ) )在上面:1). LISTENER_CSB,LISTENER_CSA定義了監聽器的兩個監聽名字,和這兩個監聽器監聽的參數:ip,port等。2). SID_LIST_LISTENER_CSB,SID_LIST_LISTENER_CSA定義了兩個監聽服務,服務名字格式SID_LIST_<lsnrname>,lsnrname就是上面兩個監聽器的名字,指定了這個服務將會接受的服務將提交給那個監聽器;監聽的執行個體名zjdevcsb,zjdevcsa是在tnsnames.ora中需要指定的SERVICE_NAME參數對應。
Oracle設定檔