ORACLE网络连接配置与文件:listener.ora、sqlnet.ora、tnsnames.ora
【轉(zhuǎn)自】http://www.chinaunix.net/jh/19/594396.html
?
最近看到好多人說(shuō)到tns或者數(shù)據(jù)庫(kù)不能登錄等問(wèn)題,就索性總結(jié)了下面的東東。
首先來(lái)說(shuō)oracle的網(wǎng)絡(luò)結(jié)構(gòu),往復(fù)雜處說(shuō)能加上加密、LDAP等等。。這里不做討論,重點(diǎn)放在基本的網(wǎng)絡(luò)結(jié)構(gòu)也就是我們最常用的這種情況
三個(gè)配置文件
listener.ora、sqlnet.ora、tnsnames.ora??,都是放在$ORACLE_HOME/network/admin目錄下。
重點(diǎn):三個(gè)文件的作用和使用
#-----------------------
sqlnet.ora-----作用類(lèi)似于linux或者其他unix的nsswitch.conf文件,通過(guò)這個(gè)文件來(lái)決定怎么樣找一個(gè)連接中出現(xiàn)的連接字符串,
例如我們客戶(hù)端輸入
sqlplus?sys/oracle@orcl
假如我的sqlnet.ora是下面這個(gè)樣子
SQLNET.AUTHENTICATION_SERVICES=?(NTS)
NAMES.DIRECTORY_PATH=?(TNSNAMES,HOSTNAME)
那么,客戶(hù)端就會(huì)首先在tnsnames.ora文件中找orcl的記錄.如果沒(méi)有相應(yīng)的記錄則嘗試把orcl當(dāng)作一個(gè)主機(jī)名,通過(guò)網(wǎng)絡(luò)的途徑去解析它的ip地址然后去連接這個(gè)ip上GLOBAL_DBNAME=orcl這個(gè)實(shí)例,當(dāng)然我這里orcl并不是一個(gè)主機(jī)名
如果我是這個(gè)樣子
NAMES.DIRECTORY_PATH=?(TNSNAMES)
那么客戶(hù)端就只會(huì)從tnsnames.ora查找orcl的記錄
括號(hào)中還有其他選項(xiàng),如LDAP等并不常用。
#------------------------
Tnsnames.ora------這個(gè)文件類(lèi)似于unix?的hosts文件,提供的tnsname到主機(jī)名或者ip的對(duì)應(yīng),只有當(dāng)sqlnet.ora中類(lèi)似
NAMES.DIRECTORY_PATH=?(TNSNAMES)??這樣,也就是客戶(hù)端解析連接字符串的順序中有TNSNAMES是,才會(huì)嘗試使用這個(gè)文件。
例子中有兩個(gè),ORCL?對(duì)應(yīng)的本機(jī),SALES對(duì)應(yīng)的另外一個(gè)IP地址,里邊還定義了使用主用服務(wù)器還是共享服務(wù)器模式進(jìn)行連接,一句一句說(shuō)
#你所要連接的時(shí)候輸入得TNSNAME
ORCL?=
??(DESCRIPTION?=
(ADDRESS_LIST?=
#下面是這個(gè)TNSNAME對(duì)應(yīng)的主機(jī),端口,協(xié)議
??????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?127.0.0.1)(PORT?=?1521))
????)
(CONNECT_DATA?=
#使用專(zhuān)用服務(wù)器模式去連接需要跟服務(wù)器的模式匹配,如果沒(méi)有就根據(jù)服務(wù)器的模式
#自動(dòng)調(diào)節(jié)
(SERVER?=?DEDICATED)
#對(duì)應(yīng)service_name,SQLPLUS>;show?parameter?service_name;
#進(jìn)行查看
??????(SERVICE_NAME?=?orcl)
????)
??)
#下面這個(gè)類(lèi)似
SALES?=
??(DESCRIPTION?=
????(ADDRESS_LIST?=
??????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?192.168.188.219)(PORT?=?1521))
????)
????(CONNECT_DATA?=
??????(SERVER?=?DEDICATED)
??????(SERVICE_NAME?=?sales)
????)
??)
#----------------------
客戶(hù)端完了我們來(lái)看服務(wù)器端
listener.ora------listener監(jiān)聽(tīng)器進(jìn)程的配置文件
關(guān)于listener進(jìn)程就不多說(shuō)了,接受遠(yuǎn)程對(duì)數(shù)據(jù)庫(kù)的接入申請(qǐng)并轉(zhuǎn)交給oracle的服務(wù)器進(jìn)程。所以如果不是使用的遠(yuǎn)程的連接,listener進(jìn)程就不是必需的,同樣的如果關(guān)閉listener進(jìn)程并不會(huì)影響已經(jīng)存在的數(shù)據(jù)庫(kù)連接。
Listener.ora文件的例子
#listener.ora Network Configuration File:?#E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora
#?Generated?by?Oracle?configuration?tools.
#下面定義LISTENER進(jìn)程為哪個(gè)實(shí)例提供服務(wù)
#這里是ORCL,并且它對(duì)應(yīng)的ORACLE_HOME和GLOBAL_DBNAME
#其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做數(shù)據(jù)庫(kù)連接
SID_LIST_LISTENER?=
??(SID_LIST?=
????(SID_DESC?=
??????(GLOBAL_DBNAME?=?boway)
??????(ORACLE_HOME?=?E:/oracle/product/10.1.0/Db_2)
??????(SID_NAME?=?ORCL)
????)
??)
#監(jiān)聽(tīng)器的名字,一臺(tái)數(shù)據(jù)庫(kù)可以有不止一個(gè)監(jiān)聽(tīng)器
#再向下面是監(jiān)聽(tīng)器監(jiān)聽(tīng)的協(xié)議,ip,端口等,這里使用的tcp1521端口,并且使#用的是主機(jī)名
LISTENER?=????????
??(DESCRIPTION?=
????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?boway)(PORT?=?1521))
??)
上面的例子是一個(gè)最簡(jiǎn)單的例子,但也是最普遍的。一個(gè)listener進(jìn)程為一個(gè)instance(SID)提供服務(wù)。
監(jiān)聽(tīng)器的操作命令
$ORACLE_HOME/bin/lsnrctl?start,其他諸如stop,status等。具體敲完一個(gè)lsnrctl后看幫助。
上面說(shuō)到的三個(gè)文件都可以通過(guò)圖形的配置工具來(lái)完成配置
$ORACLE_HOME/netca???向?qū)问降?
$ORACLE_HOME/netmgr
本人比較習(xí)慣netmgr,
profile?配置的是sqlnet.ora也就是名稱(chēng)解析的方式
service?name?配置的是tnsnames.ora文件
listeners配置的是listener.ora文件,即監(jiān)聽(tīng)器進(jìn)程
具體的配置可以嘗試一下然后來(lái)看一下配置文件。
這樣一來(lái)總體結(jié)構(gòu)就有了,是
當(dāng)你輸入sqlplus?sys/oracle@orcl的時(shí)候
1. 查詢(xún)sqlnet.ora看看名稱(chēng)的解析方式,發(fā)現(xiàn)是TNSNAME
2. 則查詢(xún)tnsnames.ora文件,從里邊找orcl的記錄,并且找到主機(jī)名,端口和service_name
3. 如果listener進(jìn)程沒(méi)有問(wèn)題的話,建立與listener進(jìn)程的連接。
4. 根據(jù)不同的服務(wù)器模式如專(zhuān)用服務(wù)器模式或者共享服務(wù)器模式,listener采取接下去的動(dòng)作。默認(rèn)是專(zhuān)用服務(wù)器模式,沒(méi)有問(wèn)題的話客戶(hù)端就連接上了數(shù)據(jù)庫(kù)的server?process。
5. 這時(shí)候網(wǎng)絡(luò)連接已經(jīng)建立,listener進(jìn)程的歷史使命也就完成了。
#---------------
幾種連接用到的命令形式
1.sqlplus?/?as?sysdba 這是典型的操作系統(tǒng)認(rèn)證,不需要listener進(jìn)程
2.sqlplus?sys/oracle 這種連接方式只能連接本機(jī)數(shù)據(jù)庫(kù),同樣不需要listener進(jìn)程
3.sqlplus?sys/oracle@orcl?這種方式需要listener進(jìn)程處于可用狀態(tài)。最普遍的通過(guò)網(wǎng)絡(luò)連接。
以上連接方式使用sys用戶(hù)或者其他通過(guò)密碼文件驗(yàn)證的用戶(hù)都不需要數(shù)據(jù)庫(kù)處于可用狀態(tài),操作系統(tǒng)認(rèn)證也不需要數(shù)據(jù)庫(kù)可用,普通用戶(hù)因?yàn)槭菙?shù)據(jù)庫(kù)認(rèn)證,所以數(shù)據(jù)庫(kù)必需處于open狀態(tài)。
然后就是
#-------------
平時(shí)排錯(cuò)可能會(huì)用到的
1.lsnrctl?status查看服務(wù)器端listener進(jìn)程的狀態(tài)
LSNRCTL>;?help
The?following?operations?are?available
An?asterisk?(*)?denotes?a?modifier?or?extended?command:
start???????????????stop????????????????status
services????????????version?????????????reload
save_config?????????trace???????????????change_password
quit????????????????exit????????????????set*
show*
LSNRCTL>;?status
?:em11:?
2.tnsping?查看客戶(hù)端sqlnet.ora和tnsname.ora文件的配置正確與否,及對(duì)應(yīng)的服務(wù)器的listener進(jìn)程的狀態(tài)。
C:/>;tnsping?orcl
TNS?Ping?Utility?for?32-bit?Windows:?Version?10.1.0.2.0?-?Production?on?16-8月?-
2005?09:36:08
Copyright?(c)?1997,?2003,?Oracle.??All?rights?reserved.
Used?parameter?files:
E:/oracle/product/10.1.0/Db_2/network/admin/sqlnet.ora
Used?TNSNAMES?adapter?to?resolve?the?alias
Attempting?to?contact?(DESCRIPTION?=?(ADDRESS_LIST?=?(ADDRESS?=?(PROTOCOL?=?TCP)
(HOST?=?127.0.0.1)(PORT?=?1521)))?(CONNECT_DATA?=?(SERVER?=?DEDICATED)?(SERVICE_
NAME?=?orcl)))
OK?(20?msec)
3.
SQL>;show?sga??查看instance是否已經(jīng)啟動(dòng)
SQL>;?select?open_mode?from?v$database;?查看數(shù)據(jù)庫(kù)是打開(kāi)還是mount狀態(tài)。
OPEN_MODE
----------
READ?WRITE?
#-----------------
使用hostname訪問(wèn)數(shù)據(jù)庫(kù)而不是tnsname的例子
使用tnsname訪問(wèn)數(shù)據(jù)庫(kù)是默認(rèn)的方式,但是也帶來(lái)點(diǎn)問(wèn)題,那就是客戶(hù)端都是需要配置tnsnames.ora文件的。如果你的數(shù)據(jù)庫(kù)服務(wù)器地址發(fā)生改變,就需要重新編輯客戶(hù)端這個(gè)文件。通過(guò)hostname訪問(wèn)數(shù)據(jù)庫(kù)就沒(méi)有了這個(gè)麻煩。
需要修改
服務(wù)器端listener.ora
#監(jiān)聽(tīng)器的配置文件listener.ora
#使用host?naming則不再需要tnsname.ora文件做本地解析
#?listener.ora?Network?Configuration?File:?d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/listener.ora
#?Generated?by?Oracle?configuration?tools.
SID_LIST_LISTENER?=
??(SID_LIST?=
????(SID_DESC?=
??#????(SID_NAME?=?PLSExtProc)
(SID_NAME?=?orcl)
(GLOBAL_DBNAME?=?boway)
??????(ORACLE_HOME?=?d:/oracle/product/10.1.0/db_1)
??#????(PROGRAM?=?extproc)
????)
??)
LISTENER?=
??(DESCRIPTION_LIST?=
????(DESCRIPTION?=
??????(ADDRESS?=?(PROTOCOL?=?IPC)(KEY?=?EXTPROC))
????)
????(DESCRIPTION?=
??????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?boway)(PORT?=?1521))
????)
??)
客戶(hù)端sqlnet.ora?如果確認(rèn)不會(huì)使用TNSNAME訪問(wèn)的話,可以去掉TNSNAMES
#?sqlnet.ora?Network?Configuration?File:?d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/sqlnet.ora
#?Generated?by?Oracle?configuration?tools.
SQLNET.AUTHENTICATION_SERVICES=?(NTS)
NAMES.DIRECTORY_PATH=?(HOSTNAME)
Tnsnames.ora文件不需要配置,刪除也無(wú)所謂。
下面就是網(wǎng)絡(luò)和操作系統(tǒng)的配置問(wèn)題了,怎么樣能夠解析我的主機(jī)名的問(wèn)題了
可以通過(guò)下面的方式連接
sqlplus?sys/oracle@boway
這樣的話,會(huì)連接boway這臺(tái)服務(wù)器,并且listener來(lái)確定你所要連接的service_name。
總結(jié)
以上是生活随笔為你收集整理的ORACLE网络连接配置与文件:listener.ora、sqlnet.ora、tnsnames.ora的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 不同Unix环境下date计算日期的用法
- 下一篇: 缩小数据文件尺寸报ORA-03297的处