网上有很多关于Easy Connect Naming Method的文档,但是只是说在sqlnet.ora通过设置NAMES.DIRECTORY_PATH= (EZCONNECT)的方式来实现,这里的sqlnet.ora到底是指的客户端还是服务器端?
通过下面的实验来证明:
服务端主机名为secdb1(192.168.100.25,实例名为PROD),客户端主机名为ora10g
一、在服务器端设置sqlnet.ora,客户端不设置的情况
[oracle@secdb1 admin]$
[oracle@secdb1 admin]$ cat sqlnet.ora
NAMES.DIRECTORY_PATH=(tnsnames)
[oracle@secdb1 admin]$
当NAMES.DIRECTORY_PATH=(tnsnames)的时候,是不允许使用简单连接方式的。
客户端未设置sqlnet.ora
[oracle@ora10g admin]$
[oracle@ora10g admin]$ ls -lrt sqlnet.ora*
-rw-r--r-- 1 oracle oinstall 32 Jun 24 23:21 sqlnet.ora.bak
[oracle@ora10g admin]$
[oracle@ora10g admin]$
在客户端使用简单连接PROD数据库
[oracle@ora10g admin]$
[oracle@ora10g admin]$ ls -lrt sqlnet.ora*
-rw-r--r-- 1 oracle oinstall 32 Jun 24 23:21 sqlnet.ora.bak
[oracle@ora10g admin]$
[oracle@ora10g admin]$ sqlplus system/oracle@192.168.100.25:1521/prod
SQL*Plus: Release 10.2.0.5.0 - Production on Mon Jun 24 23:36:52 2013
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
PROD
SQL>
在客户端通过简单连接可以成功,看来服务器端的sqlnet.ora中的NAMES.DIRECTORY_PATH并未对客户端的简单连接造成影响。
二、客户端设置sqlnet.ora的情况
为了更加有力地证明服务器端的sqlnet.ora中的NAMES.DIRECTORY_PATH对客户端的简单连接无影响,首先还是保留服务器段的sqlnet.ora,内容依然为NAMES.DIRECTORY_PATH=(tnsnames)
在客户端的$ORACLE_HOME/network/admin目录下配置sqlnet.ora
[oracle@ora10g admin]$
[oracle@ora10g admin]$ cat sqlnet.ora
NAMES.DIRECTORY_PATH=(tnsnames)
[oracle@ora10g admin]$
[oracle@ora10g admin]$
下面尝试在客户端使用简单连接
[oracle@ora10g admin]$
[oracle@ora10g admin]$ sqlplus system/oracle@192.168.100.25:1521/prod
SQL*Plus: Release 10.2.0.5.0 - Production on Mon Jun 24 23:43:11 2013
Copyright (c) 1982, 2010, 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
[oracle@ora10g admin]$
[oracle@ora10g admin]$
报ORA-01017错误,看来只有客户端的sqlnet.ora才会对简单连接起到作用。
继续测试,修改客户端的sqlnet.ora并进行测试
[oracle@ora10g admin]$
[oracle@ora10g admin]$ cat sqlnet.ora
NAMES.DIRECTORY_PATH= (EZCONNECT)
[oracle@ora10g admin]$
[oracle@ora10g admin]$
[oracle@ora10g admin]$ sqlplus system/oracle@192.168.100.25:1521/prod
SQL*Plus: Release 10.2.0.5.0 - Production on Mon Jun 24 23:45:35 2013
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
PROD
SQL>
修改sqlnet.ora为NAMES.DIRECTORY_PATH= (EZCONNECT)的时候,客户端可以使用简单连接,进一步说明简单连接确实是受客户端的sqlnet.ora影响。
结论:
简单连接的NAMES.DIRECTORY_PATH= (EZCONNECT)只要设置在客户端的sqlnet.ora即可。
注意:
在没有配置sqlnet.ora或则sqlnet.ora为空的时候,是默认允许简单连接的,其根本原因是,默认情况下NAMES.DIRECTORY_PATH的值为hostname,而hostname是允许简单连接的
关于NAMES.DIRECTORY_PATCH的说明如下:
NAMES.DIRECTORY_PATH
Purpose
Use the parameter NAMES.DIRECTORY_PATH to specify the order of the naming methods used for client name resolution lookups.
Default
NAMES.DIRECTORY_PATH=(tnsnames, onames, hostname)
Values
Table 5-1 NAMES.DIRECTORY_PATH Values
Naming Method Value
Description
tnsnames (local naming naming method)
Set to resolve a net service name through the tnsnames.ora file on the client.
See Also: Oracle Database Net Services Administrator's Guide
ldap (directory naming naming method)
Set to resolve a database service name, net service name, or net service alias through a directory server.
See Also: Oracle Database Net Services Administrator's Guide
ezconnect or hostname (easy connect naming or host naming method)
Select to enable clients to use a TCP/IP connect identifier, consisting of a host name and optional port and service name.
See Also: Oracle Database Net Services Administrator's Guide
cds (CDS external naming method)
Set to resolve an Oracle database name in a Distributed Computing Environment (DCE) environment.
See Also: Oracle Database Advanced Security Administrator's Guide
nis (Network Information Service (NIS) external naming method)
Set to resolve service information through an existing NIS.
See Also: Oracle Database Net Services Administrator's Guide
Example
NAMES.DIRECTORY_PATH=(tnsnames, onames)




