listener.ora/sqlnet.ora/tnsnames.ora配置文件詳解


Oracle網絡配置 
三個配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目錄下。

英文說明:

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-----通過這個文件來決定怎么樣找一個連接中出現的連接字符串。 
例如我們客戶端輸入 
sqlplus sys/oracle@ora 
假如我的sqlnet.ora是下面這個樣子 
SQLNET.AUTHENTICATION_SERVICES= (NTS) 
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME,EZCONNECT) 
那么,客戶端就會首先在tnsnames.ora文件中找ora的記錄.如果沒有相應的記錄則嘗試把ora當作一個主機名,通過網絡的途徑去解析它的 ip地址然后去連接這個ip上GLOBAL_DBNAME=ora這個實例,當然我這里ora並不是一個主機名

EZCONNECT表示:可以使用簡單的方式連接Oracle例如:

 

1 CONNECT username/password@host[:port][/service_name][/instance_name]  
2 CONNECT username/password@host[:port][/service_name]  
3 sqlplus / as sysdba  
4 sqlplus sys as sysdba/sys@127.0.0.1:1521 

 

如果我是這個樣子 

NAMES.DIRECTORY_PATH= (TNSNAMES) 
那么客戶端就只會從tnsnames.ora查找ora的記錄,括號中還有其他選項,如LDAP等並不常用。

2.  tnsnames.ora------這個文件類似於unix 的hosts文件,提供的tnsname到主機名或者ip的對應。 
只有當sqlnet.ora中類似NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析連接字符串的順序中有TNSNAMES是,才會嘗試使用這個文件。 
例子: 
ORA_TEST = 
    (DESCRIPTION = 
       (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = LXL)(PORT = 1521)) 
       ) 
      (CONNECT_DATA = 
         (SERVER = DEDICATED) 
         (SERVICE_NAME = ora) 
      ) 
    ) 

ORA_TEST:客戶端連接服務器端使用的服務別名。注意一定要頂行書寫,否則會無法識別服務別名。 
PROTOCOL:客戶端與服務器端通訊的協議,一般為TCP,該內容一般不用改。 
HOST:ORACLE服務器端IP地址或者hostname。確保服務器端的監聽啟動正常。 
PORT:數據庫偵聽正在偵聽的端口,可以察看服務器端的listener.ora文件或在數據庫偵聽所在的機器的命令提示符下通過lnsrctl status [listener name]命令察看。此處Port的值一定要與數據庫偵聽正在偵聽的端口一樣。 
SERVICE_NAME:在服務器端,用system用戶登陸后,sqlplus> show parameter service_name命令查看。

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) 
         ) 
    )

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,利用這些信息將連接請求發送到正確的數據庫服務器上。

重點:上面所有的HOST值必須是計算機的主機名,否則只有本機使用127.0.0.1能訪問數據庫,局域網內的其他主機不能訪問【血淚史,不解釋】

並使用telnet 192.168.1.51 1521能連接

使用netstat -an可以查看到如下

貼出我的

sqlnet.ora內容

 1 # sqlnet.ora Network Configuration File: E:\app\Administrator\product\11.2.0\dbhome_1\network\admin\sqlnet.ora  
 2 # Generated by Oracle configuration tools.  
 3   
 4 # This file is actually generated by netca. But if customers choose to   
 5 # install "Software Only", this file wont exist and without the native   
 6 # authentication, they will not be able to connect to the database on NT.  
 7   
 8 SQLNET.AUTHENTICATION_SERVICES= (NTS)  
 9   
10 NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, EZCONNECT) 

 


tnsnames.ora內容

 1     # tnsnames.ora Network Configuration File: E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora  
 2     # Generated by Oracle configuration tools.  
 3       
 4     LISTENER_ORCL =  
 5       (ADDRESS = (PROTOCOL = TCP)(HOST = LXL)(PORT = 1521))  
 6     ORCL =  
 7       (DESCRIPTION =  
 8         (ADDRESS_LIST =  
 9           (ADDRESS = (PROTOCOL = TCP)(HOST = LXL)(PORT = 1521))  
10         )  
11         (CONNECT_DATA =  
12           (SID = ORCL)  
13         )  
14       )  

 

listener.ora內容

 1 # listener.ora Network Configuration File: E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora  
 2 # Generated by Oracle configuration tools.  
 3   
 4 SID_LIST_LISTENER =  
 5   (SID_LIST =  
 6     (SID_DESC =  
 7       (SID_NAME = CLRExtProc)  
 8       (ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1)  
 9       (PROGRAM = extproc)  
10       (ENVS = "EXTPROC_DLLS=ONLY:E:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")  
11     )  
12   )  
13   
14 LISTENER =  
15   (DESCRIPTION =  
16     (ADDRESS = (PROTOCOL = TCP)(HOST = LXL)(PORT = 1521))  
17   )  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM