oracle深入理解service_name
(2015-05-21 21:22:14)
标签:
oracle012514listenerservice_namedb_nameinstance_name |
分类: IT技术 |
oracle里的service_name出现在至少三个场合:
1、tnsnames
2、数据库参数service_names
3、监听器中service
其中tnsnames.ora中的service_name应该与监听器中的service_name一致,才能连接上,
否则,会出现ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务。
监听器中的service_name一般是PMon进程把数据库参数service_names注册过来的,每个service_name下会对应着相关的instance。
默认情况下:
db_unique_name=db_name。
global_name=db_name.domain
数据库参数中的service_names默认为db_unique_name.db_domain,
当domain为空时service_names=db_unique_name
一般情况下,db_name=instance_name=db_unique_name=service_name,
但是,在一些场合中,上面的等式是不成立的,不注意这一点,在配置oracle的时候往往会遇到ora-12514错误。
比如rac,或者在同一主机中配置dataguard,或者是自己手工修改成不一样的例子。
我的一个例子就是这种情况:
在同一主机上里物理备用数据库,
其中主库:
instance_name=orcl
db_name=crm
db_unique_name=crm
service_names=crm
对应的tnsnames.ora中service_name=crm
在备库上:
instance_name=crm_n
db_name=crm
db_unique_name=crm_n
service_names=crm_n
listener中显示了两个service
Service "crm" has 1 instance(s).
Service "crm_n" has 1 instance(s).
====================
可以认为,如果没有在listener.ora中手动添加配置数据库服务的话客户端的service_name是必须要是数据库的service_names或其中之一.
如果在listener.ora中手动添加配置了数据库服务的话,客户端的service_name可以设置为服务器端监听器配置文件中的GLOBAL_DBNAME,也可以设置成数据库的service_names。
看oracle文档对GLOBAL_DBNAME 的描述
Purpose:
Identifies the
global database name of the database, a name comprised of the
database name and database domain. You can obtain the GLOBAL_DBNAME
value from the SERVICE_NAMES parameter in the initialization
parameter file.
This parameter must be embedded under SID_DESC and should match the value of the SERVICE_NAMES parameter.
Example:
sid_list_listener_name=
(sid_list=
(sid_desc=
(global_dbname=oracle.com)
(sid_name=orcl)
(oracle_home=/usr/oracle)))
但实际上在配置的时候GLOBAL_DBNAME 可以为任意合法的字符,而客户端均可以通过该GLOBAL_DBNAME 连接到db server上.
一个具体的例子:
SQL> show parameter
NAME
------------------------------------ -----------
------------------------------
db_domain
db_name
db_unique_name
global_names
instance_name
service_names
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
GBNAME.JWZ