一、sqlnet.ora
示例:.NAMES.DEFAULT_DOMAIN=.com
在客戶端執(zhí)行命令:sqlplus username/password@local_dev的時候,會出現(xiàn)如下錯誤信息:
"ORA-12154: TNS: 無法處理服務(wù)名"或者"ORA-12154: TNS:could not resolve service name"這樣的錯誤信息。
因為sqlplus username/password@orcl的時候,將tns別名“orcl”轉(zhuǎn)換成了“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)
? ? )
? )
再執(zhí)行sqlplus username/password@orcl連接成功。
2)NAMES.DIRECTORY_PATH: 定義了在客戶端連接數(shù)據(jù)庫時,采用什么樣的匹配方式。
示例:NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
那么在客戶端執(zhí)行sqlplus username/password@local_dev連接數(shù)據(jù)庫的時,首先采用tnsnames.ora的別名配置連接數(shù)據(jù)庫;如果連接上;再采用ONAMES進行解析,最后采用主機名進行解析。
ONAMES表示Oracle使用自己的名稱服務(wù)器(Oracle Name Server)來解析,目前Oracle建議使用輕量目錄訪問協(xié)議LDAP來取代ONAMES;HOSTNAME表示使用host文件,DNS,NIS等來解析;
3)SQLNET.AUTHENTICATION_SERVICES:
定義登錄數(shù)據(jù)庫的認證方式,這個參數(shù)默認沒有設(shè)置。
示例:SQLNET.AUTHENTICATION_SERVICES=(NONE,NTS)
NONE表示Oracle數(shù)據(jù)庫身份驗證,NTS表示操作系統(tǒng)身份驗證,兩種方式可以并用,先后順序表明驗證的優(yōu)先方式。
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端,用戶配置連接數(shù)據(jù)庫的別名參數(shù),就像系統(tǒng)中的hosts文件一樣。提供了客戶端連接某個數(shù)據(jù)庫的詳細信息,主機地址,端口,數(shù)據(jù)庫實例名等。示例:
ORCL =
? (DESCRIPTION =
? ? (ADDRESS_LIST =
? ? ? (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.147)(PORT = 1521))
? ? )
? ? (CONNECT_DATA =
? ? ? (SERVICE_NAME = orcl)
? ? )
? )
PROTOCOL參數(shù)一般是TCP,可以根據(jù)服務(wù)器情況選擇一種配置方式。
HOST 一般是ip地址,如果是主機名,則應(yīng)該在客戶端系統(tǒng)的host文件上配好主機名和ip地址的映射關(guān)系。
PORT 標準是1521,根據(jù)服務(wù)器端的監(jiān)聽端口而定。
SERVICE_NAME 就是數(shù)據(jù)庫的服務(wù)名。
三、listener.ora
tnslsnr進程是監(jiān)聽、并接受遠程連接數(shù)據(jù)庫請求的監(jiān)聽進程。listener.ora是tnslsnr進程的配置文件,監(jiān)聽的參數(shù)都是從該配置文件中讀取,該文件位于服務(wù)端。如果你只需要在本地連接數(shù)據(jù)庫,不接受遠程連接,那么也不需要啟動tnslsnr進程,也不需要去維護listener.ora文件。啟動監(jiān)聽進程的命令,在命令模式下,執(zhí)行l(wèi)snrctl start命令就啟動了監(jiān)聽進程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部分包含協(xié)議地址列表,每個實例一個入口。
SID_LIST_LISTENER部分標識全局數(shù)據(jù)庫名稱、標識監(jiān)聽程序正在服務(wù)的每個實例的Oracle軟件主目錄以及實例或SID。
當你執(zhí)行命令sqlplus username/password@tnsname時,一般處理過程如下:
1) 查詢sqlnet.ora看看名稱的解析方式,發(fā)現(xiàn)是TNSNAME,或者hostname。
2) 則查詢tnsnames.ora文件,從里邊找tnsname的記錄,并且找到主機名,端口和service_name。
3) 如果listener進程沒有問題的話,建立與listener進程的連接。
4) 根據(jù)不同的服務(wù)器模式如專用服務(wù)器模式或者共享服務(wù)器模式,listener采取接下去的動作。默認是專用服務(wù)器模式,沒有問題的話客戶端就連接上了數(shù)據(jù)庫的server process。
5) 這時候網(wǎng)絡(luò)連接已經(jīng)建立,listener進程的歷史使命也就完成了。
幾種連接數(shù)據(jù)庫用到的命令形式:
1)sqlplus "/ as sysdba" 這是典型的操作系統(tǒng)認證,不需要listener進程,數(shù)據(jù)庫即使不可用也可以登錄。
2)sqlplus username/password 不需要listener進程,登錄本機數(shù)據(jù)庫,數(shù)據(jù)庫實例啟動即可。
3)sqlplus username/password@tnsname需要listener進程,最常見的遠程登錄模式,需要啟動數(shù)據(jù)庫實例和listener進程。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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