oracle網絡配置
三個配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目錄下。sql
英文說明:數據庫
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.express
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-----經過這個文件來決定怎麼樣找一個鏈接中出現的鏈接字符串。
例如咱們客戶端輸入
sqlplus sys/oracle@ora
假如個人sqlnet.ora是下面這個樣子
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那麼,客戶端就會首先在tnsnames.ora文件中找ora的記錄.若是沒有相應的記錄則嘗試把ora看成一個主機名,經過網絡的途徑去解析它的 ip地址而後去鏈接這個ip上GLOBAL_DBNAME=ora這個實例,固然我這裏ora並非一個主機名oracle
若是我是這個樣子
NAMES.DIRECTORY_PATH= (TNSNAMES)
那麼客戶端就只會從tnsnames.ora查找ora的記錄,括號中還有其餘選項,如LDAP等並不經常使用。tcp
2. tnsnames.ora------這個文件相似於unix 的hosts文件,提供的tnsname到主機名或者ip的對應。
只有當sqlnet.ora中相似NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析鏈接字符串的順序中有TNSNAMES是,纔會嘗試使用這個文件。
例子:
ORA_TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ora)
)
) ide
ORA_TEST:客戶端鏈接服務器端使用的服務別名。注意必定要頂行書寫,不然會沒法識別服務別名。
PROTOCOL:客戶端與服務器端通信的協議,通常爲TCP,該內容通常不用改。
HOST:ORACLE服務器端IP地址或者hostname。確保服務器端的監聽啓動正常。
PORT:數據庫偵聽正在偵聽的端口,能夠察看服務器端的listener.ora文件或在數據庫偵聽所在的機器的命令提示符下經過lnsrctl status [listener name]命令察看。此處Port的值必定要與數據庫偵聽正在偵聽的端口同樣。
SERVICE_NAME:在服務器端,用system用戶登錄後,sqlplus> show parameter service_name命令查看。spa
3. listener.ora------listener監聽器進程的配置文件
關於listener進程就很少說了,接受遠程對數據庫的接入申請並轉交給oracle的服務器進程。因此若是不是使用的遠程的鏈接,listener進程就不是必需的,一樣的若是關閉listener進程並不會影響已經存在的數據庫鏈接。
例子:
#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)
)
).net
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
)
LISTENER :監聽名稱,能夠配置多個監聽,多個監聽的端口號要區分開來。
GLOBAL_DBNAME :全局數據庫名。經過select * from global_name; 查詢得出
ORACLE_HOME :oracle軟件的跟目錄
SID_NAME :服務器端(本機)的SID
PROTOCOL:監聽協議,通常都使用TCP
HOST:本機IP地址,雙機時候使用浮動IP
PORT:監聽的端口號,使用netstat –an 檢查該端口不被佔用。
當你輸入sqlplus sys/oracle@orcl的時候
1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME
2. 則查詢tnsnames.ora文件,從裏邊找orcl的記錄,而且找到主機名,端口和service_name
3. 若是listener進程沒有問題的話,創建與listener進程的鏈接。
4. 根據不一樣的服務器模式如專用服務器模式或者共享服務器模式,listener採起接下去的動做。默認是專用服務器模式,沒有問題的話客戶端就鏈接上了數據庫的server process。
5. 這時候網絡鏈接已經創建,listener進程的歷史使命也就完成了。
sql*plus運行基本機理:
在用戶輸入sqlplus system/manager@test 後,sqlplus程序會自動到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN參數,假如該參數存在,則將該參數中的值取出,加到網絡服務名的後面,即此例中你的輸入由sqlplus system/manager@test自動變爲sqlplus system/manager@test.server.com,而後再到tnsnames.ora文件中找test.server.com網絡服務名,這固然找不到了,由於該文件中只有test網絡服務名,因此報錯。解決的辦法就是將sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN參數註釋掉便可,如 #NAMES.DEFAULT_DOMAIN = server.com。假如NAMES.DEFAULT_DOMAIN參數不存在,則sqlplus程序會直接到tnsnames.ora文件中找 test網絡服務名,而後取出其中的host ,port,tcp,service_name,利用這些信息將鏈接請求發送到正確的數據庫服務器上。