DB_NAME、DBID、DB_UNIQUE_NAME、SERVICE_NAME、SID、INSTANCE_NAME、GLOBAL_DATABASE_NAME等名称的区别

0    394    2

Tags:

👉 本文共约2835个字,系统预计阅读时间或需11分钟。

区别

DB_NAME

①是数据库名,长度不能超过8个字符,记录在datafile、redolog和control file中

②在DataGuard环境中DB_NAME相同而DB_UNIQUE_NAME不同

③在RAC环境中,各个节点的DB_NAME 都相同,但是INSTANCE_NAME不同

④DB_NAME还在动态注册监听的时候起作用,无论是否定义了SERVICE_NAME,PMON进程都会使用DB_NAME动态注册监听

DB_UNIQUE_NAME

①在DataGuard中,主备库拥有相同的DB_NAME,为了区别,就必须有不同的DB_UNIQUE_NAME

②DB_UNIQUE_NAME在DG中会影响动态注册的SERVICE_NAME,即如果采用的是动态注册,则注册的SERVICE_NAME为DB_UNIQUE_NAME,但是实例还是INSTANCE_NAME,即SID

INSTANCE_NAME

①数据库实例的名称,INSTANCE_NAME默认值是SID,一般情况下和数据库名称(DB_NAME)相同,也可不同

②initSID.ora 和orapwSID 文件要与INSTANCE_NAME保持一致

③INSTANCE_NAME会影响进程的名称

ORACLE_SID

①是操作系统中的环境变量,和ORACLE_HOME,ORACLE_BASE用法相同

②在操作系统中要想得到实例名,就必须使用ORACLE_SID。且ORACLE_SID必须与INSTANCE_NAME的值一致

SERVICE_NAMES

①数据库和客户端相连是使用的服务名

②在DataGuard中,如果采用动态注册,建议在主备库使用相同的service_names

③在DataGuard中,如果采用静态注册,建议在主备库上的listener中输入相同的服务名(service_name)

④如果采监听采用了静态注册,那么SERVICE_NAME就等于Listener.ora 文件中的GLOBAL_DATABASE_NAME的值

GLOBAL_DATABASE_NAME

①GLOBAL_DATABASE_NAME 是listener配置的对外网络连接名称,可以是任意值

②在客户端配置监听的tnsnames.ora 文件中的service_name 与这个GLOBAL_DBNAME 保持一致就可以了

③配置静态监听注册时,需要输入SID和GLOBAL_NAME

DBID

①DBID可以看做是DB_NAME在数据库内部的表示,它是在数据库创建的时候用DB_NAME结合算法计算出来的

②它存在于datafile和control file中,用来表示数据文件的归属,所以DBID是唯一的,对于不同的数据库,DB_NAME可以是相同的,但是DBID一定是唯一的,例如在DataGuard中,主备库的DB_NAME相同,但是DBID一定不同(看过一个很形象的例子,就是可以有同名的人,但是身份证号码一定不同)

查询

ORACLE数据库中ORACLE_SID与INSTANCE_NAME的异同

ORACLE数据库中ORACLE_SID与INSTANCE_NAME在概念和意义上有什么异同呢?下面简单来总结概况一下,很多时候,不少人都搞不清楚两者的异同,甚至认为两者是等价的。

ORACLE_SID与INSTANCE_NAME的异同

ORACLE_SID参数是操作系统的环境变量,用于和操作系统进行交互。也用于定义一些数据库参数文件的名称。

例如 init.ora ,spfile.ora等。

有些目录名称也跟ORACLE_SID有关。例如参数core_dump_dest对应的目录中会包含ORACLE_SID名称的文件夹(mydb)。

另外,ORACLE_SID其实主要用于本地连接,例如,一台服务器上有多个Oracle实例,我们必须使用ORACLE_SID来识别区分。它的值一般位于/etc/oratab,~/.bash_profile中,不同操作系统可能有所不同。后面我们会详细讲述。

INSTNACE_NAME是参数文件(pfile&spfile)中的一个初始化参数,它用来标识数据库实例的名称,其缺省值就是ORACLE_SID,所以很多时候我们认为实例名就是ORACLE_SID, 不同的实例可以拥有相同的INSTANCE_NAME。官方文档的解释如下:

Note: The SID identifies the instance's shared memory on a host, but may not uniquely distinguish this instance from other instances.

实例的SID

注:数据库实例的SID标识主机上实例的共享内存,但不能将此实例与其他实例区分开来。

总统来说,INSTANCE_NAME是Oracle数据库参数。而ORACLE_SID是操作系统的环境变量。 默认情况下,INSTANCE_NAME和在环境变量里面配置的ORACLE_SID是同样的名称。(注:正是由于这个原因,网上有些资料说ORACLE_SID就是INSTANCE_NAME,但是需要注意的是,实际上INSTANCE_NAME不等于ORACLE_SID。前者是数据库层面的概念,后者是操作系统中环境变量的设置。)

ORACLE_SID is used to distinguish this instance from other Oracle Database instances that you may create later and run concurrently on the same host computer. The maximum number of characters for ORACLE_SID is 12, and only letters and numeric digits are permitted. On some platforms, the SID is case-sensitive.

INSTANCE_NAME与ORACLE_SID默认情况下是相同的。其实ORACLE_SID与INSTANCE_NAME本来没有什么关系。当操作系统与数据库交互时,用的是ORACLE_SID,而当外部连接于数据库进行交互时用的是INSTANCE_NAME。当同一台服务器安装了多个数据库时,操作系统利用ORACLE_SID来区分不同实例的进程,而当我们与这台服务器的不同的数据库进行连接时,用INSTANCE_NAME来决定具体连接哪个数据库:在监听器动态注册时还会用于向监听器注册

另外,需要注意的是v$instance下instance_name与参数instance_name的区别,v$thread中instance与instance_name的区别,下面我们来演示一下:

然后我们修改一下参数instance_name的值:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复