日期:2014-05-16  浏览次数:20497 次

Oracle db_name, db_unique_name, global_name 的区别
在一般的数据库里我们看到倒是没有什么特殊的差异的,不过在多实例多数据系统里,这两个倒是经常被提及。不小心就把两个看成一个东东了。其实不然。
 
DB_NAME 数据库名称,也就是数据库的名字标示。这里,数据库里可能有多个实例,比如RAC里的多节点,这多个节点是不同的实例,但是却有相同的名字,他们的 DB_NAME是相同的但是

Instance_name是不同的。DB_NAME会保持在数据文件头里,所以更改DB_NAME不能仅仅修改parameter,还需要用nid 来进行更改,并且更改后还需要手工做些工作,使其生效。
 
DB_UNIQUE_NAME这在另一个HA的应用,Dataguard会经常提及的,和DB_NAME不一样的作用,在DG里,要求物理DG,主从库都有一样的DB_NAME,虽然他们和RAC不一样,并不是同一个库。这里是

数据库的唯一名字。但是他们的DB_UNIQUE_NAME是不一样的,用以进行不同的标示。DB_UNQUIE_NAME的会影响到Service_names,也会影响到动态监听的时候的service_name
比如如下片段
Service "zxdbdg1" has 1 instance(s).
 Instance "zxdb", status BLOCKED, has 1 handler(s) for this service...
 Service "zxdbdg1_XPT" has 1 instance(s).
 Instance "zxdb", status BLOCKED, has 1 handler(s) for this service...
 The command completed successfully
这里的zxdbdg1就是dg中的从库。从库的db_name和主库保持一样为zxdb,DB_UNIQUE_NAME不同。在动态监听后,注册为zxdbdg1的service,启动的instance_name还是zxdb
 
Instance_name简单讲就是ORACLE_SID,oracle里通过ORSCLE_SID来管理不同的数据库实例。

另,上面的动态监听信息里出现了Instance "zxdb", status BLOCKED,这里是因为我的从库数据库不是open状态。
 
1、db_name 数据库名
SQL> show parameter db_name
NAME      TYPE   VALUE
--------- ------ ---------
db_name   string test1
 
db_name是数据库的名字,oracle本身可能是比较有用的,对我们而言没有什么太多的用处,db_name记录在controlfile,datafile_header,redo中,要想修改db_name是比较麻烦的有两种办法

:1、重建controlfile,之后要求必须以reseglogs方式打开数据库;2、通过nid。另外在建库时db_name被限制为最长8个字符,尽管10g在创建时没有错误提示了,但是看看库里最多能存下几个

字符就明白了,为什么即使输入超过8个字符不会报错,但是最终还是被截断了,之前我就为一个企业处理过截断db_name而引起的一些问题。
 
SQL> desc v$database;
名称                                      是否为空? 类型
----------------------------------------- -------- ------------------------
DBID                                               NUMBER
NAME                                               VARCHAR2(9)
 
因此在建库时指定恰当的db_name还是非常重要的。db_name还有一个非常重要的作用就是动态注册监听,不管是否指定了service_name,或者说service_name的值是什么,pmon都会使用db_name

动态注册监听的。
 
SQL> host lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 03-12月-2007 10:19:36
Copyright (c) 1991, 2005, Oracle.  All rights reserved.
 
正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
启动日期                  03-12月-2007 09:29:47
正常运行时间              0 天 0 小时 49 分 50 秒
跟踪级别      &n