Oracle db_name, db_unique_name, global_name的区别(二)

2014-11-24 09:06:41 · 作者: · 浏览: 3
, 包含此服务的 1 个处理程序...”
2、instnace_name 实例名
SQL> show parameter instance_name
NAME TYPE VALUE
------------- ------------- ---------
instance_name string inst_test
instance_name除了动态注册监听用到之外,到目前为止我没有发现其他用处,也许oracle用它来区分各个实例?不过相信仅仅通过instance_name也不能完全区分,至少也的用到sid吧,看看上
面显示出来的动态注册监听中的信息,其中inst_test就是instance_name
3、SID:System Identifier
The SID identifies the instance's shared memory on a host, but may not uniquely distinguish this instance from other instances
doc上把sid解释为在host上用sid来标示实例的共享内存的,可见sid主要是和os打交道的。
sid可以通过如下语句在库中查询:
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
tsid
尽管v$instance中字段 instance_name 看起来是实例名,但是实际上存储的是sid,在win下sid不能重复,不管oracle_home是否相同,相同当然不行,主要是不同也不行,这里的不同是针对
unix/linux而言的,在unix/linux下只要不同版本的oracle安装在不同的oracle_home下就可以创建相同sid的实例,但是win下不可以,这不是由oracle决定的,主要是受到 windows服务的限制
,在服务中不能存在服务名相同的oracle服务,服务名是由如下格式组成的:OracleServiceSID,因为服务名中包括了sid,所以sid如果相同了,服务名就相同了,这是windows所不允许的。因
此在win下无法创建相同sid的不同实例。
4、service_names 服务名
服务名是复数,大家看好了,意味着service_names 可以是多个值,这里的服务名除了在动态注册的监听中被用到之外,没有发现其它用处,还有其它用处大家可以补充,dataguard中建议大家
在primary,standby上使用相同的service_names,这样可能便于尽可能的实现透明切换,前提是如果没有配置静态静听的话,当然如果配置了静态注册的监听在primary,standby上也务必保持
在listener中要求输入的服务名相同,还是那句话,尽可能的实现透明切换。下面查询可以显示service_names:
SQL> show parameter service_names
NAME TYPE VALUE
------------- ---------------------- --------------
service_names string TEST2, TEST3
这里我指定了2个值test2,test3,再来看看动态注册的监听是如何使用服务名的,监听的部分状态信息如下:
服务 "TEST2.COM" 包含 1 个例程。
例程 "inst_test", 状态 READY, 包含此服务的 1 个处理程序...
服务 "TEST3.COM" 包含 1 个例程。
例程 "inst_test", 状态 READY, 包含此服务的 1 个处理程序...
这里我们看到显示出来的服务名有后缀com,是因为我设置了db_domain
5、db_domain 数据库域名
SQL> show parameter db_domain
NAME TYPE VALUE
------------ ----------------------- -----------
db_domain string COM
doc上说它被"."分割,包括句点最多128个字符,没改过这么长的,不知道,没有验证过,db_domain 的作用主要是用在分布式数据库中,分布式事务的各个数据库应该有db_domain,但是要求
他们是否相同,doc上没说,之前单位开发有分布式环境,但是当时没有注意过,不过高级复制中要同步的对象所在的数据库是无论如何也要设置db_domain 的,是否要求相同也不得而知了,我
在配置复制的时候把db_domain 设置为相同的了。介绍db_domain 的另一个用途就是在同一个os域中如果要创建同名db_name的数据库时建议最好让具有相同db_name的数据库具有不同的
db_domain,以保证在同一个域中global_name是唯一的。doc上也是这样建议的:Oracle recommends that you specify DB_DOMAIN as a unique string for all databases in a domain
当指定了db_domain的时候,在创建db link时会自动在db_link的后面加上db_domain(doc:If you omit the domains from the name of a database link, Oracle expands the name by
qualifying the database with the domain of your local database as it currently exists in the data dictionary, and then stores the link name in the data dictionary. The
characters valid in a database domain name are: alphanumeric characters, underscore (_), and number sign (#).),9i好像记得是这样的,但是10g我验证了一下不是:
SQL> create database link dbl_test using 'orcl';
数据库链接已创建。
SQL> select db_link from dba_db_links;
DB_LINK
----------------------------------------------------------------------------
DBL
DBL_TEST
ORCL
还有一点需要主要的是:You must set this parameter for every instance, and multiple instances must have the same value in Real Application Clusters
6、g