`

listener.ora、sqlnet.ora、tnsnames.ora 配置文件

 
阅读更多

三个配置文件 listener.orasqlnet.oratnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下。参考:http://hi.baidu.com/lisongyuan1984/blog/item/94092c4f9a8176cdd1c86ace.html

sqlnet.ora文件:
SQLNET.AUTHENTICATION_SERVICES= (NTS)    #使用操作系统本地验证,一般不用,有安全问题。通常需要改成下面的值:SQLNET.AUTHENTICATION_SERVICES= (NONE) 
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)   #指定客户端请求的解析方式,首先为TNSNAMES,即使用tnsnames.ora文件解析
#NAMES.DEFAULT_DOMAIN = server.com   #指定客户端请求的服务名的域

tnsnames.ora文件:
fgh =  #此处指定的是oracle服务的别名,在第三方客户端工具(PL/SQL Developer)中的数据库项中体现
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))  #指定oracle数据库运行的协议、地址和端口   
      (CONNECT_DATA = 
           (SERVER = DEDICATED)
           (SERVICE_NAME = orcl) #实际的oracle服务名称为orcl
       )
  )

listener.ora文件:
LISTENER =  #监听器的名称
  (DESCRIPTION_LIST =
    (DESCRIPTION =
       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = localhost )(PORT = 1521)) #指定监听的目的主机及端口,注:监听服务启动不了很有可能是这里指定的主机名与实际主机名不相符
    )
  )

sql*plus运行基本机理:
1. sqlnet.ora文件:
      NAMES.DIRECTORY_PATH = (TNSNAMES, .)
      NAMES.DEFAULT_DOMAIN = server.com
2. tnsnames.ora文件:
      test =
          (DESCRIPTION=
               (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))
               (CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)
          )
在用户输入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网络服务名,然后取出其中的hostporttcpservice_name,利用这些信息将连接请求发送到正确的数据库服务器上。

另外原则上tnsnames.ora中的配置不区分大小写,但是我的确遇到区分大小写的情况,所以最好将使用的网络服务与tnsnames.ora中配置的完全一样。
ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect Descriptor.
该错误表示能在tnsnames.ora中找到网络服务名,但是在tnsnames.ora中指定的SERVICE_NAME与服务器端的 SERVICE_NAME不一致。解决的办法是修改tnsnames.ora中的SERVICE_NAME 

<!--EndFragment-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics