listener.ora、tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,都是放在$ORACLE_HOME/NETWORK/ADMIN目录下(Linux系统为“/”,Windows系统为“\")。其中listener.ora是和数据库服务器端相关,而tnsnames.ora和sqlnet.ora这2个文件不仅仅关系到服务器端,主要的还是和客户端关系紧密(#表注释)。
1.sqlnet.ora
通过这个文件来决定如何查找一个连接中出现的连接字符串
示例文件:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES,EZCONNECT)
#NAMES.DEFAULT_DOMAIN = oracle.com
内容说明:
#表明用户连接数据库用哪种验证方式
(1)NTS: 表示系统身份验证
(2)NONE:oralce数据库身份验证--- 必须输入用户名和口令
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES,EZCONECT)——表示将首先利用tnsnames进行解析;如果tnsnames解析不到,将使用hostname解析;如果 hostname解析不到,将采用onames进行解析;最后使用EZCONNECT解析。例如我们客户端输入:SQL> conn [email=system/oracle@orcl23]system/oracle@orcl23[/email]
被注释掉的 NAMES.DEFAULT_DOMAIN = oracle.com——表示采用默认的域名为oracle.com,在tnsnames.ora中如果配置对应的解析,如果原来的数据库别名是 oralocal(即网络服务名),那么,当启用这个参数后,在tnsnames中的配置要改成oralocal.oracle.com。在使用 tnsping时或者sqlplus登录时,只需写前面的别名,系统会自动加上后面的域名来进行解析。
2.tnsnames.ora
这个文件位于客户端(服务器端也存在的,表示客户端与服务器端位于同一台主机),记录客户端访问数据库的本地配置,其实就是定义网络服务,只有当sqlnet.ora中有“NAMES.DIRECTORY_PATH= (TNSNAMES)”这样的字样时,也就是客户端解析连接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件。
示例文件:
ORCL123 =
EXTPROC_CONNECTION_DATA =
3 listener.ora
SID_LIST_LISTENER =
LISTENER =
以上是本人本机上的一个监听文件,下面就该监听文件的各个参数的作用作个描述:
LISTENER
DESCRIPTION
ADDRESS_LIST
PROTOCOL
HOST
PORT
SID_LIST_LISTENER
SID_DESC
GLOBAL_DBNAME
ORACLE_HOME
SID_NAME
Lsnrctl命令用来管理Oracle监听器,是一个命令行界面。想调用这个命令行工具,在命令行键入lsnrctl即可。可以在LSNRCTL>提示符下键入help来显示这些命令的一份清单。
Services
Start listener
Status listener 显示指定监听器的状态
Stop listener
Trace
Version
Change_password 允许用户修改关闭监听器所需要的密码
Reload
Save_config
Exit
Quit
以上三个网络配置文件可以通过图形化配置工具进行相应配置。如在Linux下,
$netmgr #在Windows下为Net Manager
打开后可以看到一个窗口,其中,
profile 配置的是sqlnet.ora也就是名称解析的方式
service name 配置的是tnsnames.ora文件
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进程的历史使命也就完成了。
几种连接用到的命令形式
1.sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程
2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程
3.sqlplus sys/oracle@orcl 这种方式需要listener进程处于可用状态。最普遍的通过网络连接。
以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。
init.ora中的Remote_Login_Passwordfile对身份验证的影响
域名解析分析:相关文件为
/etc/hosts
C:\windows\system32\drivers\etc\hosts #windows系统
客户端需要写入数据库服务器IP地址和主机名的对应关系。如果同时有私有IP和Internet上公有IP,私有IP写在前面,公有IP写在后面。
如:
11.0.17.136 oracle
有时候tnsping 数据库服务器别名显示是成功的,但是sqlplus username/passwd @servicename不通,jdbc thin link 也不通,原因可能是DNS服务器里没有设置这个服务器IP地址和主机名的对应关系,本人就遇到过类似问题。
UNIX下ORACLE多数据库的环境,OS客户端需要配置下面两个环境变量来指定默认的目标数据库
相关命令:
$lsnrctl start listenername #启动监听程序listenername
$lsnrctl status listenername #查看listenername的状态
$lsnrctl stop listenername #停止listenername监听
$tnsping tnsname #测试网络服务名tnsname是否可用