日常运维中,很少有人关心db_name、INSTANCE_NAME、DB_UNIQUE_NAME、SID、GLOBAL_DBNAME有什么区别,通常设置成一样的了事,但是当你配置ADG的时候,就不得不区别这些名称了。
关于概念
DB_NAME:
1>顾名思义,数据库名,长度不能超过8个字符,在datafile、redolog和control file中都有记录
2>在DataGuard环境中DB_NAME相同而DB_UNIQUE_NAME不同
3>在RAC环境中,各个节点的DB_NAME都相同,但是INSTANCE_NAME不同
4>DB_NAME还在动态注册监听的时候起作用,无论是否定义了SERVICE_NAME,PMON进程都会使用DB_NAME动态注册监听
5>查询 SQL> select name from v$database;
INSTANCE_NAME:
1>默认是SID,单实例数据库中,和DB_NAME也相同。相对于DB_NAME我们可能更关注的是INSTANCE_NAME。oracle=实例+数据文件
2>initSID.ora、密码文件、进程名称都和INSTANCE_NAME保持一致
3>查询 SQL> select instance_name from v$instance;
SID:
1>SID是用来在OS中标识DB的名称,也就是在OS中用来指定连接哪个数据库的。ORACLE_SID与INSTANCE_NAME的值一致。单数据库环境,SID和DB_NAME相同。
2>查询 [oracle@dgp ~]$ cat ~/.bash_profile | grep ORACLE_SID
DB_UNIQUE_NAME:
1>在DG中区别数据库的重要标识
2>DB_UNIQUE_NAME在DG中会影响动态注册的SERVICE_NAME,即如果采用的是动态注册,则注册的SERVICE_NAME为DB_UNIQUE_NAME,但是实例还是INSTANCE_NAME,即SID
3>查询 cat $ORACLE_HOME/dbs/init$ORACLE_SID.ora | grep db_unique_name
GLOBAL_DBNAME:
1>对一个数据库(Oracle database)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name.Db_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值。
SERVICE_NAME:
1>用于数据库和客户端相连的标识
2>存在于tnsname.ora(SERVICE_NAME)和listener.ora(和GLOBAL_DBNAME相同)文件中
关于修改:
首先想说的是,没事尽量别改,比如DB_NAME改了,有很多文件夹也要改(当然也可以不改,但时间久了你确定自己不会懵就行)
修改 DB_NAME 一般有两种方式:
1>修改spfile,备份修改控制文件,resetlogs打开数据库
2>通过nid 命令修改(推荐)
修改DB_UNIQUE_NAME:
参数文件中修改
修改Global_name:
只能用ALTER DATABASE RENAME GLOBAL_NAME TO 命令进行修改,然后修改相应参数。
概括:
如果实在分不清,起码要知道rac中instance_name和db_name的关系;DG中db_name和db_unique_name的关系。其他情况都尽量用一个名字也罢了