tnsnames.ora里面的 SERVICE_NAME 不是要对应listener.ora里面的 SID_NAME 而是要对应GLOBAL_DBNAME
MYSID8.SH.BCD.COM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.9.2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = OEMREPSRV)
)
)
listener.ora:
(SID_DESC =
(GLOBAL_DBNAME = OEMREPSRV)
(ORACLE_HOME = D:\oracle\ora92)
(SID_NAME = OEMREP)
)
9i里面在lsnrctl status里面就看的很清楚:
知道所谓AAA,BBB,YBSRV只是不同的GLOBAL_DBNAME 对应的同一个SID_NAME
Services Summary...
Service "AAA" has 1 instance(s).
Instance "YB", status UNKNOWN, has 1 handler(s) for this service...
Service "BBB" has 1 instance(s).
Instance "YB", status UNKNOWN, has 1 handler(s) for this service...
Service "OEMREPSRV" has 1 instance(s).
Instance "OEMREP", status UNKNOWN, has 1 handler(s) for this service...
Service "YBSRV" has 1 instance(s).
Instance "YB", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
LSNRCTL>
8i里面就只有看listener.ora文件喽,lsnrctl status看不见GLOBAL_DBNAME
服务摘要..
PLSExtProc 具有1个服务处理程序
oraback 具有1个服务处理程序
oraback 具有2个服务处理程序
sid8 具有2个服务处理程序
sid8 具有1个服务处理程序
命令执行成功
oracle中的service_name,instance_name,db_name,oracle_sid,sid_name的用法及区别
最近查过一些资料,准备把oracle里纷乱的参数整理一下,这里主要讨论以下参数,及其用法的总结,如有不对的地方,望高人指点!
在init.ora中有db_name,instance_name,service_name
在操作系统中需要配置oracle_sid
在listener.ora中有SID_NAME,GLOBAL_DBNAME,
在tnsname.ora中有SERVICE_NAME,SID
这么多,是不是你也看糊涂了。先晕一个,下面慢慢道来。
在init.ora中有db_name,instance_name,service_name
db_name是数据库的名称,在db安装时就已经设置了,这里不可修改,它觉得了数据库安装文件的位置。
instance_name是实例名,是数据库运行中名称,其实在OO中db_name相当于类而instance_name向当于对象,它也是代表数据库运行中的内存及其进程,同时影响到了这些进程的名称,譬如:一个数据库db_name=cus,而其实例instance_name=aking,那么数据库起来后,其进程名可能为:Pmon_aking_1。这里的实例名称要和PWDsid.ora和initSid.ora等文件匹配上,否则,db起动报错。从这里可以看出db_name是类名,定义后是不可修改的,而对于instance_name实例名向当于对象,所以我们可以设定自己喜欢的对象名称。不过话虽这样讲,但改了instance_name后,牵扯到很多其他的设置,还是最好不要动他,默认和db_name是一样的,这样多好。
service_name我觉得应该是指数据库网络连接时的名称,在listener配置中会有所考虑的。这个值也是可以随意改动的,并且还可以有多个值。alter system set service_name=serv1,serv2 scope=both;
在listener.ora中有SID_NAME,GLOBAL_DBNAME
这里SID_NAME指数据库的运行的实例名,应该是和instance_name一致
而对于GLOBAL_DBNAME是listener配置的对外网络连接名称,我们在配置tnsname.ora时会考虑这个参数。这个参数可以任意的设置。
另外有一点需要注意,一般我们会在listener.ora手工配置数据库实例的监听配置。但oracle可以通过pmon进程支持自动注册,这时自动注册的对外网络连接名称就会用到init.ora文件中service_name,有多个值的话就会注册多个,对于上面的例子,在这里就会注册serv1和serv2两个监听服务。如果你还手工配置了一个GLOBAL_DBNAME=serv3的监听服务的话,那么对于实例instance_name=aking就会有三个监听服务。
在tnsname.ora中有SERVICE_NAME,SID
下面配置客户端的tnsname.ora
对于这里的配置主要要给出要连接的数据库的IP及其连接的实例或服务
在监听配置中我们提到了对外网络连接名称,在这里如果我们用SERVICE_NAME的话,就需要SERVICE_NAME=(GLOBAL_DBNAME或者service_name这里要求oracle已经自动注册到了监听器中),对于SID=(instance_name)即可,譬如:
SERVICE_NAME=serv1,serv2,serv3都可以,或者
SID=aking
最后一个是ORACLE_SID参数,这个参数是操作系统中用到的,它是描述我们要默认连接的数据库实例,对于一个机器上有多个实例的情况下,要修改后才能通过 conn / as sysdba连接,因为这里用到了默认的实例名。