一、sqlnet.ora
示例:.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進程。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
