oracle網(wǎng)絡(luò )配置
三個(gè)配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目錄下。
英文說(shuō)明:
The sqlnet.ora is an optional file expressing more parameters about the connection (eg: the trace level for debugging, the types of authentication you would like to support and so on). It may be found on the client or the server.
The tnsnames.ora is used to find a Net8 listener and connect to it and pass to it the details of the database instance youwould like to connect to. It will be found on the client side. Note that a SERVER can be a client of another database so it is typical to find it on the SERVER as well.
The listener.ora is used to setup the configuration of the net8 listener. to specify the port it will listen on, give it the details of the databases it can connect to and so on. This file is on the SERVER only.
1. sqlnet.ora-----通過(guò)這個(gè)文件來(lái)決定怎么樣找一個(gè)連接中出現的連接字符串。
例如我們客戶(hù)端輸入
sqlplus sys/oracle@ora
假如我的sqlnet.ora是下面這個(gè)樣子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那么,客戶(hù)端就會(huì )首先在tnsnames.ora文件中找ora的記錄.如果沒(méi)有相應的記錄則嘗試把ora當作一個(gè)主機名,通過(guò)網(wǎng)絡(luò )的途徑去解析它的 ip地址然后去連接這個(gè)ip上GLOBAL_DBNAME=ora這個(gè)實(shí)例,當然我這里ora并不是一個(gè)主機名
如果我是這個(gè)樣子
NAMES.DIRECTORY_PATH= (TNSNAMES)
那么客戶(hù)端就只會(huì )從tnsnames.ora查找ora的記錄,括號中還有其他選項,如LDAP等并不常用。
2. tnsnames.ora------這個(gè)文件類(lèi)似于unix 的hosts文件,提供的tnsname到主機名或者ip的對應。
只有當sqlnet.ora中類(lèi)似NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶(hù)端解析連接字符串的順序中有TNSNAMES是,才會(huì )嘗試使用這個(gè)文件。
例子:
ORA_TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora)
)
)
ORA_TEST:客戶(hù)端連接服務(wù)器端使用的服務(wù)別名。注意一定要頂行書(shū)寫(xiě),否則會(huì )無(wú)法識別服務(wù)別名。
PROTOCOL:客戶(hù)端與服務(wù)器端通訊的協(xié)議,一般為T(mén)CP,該內容一般不用改。
HOST:ORACLE服務(wù)器端IP地址或者hostname。確保服務(wù)器端的監聽(tīng)啟動(dòng)正常。
PORT:數據庫偵聽(tīng)正在偵聽(tīng)的端口,可以察看服務(wù)器端的listener.ora文件或在數據庫偵聽(tīng)所在的機器的命令提示符下通過(guò)lnsrctl status [listener name]命令察看。此處Port的值一定要與數據庫偵聽(tīng)正在偵聽(tīng)的端口一樣。
SERVICE_NAME:在服務(wù)器端,用system用戶(hù)登陸后,sqlplus> show parameter service_name命令查看。
3. listener.ora------listener監聽(tīng)器進(jìn)程的配置文件
關(guān)于listener進(jìn)程就不多說(shuō)了,接受遠程對數據庫的接入申請并轉交給oracle的服務(wù)器進(jìn)程。所以如果不是使用的遠程的連接,listener進(jìn)程就不是必需的,同樣的如果關(guān)閉listener進(jìn)程并不會(huì )影響已經(jīng)存在的數據庫連接。
例子:
#listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora)
(ORACLE_HOME = E:/oracle/product/10.1.0/Db_2)
(SID_NAME = ora)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
)
LISTENER :監聽(tīng)名稱(chēng),可以配置多個(gè)監聽(tīng),多個(gè)監聽(tīng)的端口號要區分開(kāi)來(lái)。
GLOBAL_DBNAME :全局數據庫名。通過(guò)select * from global_name; 查詢(xún)得出
ORACLE_HOME :oracle軟件的跟目錄
SID_NAME :服務(wù)器端(本機)的SID
PROTOCOL:監聽(tīng)協(xié)議,一般都使用TCP
HOST:本機IP地址,雙機時(shí)候使用浮動(dòng)IP
PORT:監聽(tīng)的端口號,使用netstat –an 檢查該端口不被占用。
當你輸入sqlplus sys/oracle@orcl的時(shí)候
1. 查詢(xún)sqlnet.ora看看名稱(chēng)的解析方式,發(fā)現是TNSNAME
2. 則查詢(xún)tnsnames.ora文件,從里邊找orcl的記錄,并且找到主機名,端口和service_name
3. 如果listener進(jìn)程沒(méi)有問(wèn)題的話(huà),建立與listener進(jìn)程的連接。
4. 根據不同的服務(wù)器模式如專(zhuān)用服務(wù)器模式或者共享服務(wù)器模式,listener采取接下去的動(dòng)作。默認是專(zhuān)用服務(wù)器模式,沒(méi)有問(wèn)題的話(huà)客戶(hù)端就連接上了數據庫的server process。
5. 這時(shí)候網(wǎng)絡(luò )連接已經(jīng)建立,listener進(jìn)程的歷史使命也就完成了。
sql*plus運行基本機理:
在用戶(hù)輸入sqlplus system/manager@test后,sqlplus程序會(huì )自動(dòng)到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN參數,假如該參數存在,則將該參數中的值取出,加到網(wǎng)絡(luò )服務(wù)名的后面,即此例中你的輸入由sqlplus system/manager@test自動(dòng)變?yōu)閟qlplus system/manager@test.server.com ,然后再到tnsnames.ora文件中找test.server.com網(wǎng)絡(luò )服務(wù)名,這當然找不到了,因為該文件中只有test網(wǎng)絡(luò )服務(wù)名,所以報錯。解決的辦法就是將sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN參數注釋掉即可,如 #NAMES.DEFAULT_DOMAIN = server.com。假如NAMES.DEFAULT_DOMAIN參數不存在,則sqlplus程序會(huì )直接到tnsnames.ora文件中找 test網(wǎng)絡(luò )服務(wù)名,然后取出其中的host ,port,tcp,service_name,利用這些信息將連接請求發(fā)送到正確的數據庫服務(wù)器上。
聯(lián)系客服