sqlnet.ora、tnsnames.ora、listener.ora配置詳解

一、sqlnet.ora

sqlnet.ora 用在oracle client端,用於配置連接服務端oracle的相關參數。
1).NAMES.DEFAULT_DOMAIN:域名domain定義,在你用sqlplus訪問數據庫的時候,會在tns別名後面加上".domain"

示例:.NAMES.DEFAULT_DOMAIN=.com

在客戶端執行命令:sqlplus username/password@local_dev的時候,會出現如下錯誤信息:

"ORA-12154: TNS: 無法處理服務名"或者"ORA-12154: TNS:could not resolve service name"這樣的錯誤信息。
因爲sqlplus username/password@orcl的時候,將tns別名“orcl”轉換成了“orcl.com”,所以orcl.com在tnsnames.ora中找不到,就報錯了。

修改tnsnames.ora中的定義如下:
ORCL.com =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.147)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
再執行sqlplus username/password@orcl連接成功。

2)NAMES.DIRECTORY_PATH:定義了在客戶端連接數據庫時,採用什麼樣的匹配方式。

示例:NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

那麼在客戶端執行sqlplus username/password@local_dev連接數據庫的時,首先採用tnsnames.ora的別名配置連接數據庫;如果連接上;再採用ONAMES進行解析,最後採用主機名進行解析。
ONAMES表示Oracle使用自己的名稱服務器(Oracle Name Server)來解析,目前Oracle建議使用輕量目錄訪問協議LDAP來取代ONAMES;HOSTNAME表示使用host文件,DNS,NIS等來解析;

3)SQLNET.AUTHENTICATION_SERVICES:定義登錄數據庫的認證方式,這個參數默認沒有設置。
示例:SQLNET.AUTHENTICATION_SERVICES=(NONE,NTS)

NONE表示Oracle數據庫身份驗證,NTS表示操作系統身份驗證,兩種方式可以並用,先後順序表明驗證的優先方式。

4)tcp.validnode_checking=yes:表示啓用客戶端的IP檢查,非法的IP將被拒絕訪問Oracle。

5)tcp.invited_nodes=(IP1,IP2,IP3...):表示允許哪些IP訪問Oracle。

6)tcp.excluded_nodes=(IP1,IP2,IP3...):表示拒絕哪些IP訪問Oracle。

二、tnsnames.ora

tnsnames.ora 用在oracle client端,用戶配置連接數據庫的別名參數,就像系統中的hosts文件一樣。提供了客戶端連接某個數據庫的詳細信息,主機地址,端口,數據庫實例名等。
示例:
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.147)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
PROTOCOL參數一般是TCP,可以根據服務器情況選擇一種配置方式。

HOST 一般是ip地址,如果是主機名,則應該在客戶端系統的host文件上配好主機名和ip地址的映射關係。

PORT 標準是1521,根據服務器端的監聽端口而定。

SERVICE_NAME 就是數據庫的服務名。

三、listener.ora

tnslsnr進程是監聽、並接受遠程連接數據庫請求的監聽進程。listener.ora是tnslsnr進程的配置文件,監聽的參數都是從該配置文件中讀取,該文件位於服務端。如果你只需要在本地連接數據庫,不接受遠程連接,那麼也不需要啓動tnslsnr進程,也不需要去維護listener.ora文件。
啓動監聽進程的命令,在命令模式下,執行lsnrctl start命令就啓動了監聽進程tnslsnr。

示例:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /oracle/product/10.2.0/db_1)
      (SID_NAME = orcl)
    )
    (SID_DESC =
      (ORACLE_HOME = /oracle/product/10.2.0/db_1/)
      (SID_NAME = eas)
    )
    
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.147)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

LISTENER部分包含協議地址列表,每個實例一個入口。

SID_LIST_LISTENER部分標識全局數據庫名稱、標識監聽程序正在服務的每個實例的Oracle軟件主目錄以及實例或SID。

當你執行命令sqlplus username/password@tnsname時,一般處理過程如下:
1) 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME,或者hostname。
2) 則查詢tnsnames.ora文件,從裏邊找tnsname的記錄,並且找到主機名,端口和service_name。
3) 如果listener進程沒有問題的話,建立與listener進程的連接。
4) 根據不同的服務器模式如專用服務器模式或者共享服務器模式,listener採取接下去的動作。默認是專用服務器模式,沒有問題的話客戶端就連接上了數據庫的server process。
5) 這時候網絡連接已經建立,listener進程的歷史使命也就完成了。

幾種連接數據庫用到的命令形式:
1)sqlplus "/ as sysdba" 這是典型的操作系統認證,不需要listener進程,數據庫即使不可用也可以登錄。
2)sqlplus username/password 不需要listener進程,登錄本機數據庫,數據庫實例啓動即可。
3)sqlplus username/password@tnsname需要listener進程,最常見的遠程登錄模式,需要啓動數據庫實例和listener進程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章