您的位置:首页 > 其它

TNS连接和服务名杂记

2013-10-15 21:49 218 查看
服务名与实例名间的关系:
sqlplus sys/密码@IP地址:端口号/服务名 as sysdba
注意: 1、服务名这个位置不要填成实例名,否则出错。
2、使用sys账户真正登陆远程服务器时是需要密码验证的。
[b] 但是只是以sqlplus sys/密码@IP地址:端口号/服务名 as sysdba形式登陆本机,可以不用密码,因为实质还是操作系统验证。[/b]
[b] 3、凡是以sysdba身份登陆的,show user命令显示的结果是SYS。[/b]
凡是用sys用户登陆的,必须带上[b][b]sysdba身份。[/b]

[/b]

所谓服务名,就是在输入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值就是为空。如下图所示:

在创建数据库界面上,输入下面字符串:



则得出的结果如下:





服务名来源:
上图中的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指的是(服务端的)服务名,不是指实例名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: