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

轉自:http://blog.csdn.net/aten_xie/article/details/6174069

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) 
那麼,客戶端就會首先在tnsnames.ora文件中找ora的記錄.如果沒有相應的記錄則嘗試把ora當作一個主機名,通過網絡的途徑去解析它的 ip地址然後去連接這個ip上GLOBAL_DBNAME=ora這個實例,當然我這裏ora並不是一個主機名

如果我是這個樣子 
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 = 127.0.0.1)(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/[email protected] ,然後再到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,利用這些信息將連接請求發送到正確的數據庫服務器上。

以下轉自:http://blog.csdn.net/kaiwii/article/details/6822546



1.解決問題:TNS或者數據庫不能登錄。

 
    最簡單有效方法:使用oracle系統提供的工具 netca 配置(把原來的刪除掉重新配置) 
    $netca 


2.然而,仍有疑問:如何指定'listener.ora'存放的目錄?不要默認目錄($ORACLE_HOME/network/admin)

    在 '.profile' 中加入

  1. TNS_ADMIN=/f01/oracle11/app/oracle/product/8.0.6/network/admin   
  2. export TNS_ADMIN   

 

 

3.介紹三個配置文件

    1)listener.ora

    2)sqlnet.ora

    3)tnsnames.ora

    此三文件都是放在$ORACLE_HOME/network/admin目錄下。 

1)sqlnet.ora(客戶及服務器端)

      作用類似於linux或者其他unix的nsswitch.conf文件,通過這個文件來決定怎麼樣找一個連接中出現的連接字符串, 
   
  例如我們客戶端輸入 
   
  sqlplus sys/oracle@orcl 
   
  假如我的sqlnet.ora是下面這個樣子 
   

  1. SQLNET.AUTHENTICATION_SERVICES= (NTS)   
  2.    
  3. NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)  
 
   
  那麼,客戶端就會首先在tnsnames.ora文件中找orcl的記錄,如果沒有相應的記錄則嘗試把orcl當作一個主機名,通過網絡的途徑去解析它的ip地址然後去連接這個ip上GLOBAL_DBNAME=orcl這個實例。當然我這裏orcl並不是一個主機名 
   
  如果我是這個樣子 
   
  
  1. NAMES.DIRECTORY_PATH= (TNSNAMES)   

   
  那麼客戶端就只會從tnsnames.ora查找orcl的記錄 
   
  括號中還有其他選項,如LDAP等並不常用。

2)Tnsnames.ora(客戶及服務器端)

        這個文件類似於unix 的hosts文件,提供的tnsname到主機名或者ip的對應,只有當sqlnet.ora中類似 
   
  NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析連接字符串的順序中有TNSNAMES時,纔會嘗試使用這個文件。 
   
  例子中有兩個,ORCL 對應的本機,SALES對應的另外一個IP地址,裏邊還定義了使用主用服務器還是共享服務器模式進行連接,一句一句寫如下: 
   
  

  1. #你所要連接的時候輸入得TNSNAME   
  2.      
  3.   ORCL =   
  4.      
  5.   (DESCRIPTION =   
  6.      
  7.   (ADDRESS_LIST =   
  8.     
  9.   #下面是這個TNSNAME對應的主機,端口,協議   
  10.      
  11.   (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))   
  12.      
  13.   )   
  14.      
  15.   (CONNECT_DATA =   
  16.      
  17.   #使用專用服務器模式去連接需要跟服務器的模式匹配,如果沒有就根據服務器的模式   
  18.     
  19.   #自動調節   
  20.      
  21.   (SERVER = DEDICATED)   
  22.      
  23.   #對應service_name,SQLPLUS>show parameter service_name;   
  24.     
  25.   #進行查看   
  26.      
  27.   (SERVICE_NAME = orcl)   
  28.      
  29.   )   
  30.      
  31.   )   
  32.      
  33.   #下面這個類似   
  34.      
  35.   SALES =   
  36.      
  37.   (DESCRIPTION =   
  38.      
  39.   (ADDRESS_LIST =   
  40.      
  41.   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))   
  42.      
  43.   )   
  44.      
  45.   (CONNECT_DATA =   
  46.      
  47.   (SERVER = DEDICATED)   
  48.      
  49.   (SERVICE_NAME = sales)   
  50.      
  51.   )   
  52.      
  53.   )   

3)listener.ora(服務器端) --listener監聽器進程的配置文件

  關於listener進程就不多說了,接受遠程對數據庫的接入申請並轉交給oracle的服務器進程。所以如果不是使用的遠程的連接,listener進程就不是必需的,同樣的如果關閉listener進程並不會影響已經存在的數據庫連接。
   
  Listener.ora文件的例子 
   
  

  1. #listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora   
  2.     
  3.   # Generated by Oracle configuration tools.   
  4.      
  5.   #下面定義LISTENER進程爲哪個實例提供服務   
  6.     
  7.   #這裏是ORCL,並且它對應的ORACLE_HOME和GLOBAL_DBNAME   
  8.      
  9.   #其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做數據庫連接   
  10.      
  11.   SID_LIST_LISTENER =   
  12.      
  13.   (SID_LIST =   
  14.      
  15.   (SID_DESC =   
  16.      
  17.   (GLOBAL_DBNAME = boway)   
  18.      
  19.   (ORACLE_HOME = E:/oracle/product/10.1.0/Db_2)   
  20.      
  21.   (SID_NAME = ORCL)   
  22.      
  23.   )   
  24.      
  25.   )   
  26.     
  27.   #監聽器的名字,一臺數據庫可以有不止一個監聽器   
  28.      
  29.   #再向下面是監聽器監聽的協議,ip,端口等,這裏使用的tcp1521端口,並且使#用的是主機名   
  30.      
  31.   LISTENER =   
  32.      
  33.   (DESCRIPTION =   
  34.      
  35.   (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))   
  36.      
  37.   )   

   
  上面的例子是一個最簡單的例子,但也是最普遍的。一個listener進程爲一個instance(SID)提供服務。

 

4.監聽器的操作命令


   
  $ORACLE_HOME/bin/lsnrctl start     

      其他諸如stop,status等。具體敲完一個lsnrctl後看幫助。 
   
  上面說到的三個文件都可以通過圖形的配置工具來完成配置

  • $ORACLE_HOME/netca 嚮導形式的    
  • $ORACLE_HOME/netmgr 

 

  1. profile 配置的是sqlnet.ora也就是名稱解析的方式    
  2. service name 配置的是tnsnames.ora文件    
  3. listeners配置的是listener.ora文件,即監聽器進程 

   
  具體的配置可以嘗試一下然後來看一下配置文件。 
   
  這樣一來總體結構就有了,是當你輸入sqlplus sys/oracle@orcl的時候

  1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME    
  2. 則查詢tnsnames.ora文件,從裏邊找orcl的記錄,並且找到主機名,端口和service_name    
  3. 如果listener進程沒有問題的話,建立與listener進程的連接。    
  4. 根據不同的服務器模式如專用服務器模式或者共享服務器模式,listener採取接下去的動作。默認是專用服務器模式,沒有問題的話客戶端就連接上了數據庫的server process。    
  5. 這時候網絡連接已經建立,listener進程的歷史使命也就完成了。 

 

5.幾種連接用到的命令形式

   
  1.sqlplus / as sysdba 這是典型的操作系統認證,不需要listener進程    
  2.sqlplus sys/oracle 這種連接方式只能連接本機數據庫,同樣不需要listener進程    
  3.sqlplus sys/oracle@orcl 這種方式需要listener進程處於可用狀態。最普遍的通過網絡連接。 
   
  以上連接方式使用sys用戶或者其他通過密碼文件驗證的用戶都不需要數據庫處於可用狀態,操作系統認證也不需要數據庫可用,普通用戶因爲是數據庫認證,所以數據庫必需處於open狀態。 
   
  然後就是

6.平時排錯可能會用到的 
   
  

 1.lsnrctl status查看服務器端listener進程的狀態 
   

  1. LSNRCTL> help   
  2.    
  3. The following operations are available   
  4.    
  5. An asterisk (*) denotes a modifier or extended command:   
  6.    
  7. start stop status   
  8.    
  9. services version reload   
  10.    
  11. save_config trace change_password   
  12.    
  13. quit exit set*   
  14.    
  15. show*   
  16.    
  17. LSNRCTL> status   

   
  2.tnsping 查看客戶端sqlnet.ora和tnsname.ora文件的配置正確與否,及對應的服務器的listener進程的狀態。 
   
  1. C:/>tnsping orcl   
  2.    
  3. TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 16-8月 -   
  4.    
  5. 2005 09:36:08   
  6.    
  7. Copyright (c) 1997, 2003, Oracle. All rights reserved.   
  8.    
  9. Used parameter files:   
  10.    
  11. E:/oracle/product/10.1.0/Db_2/network/admin/sqlnet.ora   
  12.    
  13. Used TNSNAMES adapter to resolve the alias   
  14.    
  15. Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)   
  16.    
  17. (HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_   
  18.    
  19. NAME = orcl)))   
  20.    
  21. OK (20 msec)   

   
  3. 
   
  
  1. SQL>show sga 查看instance是否已經啓動   
  2.      
  3.   SQL> select open_mode from v$database; 查看數據庫是打開還是mount狀態。   
  4.      
  5.   OPEN_MODE   

   
  ---------- 
   
  READ WRITE

 

7.使用hostname訪問數據庫而不是tnsname的例子

   
  使用tnsname訪問數據庫是默認的方式,但是也帶來點問題,那就是客戶端都是需要配置tnsnames.ora文件的。如果你的數據庫服務器地址發生改變,就需要重新編輯客戶端這個文件。通過hostname訪問數據庫就沒有了這個麻煩。 
   
  需要修改服務器端listener.ora 
   

  1. #監聽器的配置文件listener.ora   
  2.   
  3. #使用host naming則不再需要tnsname.ora文件做本地解析   
  4.    
  5. # listener.ora Network Configuration File: d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/listener.ora   
  6.   
  7. # Generated by Oracle configuration tools.   
  8.    
  9. SID_LIST_LISTENER =   
  10.    
  11. (SID_LIST =   
  12.    
  13. (SID_DESC =   
  14.    
  15. # (SID_NAME = PLSExtProc)   
  16.    
  17. (SID_NAME = orcl)   
  18.    
  19. (GLOBAL_DBNAME = boway)   
  20.    
  21. (ORACLE_HOME = d:/oracle/product/10.1.0/db_1)   
  22.   
  23. # (PROGRAM = extproc)   
  24.    
  25. )   
  26.    
  27. )   
  28.    
  29. LISTENER =   
  30.    
  31. (DESCRIPTION_LIST =   
  32.    
  33. (DESCRIPTION =   
  34.    
  35. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))   
  36.    
  37. )   
  38.    
  39. (DESCRIPTION =   
  40.    
  41. (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))   
  42.    
  43. )   
  44.    
  45. )   

   
  客戶端sqlnet.ora 如果確認不會使用TNSNAME訪問的話,可以去掉TNSNAMES 
   
  1. # sqlnet.ora Network Configuration File: d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/sqlnet.ora   
  2.   
  3. # Generated by Oracle configuration tools.   
  4.    
  5. SQLNET.AUTHENTICATION_SERVICES= (NTS)   
  6.    
  7. NAMES.DIRECTORY_PATH= (HOSTNAME)   

   
  Tnsnames.ora文件不需要配置,刪除也無所謂。 
   
  下面就是網絡和操作系統的配置問題了,怎麼樣能夠解析我的主機名的問題了 
   
  可以通過下面的方式連接 
   
  sqlplus sys/oracle@boway 
   
  這樣的話,會連接boway這臺服務器,並且listener來確定你所要連接的service_name。 

-------------------------------------------------------------------------------

 

8.啓動時listener.ora,sqlnet.ora,tnsnames.ora配置問題解決思路

from:http://www.ixdba.net/hbcms/article/ec/231.html 
 
1:監聽文件listener.ora  tnsnames.ora中關於host的配置建議都用ip來表示


2:如果監聽不能啓動或者啓動後不能正常使用,

(1)首先確認你的OS的hostname,執行hostname命令,嘗試ping "hostname",看是否能通, 
(2)然後檢查監聽的listener.ora ,tnsnames.ora這兩個配置文件中關於host的信息是否是用主機名錶示的。 
(3)如果是,更改到新的主機名,然後把新的主機名加入系統的hosts文件,linux下爲/etc/hosts; 
然後ping 新主機名,應該能通的。 
(4)如果全部是用ip表示的,那麼直接將新的主機名加入系統的hosts文件即可。 
然後ping 新主機名,也應該能通的。

3:如果第二步還是解決不了問題,

(1)檢查啓動的oracle的instance信息,select * fromv$instance; 
然後查看本級系統的主機名,兩者應該是相等的。 
(2)如果查詢出來的是老的主機名,嘗試"ping老主機名"應該不通, 
通過listener也應該是連結不上; 
(3)如果是新的主機名,如果"ping新主機名"不通, 
請修改/etc/hosts文件增加新主機名,確認能ping通,然後重啓oracle 

 

4:注意tns和listener文件的設置。 
具體操作步驟:

1)修改hostname爲www.ixdba.net 

2)修改/etc/hosts,去掉原來的主機名的行,增加該行 
    192.168.60.253 www.ixdba.net 
3)重啓數據庫,查詢instance信息 
     select * from v$instance; 
     得到新的HOST_NAME爲www.ixdba.net 
4)修改listener.ora,把HOST改成新的主機名 
5)修改tnsname.ora,修改對應的HOST爲新的主機名 
6)重啓listener 
      然後connect oracle/oracle@standby應該可以成功的。


1.解決問題:TNS或者數據庫不能登錄。

 
    最簡單有效方法:使用oracle系統提供的工具 netca 配置(把原來的刪除掉重新配置) 
    $netca 


2.然而,仍有疑問:如何指定'listener.ora'存放的目錄?不要默認目錄($ORACLE_HOME/network/admin)

    在 '.profile' 中加入

  1. TNS_ADMIN=/f01/oracle11/app/oracle/product/8.0.6/network/admin   
  2. export TNS_ADMIN   

 

 

3.介紹三個配置文件

    1)listener.ora

    2)sqlnet.ora

    3)tnsnames.ora

    此三文件都是放在$ORACLE_HOME/network/admin目錄下。 

1)sqlnet.ora(客戶及服務器端)

      作用類似於linux或者其他unix的nsswitch.conf文件,通過這個文件來決定怎麼樣找一個連接中出現的連接字符串, 
   
  例如我們客戶端輸入 
   
  sqlplus sys/oracle@orcl 
   
  假如我的sqlnet.ora是下面這個樣子 
   

  1. SQLNET.AUTHENTICATION_SERVICES= (NTS)   
  2.    
  3. NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)  
 
   
  那麼,客戶端就會首先在tnsnames.ora文件中找orcl的記錄,如果沒有相應的記錄則嘗試把orcl當作一個主機名,通過網絡的途徑去解析它的ip地址然後去連接這個ip上GLOBAL_DBNAME=orcl這個實例。當然我這裏orcl並不是一個主機名 
   
  如果我是這個樣子 
   
  
  1. NAMES.DIRECTORY_PATH= (TNSNAMES)   

   
  那麼客戶端就只會從tnsnames.ora查找orcl的記錄 
   
  括號中還有其他選項,如LDAP等並不常用。

2)Tnsnames.ora(客戶及服務器端)

        這個文件類似於unix 的hosts文件,提供的tnsname到主機名或者ip的對應,只有當sqlnet.ora中類似 
   
  NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析連接字符串的順序中有TNSNAMES時,纔會嘗試使用這個文件。 
   
  例子中有兩個,ORCL 對應的本機,SALES對應的另外一個IP地址,裏邊還定義了使用主用服務器還是共享服務器模式進行連接,一句一句寫如下: 
   
  

  1. #你所要連接的時候輸入得TNSNAME   
  2.      
  3.   ORCL =   
  4.      
  5.   (DESCRIPTION =   
  6.      
  7.   (ADDRESS_LIST =   
  8.     
  9.   #下面是這個TNSNAME對應的主機,端口,協議   
  10.      
  11.   (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))   
  12.      
  13.   )   
  14.      
  15.   (CONNECT_DATA =   
  16.      
  17.   #使用專用服務器模式去連接需要跟服務器的模式匹配,如果沒有就根據服務器的模式   
  18.     
  19.   #自動調節   
  20.      
  21.   (SERVER = DEDICATED)   
  22.      
  23.   #對應service_name,SQLPLUS>show parameter service_name;   
  24.     
  25.   #進行查看   
  26.      
  27.   (SERVICE_NAME = orcl)   
  28.      
  29.   )   
  30.      
  31.   )   
  32.      
  33.   #下面這個類似   
  34.      
  35.   SALES =   
  36.      
  37.   (DESCRIPTION =   
  38.      
  39.   (ADDRESS_LIST =   
  40.      
  41.   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))   
  42.      
  43.   )   
  44.      
  45.   (CONNECT_DATA =   
  46.      
  47.   (SERVER = DEDICATED)   
  48.      
  49.   (SERVICE_NAME = sales)   
  50.      
  51.   )   
  52.      
  53.   )   

3)listener.ora(服務器端) --listener監聽器進程的配置文件

  關於listener進程就不多說了,接受遠程對數據庫的接入申請並轉交給oracle的服務器進程。所以如果不是使用的遠程的連接,listener進程就不是必需的,同樣的如果關閉listener進程並不會影響已經存在的數據庫連接。
   
  Listener.ora文件的例子 
   
  

  1. #listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.ora   
  2.     
  3.   # Generated by Oracle configuration tools.   
  4.      
  5.   #下面定義LISTENER進程爲哪個實例提供服務   
  6.     
  7.   #這裏是ORCL,並且它對應的ORACLE_HOME和GLOBAL_DBNAME   
  8.      
  9.   #其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做數據庫連接   
  10.      
  11.   SID_LIST_LISTENER =   
  12.      
  13.   (SID_LIST =   
  14.      
  15.   (SID_DESC =   
  16.      
  17.   (GLOBAL_DBNAME = boway)   
  18.      
  19.   (ORACLE_HOME = E:/oracle/product/10.1.0/Db_2)   
  20.      
  21.   (SID_NAME = ORCL)   
  22.      
  23.   )   
  24.      
  25.   )   
  26.     
  27.   #監聽器的名字,一臺數據庫可以有不止一個監聽器   
  28.      
  29.   #再向下面是監聽器監聽的協議,ip,端口等,這裏使用的tcp1521端口,並且使#用的是主機名   
  30.      
  31.   LISTENER =   
  32.      
  33.   (DESCRIPTION =   
  34.      
  35.   (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))   
  36.      
  37.   )   

   
  上面的例子是一個最簡單的例子,但也是最普遍的。一個listener進程爲一個instance(SID)提供服務。

 

4.監聽器的操作命令


   
  $ORACLE_HOME/bin/lsnrctl start     

      其他諸如stop,status等。具體敲完一個lsnrctl後看幫助。 
   
  上面說到的三個文件都可以通過圖形的配置工具來完成配置

  • $ORACLE_HOME/netca 嚮導形式的    
  • $ORACLE_HOME/netmgr 

 

  1. profile 配置的是sqlnet.ora也就是名稱解析的方式    
  2. service name 配置的是tnsnames.ora文件    
  3. listeners配置的是listener.ora文件,即監聽器進程 

   
  具體的配置可以嘗試一下然後來看一下配置文件。 
   
  這樣一來總體結構就有了,是當你輸入sqlplus sys/oracle@orcl的時候

  1. 查詢sqlnet.ora看看名稱的解析方式,發現是TNSNAME    
  2. 則查詢tnsnames.ora文件,從裏邊找orcl的記錄,並且找到主機名,端口和service_name    
  3. 如果listener進程沒有問題的話,建立與listener進程的連接。    
  4. 根據不同的服務器模式如專用服務器模式或者共享服務器模式,listener採取接下去的動作。默認是專用服務器模式,沒有問題的話客戶端就連接上了數據庫的server process。    
  5. 這時候網絡連接已經建立,listener進程的歷史使命也就完成了。 

 

5.幾種連接用到的命令形式

   
  1.sqlplus / as sysdba 這是典型的操作系統認證,不需要listener進程    
  2.sqlplus sys/oracle 這種連接方式只能連接本機數據庫,同樣不需要listener進程    
  3.sqlplus sys/oracle@orcl 這種方式需要listener進程處於可用狀態。最普遍的通過網絡連接。 
   
  以上連接方式使用sys用戶或者其他通過密碼文件驗證的用戶都不需要數據庫處於可用狀態,操作系統認證也不需要數據庫可用,普通用戶因爲是數據庫認證,所以數據庫必需處於open狀態。 
   
  然後就是

6.平時排錯可能會用到的 
   
  

 1.lsnrctl status查看服務器端listener進程的狀態 
   

  1. LSNRCTL> help   
  2.    
  3. The following operations are available   
  4.    
  5. An asterisk (*) denotes a modifier or extended command:   
  6.    
  7. start stop status   
  8.    
  9. services version reload   
  10.    
  11. save_config trace change_password   
  12.    
  13. quit exit set*   
  14.    
  15. show*   
  16.    
  17. LSNRCTL> status   

   
  2.tnsping 查看客戶端sqlnet.ora和tnsname.ora文件的配置正確與否,及對應的服務器的listener進程的狀態。 
   
  1. C:/>tnsping orcl   
  2.    
  3. TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 16-8月 -   
  4.    
  5. 2005 09:36:08   
  6.    
  7. Copyright (c) 1997, 2003, Oracle. All rights reserved.   
  8.    
  9. Used parameter files:   
  10.    
  11. E:/oracle/product/10.1.0/Db_2/network/admin/sqlnet.ora   
  12.    
  13. Used TNSNAMES adapter to resolve the alias   
  14.    
  15. Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)   
  16.    
  17. (HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_   
  18.    
  19. NAME = orcl)))   
  20.    
  21. OK (20 msec)   

   
  3. 
   
  
  1. SQL>show sga 查看instance是否已經啓動   
  2.      
  3.   SQL> select open_mode from v$database; 查看數據庫是打開還是mount狀態。   
  4.      
  5.   OPEN_MODE   

   
  ---------- 
   
  READ WRITE

 

7.使用hostname訪問數據庫而不是tnsname的例子

   
  使用tnsname訪問數據庫是默認的方式,但是也帶來點問題,那就是客戶端都是需要配置tnsnames.ora文件的。如果你的數據庫服務器地址發生改變,就需要重新編輯客戶端這個文件。通過hostname訪問數據庫就沒有了這個麻煩。 
   
  需要修改服務器端listener.ora 
   

  1. #監聽器的配置文件listener.ora   
  2.   
  3. #使用host naming則不再需要tnsname.ora文件做本地解析   
  4.    
  5. # listener.ora Network Configuration File: d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/listener.ora   
  6.   
  7. # Generated by Oracle configuration tools.   
  8.    
  9. SID_LIST_LISTENER =   
  10.    
  11. (SID_LIST =   
  12.    
  13. (SID_DESC =   
  14.    
  15. # (SID_NAME = PLSExtProc)   
  16.    
  17. (SID_NAME = orcl)   
  18.    
  19. (GLOBAL_DBNAME = boway)   
  20.    
  21. (ORACLE_HOME = d:/oracle/product/10.1.0/db_1)   
  22.   
  23. # (PROGRAM = extproc)   
  24.    
  25. )   
  26.    
  27. )   
  28.    
  29. LISTENER =   
  30.    
  31. (DESCRIPTION_LIST =   
  32.    
  33. (DESCRIPTION =   
  34.    
  35. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))   
  36.    
  37. )   
  38.    
  39. (DESCRIPTION =   
  40.    
  41. (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))   
  42.    
  43. )   
  44.    
  45. )   

   
  客戶端sqlnet.ora 如果確認不會使用TNSNAME訪問的話,可以去掉TNSNAMES 
   
  1. # sqlnet.ora Network Configuration File: d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/sqlnet.ora   
  2.   
  3. # Generated by Oracle configuration tools.   
  4.    
  5. SQLNET.AUTHENTICATION_SERVICES= (NTS)   
  6.    
  7. NAMES.DIRECTORY_PATH= (HOSTNAME)   

   
  Tnsnames.ora文件不需要配置,刪除也無所謂。 
   
  下面就是網絡和操作系統的配置問題了,怎麼樣能夠解析我的主機名的問題了 
   
  可以通過下面的方式連接 
   
  sqlplus sys/oracle@boway 
   
  這樣的話,會連接boway這臺服務器,並且listener來確定你所要連接的service_name。 

-------------------------------------------------------------------------------

 

8.啓動時listener.ora,sqlnet.ora,tnsnames.ora配置問題解決思路

from:http://www.ixdba.net/hbcms/article/ec/231.html 
 
1:監聽文件listener.ora  tnsnames.ora中關於host的配置建議都用ip來表示


2:如果監聽不能啓動或者啓動後不能正常使用,

(1)首先確認你的OS的hostname,執行hostname命令,嘗試ping "hostname",看是否能通, 
(2)然後檢查監聽的listener.ora ,tnsnames.ora這兩個配置文件中關於host的信息是否是用主機名錶示的。 
(3)如果是,更改到新的主機名,然後把新的主機名加入系統的hosts文件,linux下爲/etc/hosts; 
然後ping 新主機名,應該能通的。 
(4)如果全部是用ip表示的,那麼直接將新的主機名加入系統的hosts文件即可。 
然後ping 新主機名,也應該能通的。

3:如果第二步還是解決不了問題,

(1)檢查啓動的oracle的instance信息,select * fromv$instance; 
然後查看本級系統的主機名,兩者應該是相等的。 
(2)如果查詢出來的是老的主機名,嘗試"ping老主機名"應該不通, 
通過listener也應該是連結不上; 
(3)如果是新的主機名,如果"ping新主機名"不通, 
請修改/etc/hosts文件增加新主機名,確認能ping通,然後重啓oracle 

 

4:注意tns和listener文件的設置。 
具體操作步驟:

1)修改hostname爲www.ixdba.net 

2)修改/etc/hosts,去掉原來的主機名的行,增加該行 
    192.168.60.253 www.ixdba.net 
3)重啓數據庫,查詢instance信息 
     select * from v$instance; 
     得到新的HOST_NAME爲www.ixdba.net 
4)修改listener.ora,把HOST改成新的主機名 
5)修改tnsname.ora,修改對應的HOST爲新的主機名 
6)重啓listener 
      然後connect oracle/oracle@standby應該可以成功的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章