TNS连接和服务名杂记

服务名与实例名间的关系:

sqlplus sys/密码@IP地址:端口号/服务名 as sysdba

注意: 1、服务名这个位置不要填成实例名,否则出错。

           2、使用sys账户真正登陆远程服务器时是需要密码验证的。

              但是只是以sqlplus sys/密码@IP地址:端口号/服务名 as sysdba形式登陆本机,可以不用密码,因为实质还是操作系统验证。

         3、凡是以sysdba身份登陆的,show user命令显示的结果是SYS。

              凡是用sys用户登陆的,必须带上sysdba身份。

 

 

所谓服务名,就是在输入lsnrctl status命令后显示出来的结果中“服务摘要”片段里的“服务”,而“服务摘要”片段里的“例程”其实就是实例名。服务名就是实例名的别名,所以一个实例名可以对应有多个服务名。如下图所示:

我们由图可知,服务名cool、too.dkz.hz、tooXDB.dkz.hz、too_XPT.dkz.hz其实都是实例名too(也就是例程)的别名。
 
 
在创建数据库的图形界面上,有一个步骤是让我们填写全局数据库名和SID名(即实例名)的。这里所谓的全局数据库名其实就是服务名(的一种来源)。它由db_name(数据库名)和db_domain(库的域名)两部分组成,即db_name.db_domain。在界面上的全局数据库名后的空格里的字符串若有“.”字符,则字符串里的第一个“.”字符的左边的字符串(会赋值给oracle系统软件程序里的参数变量db_name)就是数据库名,其右边的字符串(会赋值给oracle系统软件程序里的参数变量db_domain)就是域名。若没有“.”字符,则全局数据库名后的空格里的整个字符串就是db_name的值,而db_domain值就是为空。如下图所示:
 
在创建数据库界面上,输入下面字符串:
 
 
TNS连接和服务名杂记_第1张图片
则得出的结果如下:
 
 
 
服务名来源:
上图中的service_names参数变量默认值为db_name.db_domain(全局数据名的一种来源),但是该变量可以我们修改的,而且可以赋多个值(以逗号分开)。
所以,服务名的一个来源是service_names参数里的值,一个是全局数据库名。还有一个来源就是listener.ora里的global_dbname(跟上图里的global_names参数意义不一样)的值。而全局数据库名分成两类来源:一是db_name.db_domain,一是listener.ora里的global_dbname
服务名还有其他来源,但我不清楚,如下图:
如服务名“rouXDB.ting”、“yoy_XPT.ting”两个来自哪里?
见《监听总结之6.自我版服务名来源的讨论及监听讨论》的解答
 
db_domain为空时,服务名(这里指全局数据库名)就是数据库名。而默认时,数据库名值为实例名(db_domain为空时,全局数据库名为db_name)。
 
还有一点说明的是,tnsname.ora里的service_name指的是(服务端的)服务名,不是指实例名。

你可能感兴趣的:(TNS连接和服务名杂记)