数据库的网络连接[@more@]
最后,网络连接已经建立,listener进程的历史使命也就完成了。
数据库的网络连接
1、客户端机器
正确配置sqlnet.ora文件(对应的操作:命名方法的配置可改变此文件)
正确配置tnsnames.ora文件(对应的操作:网络服务名的配置可改变此文件)
2、服务器机器
数据库已经启动
监听服务Listenner已经启动,对应listener.ora文件
3、原理分析
以TNSNAMES命名方法为例:
以sqlplus为例,当我们输入用户名、密码和网络服务名后,sqlplus首先在客户端寻找sqlnet.ora文件的NAMES.DEFAULT_DOMAIN参数,然后与将此参数与输入的网络服务名拼接在一起形成新的名字
然后又在客户端寻找tnsnames.ora文件,将在第一步形成的名字与此文件中的service_name匹配,如果一致,则继续下一步骤。
服务器端listener进程必须提供上面的服务和端口,如果没有问题的话,则建立与listener进程的连接,然后根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process。(更具体的细节参考下面第4小节)
最后,网络连接已经建立,listener进程的历史使命也就完成了。
Ps:只有sqlnet.ora文件中存在TNSNAMES时,才会用到tnsnames.ora文件
4、listenner进程
a、如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
操作系统认证或本地登录都不需要此进程
b、强制服务和自动服务
强制服务---来自于listener.ora文件,对应的操作;用status命令显示时,服务名来自于listener.ora文件中的GLOBAL_DBNAME,实例名来自listener.ora文件中的SID_NAME,并且实例的状态显示为UNKOWN
自动服务---listener.ora文件中没有对应内容,由运行的实例自动注册到监听器中;用status命令显示时,服务名来自于参数文件的db_name.db_domian,实例名来自于参数文件的instance_name,并且实例的状态显示为READY
因此,用status命令查看时,有可能看到一个服务下有两个或多个实例名
c、
无法启动 OracleOraHome81TNSListener 服务,系统提示找不到指定的路径
在运行处执行REGEDIT进入注册表到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesOracleOraHome81TNSListener
发现ImagePath关键值没有了,增加他,选择可扩充字符串值,编辑字符串的数值数据为:f:OracleOra81BINTNSLSNR
退出注册表。(我的环境是oracle8.1.7 )
在运行处执行REGEDIT进入注册表到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesOracleOraHome81TNSListener
发现ImagePath关键值没有了,增加他,选择可扩充字符串值,编辑字符串的数值数据为:f:OracleOra81BINTNSLSNR
退出注册表。(我的环境是oracle8.1.7 )
5、常用的诊断命令
服务器端:lsnrctl status,查看listenner进程的状态
客户端:tnsping 网络服务名,查看客户端sqlnet.ora和tnsname.ora文件的配置正确与否
6、附录
命名方法---解析网络服务名的一种方式
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/653579/viewspace-893437/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/653579/viewspace-893437/