如果对tnsnames.ora文件没有做充分的配置,也可以使用Oracle的Easy Connect Naming Method方法测试数据库是否可以访问。
这里不对这种方法的原理和详细用法展开描述,这方面的信息可以通过以下Oracle连接获得。
http://download.oracle.com/docs/cd/B19306_01/network.102/b14212/naming.htm#i498306
或直接访问下属文章进行参考。
Net Services Administrator's Guide - 2 Quick Start to Oracle Net Connections - Task 3: Configure the Client for Connection to a Database
Net Services Administrator's Guide - 8 Configuring Naming Methods - Using the Easy Connect Naming Method
简单列一下该方法的使用语法,供参考。
CONNECT username/password@host[:port][/service_name][/instance_name]
CONNECT username/password@[//]host[:port][/service_name]
本文想要强调指出的是,如果想要使用Easy Connect Naming Method方法测试数据库的连通性,需要在sqlnet.ora文件中增加“NAMES.DIRECTORY_PATH= (EZCONNECT)”信息,否则该功能将无法使用。
1.sqlnet.ora文件的位置
该文件与listener.ora和tnsnames.ora文件处于同一目录,具体目录为:$ORACLE_HOME/network/admin。
2.体验报错,以此为鉴
如果是Windows客户端没有配置相应的参数,会收到如下报错:
C:\Users\secooler>sqlplus sec/sec@10.17.193.211:1521/ora10g
SQL*Plus: Release 10.2.0.3.0 - Production on 星期一 8月 2 21:19:01 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
ERROR:
ORA-12154: TNS: 无法解析指定的连接标识符
请输入用户名:
ERROR:
ORA-12560: TNS: 协议适配器错误
请输入用户名:
ERROR:
ORA-12560: TNS: 协议适配器错误
SP2-0157: 在 3 次尝试之后无法连接到 ORACLE, 退出 SQL*Plus
C:\Users\secooler>
如Linux服务器端的sqlnet.ora文件没有设置相应的参数,将会收到如下错误:
sec@secdb /home/oracle$ sqlplus sec/sec@10.17.193.211:1521/ora10g
SQL*Plus: Release 10.2.0.3.0 - Production on Mon Aug 2 21:21:34 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied
SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus
两种错误内容是一样的,从错误提示上看,很难直接定位是由于sqlnet.ora文件配置问题导致的。这就需要我们对Easy Connect Naming Method的原理深入了解。
3.向sqlnet.ora文件中添加“EZCONNECT”信息,解决该问题
“EZCONNECT”这个单词很好理解,从发音上即可等同于“Easy Connect”。从此,该参数将不再陌生。
sec@secdb /home/oracle$ cat $ORACLE_HOME/network/admin/sqlnet.ora
# sqlnet.ora Network Configuration File: /oracle/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES,EZCONNECT)
在添加完参数后尝试连接,成功。
sec@secdb /oracle$ sqlplus sec/sec@10.17.193.211:1521/ora10g
SQL*Plus: Release 10.2.0.3.0 - Production on Mon Aug 2 21:31:50 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
sec@ora10g>
4.小结
Oracle提供了很多类似文中提到的Easy Connect Naming Method小技巧。建议在使用这些便捷方法之前充分了解工具使用的前提和约束,这样可以在提高效率的同时不至于带来太多的障碍。
Good luck.
secooler
10.08.02
NAMES.DIRECTORY_PATH常用的值有tnsnames,hostname,onames和ezconnect和ldap,cds,nis不常用的值,默认值是(tnsnames,onames,hostname)。
这里不对这种方法的原理和详细用法展开描述,这方面的信息可以通过以下Oracle连接获得。
http://download.oracle.com/docs/cd/B19306_01/network.102/b14212/naming.htm#i498306
或直接访问下属文章进行参考。
Net Services Administrator's Guide - 2 Quick Start to Oracle Net Connections - Task 3: Configure the Client for Connection to a Database
Net Services Administrator's Guide - 8 Configuring Naming Methods - Using the Easy Connect Naming Method
简单列一下该方法的使用语法,供参考。
CONNECT username/password@host[:port][/service_name][/instance_name]
CONNECT username/password@[//]host[:port][/service_name]
本文想要强调指出的是,如果想要使用Easy Connect Naming Method方法测试数据库的连通性,需要在sqlnet.ora文件中增加“NAMES.DIRECTORY_PATH= (EZCONNECT)”信息,否则该功能将无法使用。
1.sqlnet.ora文件的位置
该文件与listener.ora和tnsnames.ora文件处于同一目录,具体目录为:$ORACLE_HOME/network/admin。
2.体验报错,以此为鉴
如果是Windows客户端没有配置相应的参数,会收到如下报错:
C:\Users\secooler>sqlplus sec/sec@10.17.193.211:1521/ora10g
SQL*Plus: Release 10.2.0.3.0 - Production on 星期一 8月 2 21:19:01 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
ERROR:
ORA-12154: TNS: 无法解析指定的连接标识符
请输入用户名:
ERROR:
ORA-12560: TNS: 协议适配器错误
请输入用户名:
ERROR:
ORA-12560: TNS: 协议适配器错误
SP2-0157: 在 3 次尝试之后无法连接到 ORACLE, 退出 SQL*Plus
C:\Users\secooler>
如Linux服务器端的sqlnet.ora文件没有设置相应的参数,将会收到如下错误:
sec@secdb /home/oracle$ sqlplus sec/sec@10.17.193.211:1521/ora10g
SQL*Plus: Release 10.2.0.3.0 - Production on Mon Aug 2 21:21:34 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied
SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus
两种错误内容是一样的,从错误提示上看,很难直接定位是由于sqlnet.ora文件配置问题导致的。这就需要我们对Easy Connect Naming Method的原理深入了解。
3.向sqlnet.ora文件中添加“EZCONNECT”信息,解决该问题
“EZCONNECT”这个单词很好理解,从发音上即可等同于“Easy Connect”。从此,该参数将不再陌生。
sec@secdb /home/oracle$ cat $ORACLE_HOME/network/admin/sqlnet.ora
# sqlnet.ora Network Configuration File: /oracle/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES,EZCONNECT)
在添加完参数后尝试连接,成功。
sec@secdb /oracle$ sqlplus sec/sec@10.17.193.211:1521/ora10g
SQL*Plus: Release 10.2.0.3.0 - Production on Mon Aug 2 21:31:50 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
sec@ora10g>
4.小结
Oracle提供了很多类似文中提到的Easy Connect Naming Method小技巧。建议在使用这些便捷方法之前充分了解工具使用的前提和约束,这样可以在提高效率的同时不至于带来太多的障碍。
Good luck.
secooler
10.08.02
-- The End --
客户端的sqlnet.ora中的NAMES.DIRECTORY_PATH参数
如果设置NAMES.DIRECTORY_PATH=(tnsnames),那么客户端就只会从tnsnames.ora查找你要连接的字符串(如orcl)记录,如果tnsname.ora文件中没有此记录,则连接不上数据库。
如果设置NAMES.DIRECTORY_PATH=(tnsnames,hostname),那么客户端首先会从tnsnames.ora查找你要连接的字符串(如orcl)记录,如果tnsname.ora文件中没有此记录,则尝试把你要连接的字符串(如orcl)当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=连接字符串(如orcl)这个实例,当然这里连接字符串(如orcl)并不是一个主机名,最后会尝试以ezconnect的方式连接数据库。
例如sqlnet.ora配置如下:
NAMES.DIRECTORY_PATH=(TNSNAMES,ezconnect)
则可以同时支持如下格式的访问:
$ sqlplus scott/tiger@orcl
$ sqlplus scott/tiger@//service_IP(orhostname):1521/orcl
当然采用第一种格式时需要正确配置
tnsnames.ora,因为sqlplus需要在这里匹配IP地址、端口、服务名等参数