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/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,利用这些信息将连接请求发送到正确的数据库服务器上。

以下转自: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应该可以成功的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值