合 Oracle的网络三大配置文件sqlnet.ora、tnsnames.ora、listener.ora
Tags: Oracle监听ORA-01017remote_listenerlistener.oralocal_listenerORA-01031SQLNET.AUTHENTICATION_SERVICEStrace跟踪sqlnet.oratnsnames.ora
说明
为了使得外部进程能够访问Oracle 数据库则必须配置Oracle 网络服务器环境配置, Oracle 网络服务器环境是通过配置listener.ora 、sqlnet.ora 和 tnsnames.ora 共三个文件来进行的。由于oracle数据库是一个客户端服务器的软件,所以,首先需要接收来自客户端的连接请求,服务器就必须配置监听器;其次,客户端要连接到某个制定的服务器,就必须配置到服务器的tns服务名。
有关oracle的三个网络配置文件分别为 listener.ora、sqlnet.ora、tnsnames.ora ,无论linux还是windows下,都是放在$ORACLE_HOME\network\admin
目录下。
sqlnet.ora
建议配置如下:
1 2 3 4 5 6 7 | -- windows SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME) -- linux 建议注释掉SQLNET.AUTHENTICATION_SERVICES的值 SQLNET.AUTHENTICATION_SERVICES= (ALL) NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT, HOSTNAME) |
操作系统认证和密码文件认证请参考:https://www.xmmup.com/oracle-osrenzhengyumimawenjiankoulingwenjianrenzheng-mimawenjianjieshao.html#Oracle_de_liang_zhong_ren_zheng_fang_shi
sqlnet.ora作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串。
例如我们客户端输入
sqlplus sys/oracle@orcl
假如我的sqlnet.ora是下面这个样子
1 2 | SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME) |
那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的 ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名
如果我是这个样子
NAMES.DIRECTORY_PATH= (TNSNAMES)
那么客户端就只会从tnsnames.ora查找orcl的记录,括号中还有其他选项,如LDAP等并不常用。
1 2 | SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) |
若sqlnet.ora配置错误会影响操作系统认证,报错ORA-01017
在Windows上,若配置SQLNET.AUTHENTICATION_SERVICES = (NONE)
,则执行sqlplus / as sysdba
会报错“ORA-01017: invalid username/password; logon denied”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | C:\Users\Administrator>sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on 星期四 1月 21 11:06:43 2021 Copyright (c) 1982, 2013, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied 请输入用户名: ERROR: ORA-01017: 用户名/口令无效; 登录被拒绝 请输入用户名: ERROR: ORA-01017: 用户名/口令无效; 登录被拒绝 |
参数官方文档说明
http://docs.oracle.com/cd/E11882_01/network.112/e10835/sqlnet.htm#NETRF182
EZCONNECT方式连接数据库
如果对tnsnames.ora文件没有做充分的配置,也可以使用Oracle的Easy Connect Naming Method方法测试数据库是否可以访问。
1 2 | username/password@host[:port][/service_name][/instance_name] username/password@[//]host[:port][/service_name] |
注意:如果想要使用Easy Connect Naming Method方法测试数据库的连通性,需要在sqlnet.ora文件中增加“NAMES.DIRECTORY_PATH= (EZCONNECT)”信息,否则该功能将无法使用,一般配置如下:
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
例如:
listner配置TCP协议,使用主机名,端口为1521,service_names=orclasm.lhr.com
连接:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | C:\Users\Administrator\>sqlplus lhr/lhr@192.168.59.130:1521/orclasm.lhr.com SQL*Plus: Release 11.2.0.1.0 Production on 星期一 2月 2 10:35:52 2015 Copyright (c) 1982, 2010, Oracle. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL\> 测试连通性: C:\Users\Administrator\>tnsping 192.168.59.130:1521/orclasm.lhr.com TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 02-2月 -2015 10:39:03 Copyright (c) 1997, 2010, Oracle. All rights reserved. 已使用的参数文件: D:\Program files\app\oracle\product\11.2.0.1\dbhome_1\NETWORK\ADMIN\sqlnet.ora 已使用 EZCONNECT 适配器来解析别名 尝试连接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=orclasm.lhr.com))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.130)(PORT=1521))) OK (0 毫秒) C:\Users\Administrator\> |
plsql developer 连接: 填写:192.168.59.130:1521/orclasm.lhr.com
登录后看到:
SQLNET.AUTHENTICATION_SERVICES参数示例
一、官方文档说明
作用
Use the parameter SQLNET.AUTHENTICATION_SERVICES to enable one or more authentication services.
If authentication has been installed,
it is recommended that this parameter be set to either none or to one of the authentication methods.
默认值
None
一般可选值
NONEforno authentication methods. A valid username and password can be used to access the database.