首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Oracle中一些混淆名称的现实映射

Oracle中一些混淆名称的现实映射

作者头像
bisal
发布2026-04-02 17:15:22
发布2026-04-02 17:15:22
750
举报

点击标题下「蓝色微信名」可快速关注

Oracle数据库中可能有很多容易混淆的名称,会让初学者觉得可能困惑,例如DB_NAME、DBID、DB_UNIQUE_NAME、INSTANCE_NAME、SID、SERVICE_NAME、GLOBAL_DATABASE_NAME。

但这正是Oracle数据库设计精妙的一个佐证,不同的名称,有着不同作用,没有一个名称是乱起的,这些名称从不同层面描述了数据库、实例及连接方式。

我们可以用一个"公司"的比喻来理解它们,想象一下,你经营一家公司(数据库),公司有一个注册名字(DB_NAME),一个营业执照编号(DBID),还有几个办公场所(实例),每个办公场所都有自己的门牌号(SID/INSTANCE_NAME),同时公司对外提供客服电话(SERVICE_NAME),而在集团(分布式数据库)中,公司还有个全称(GLOBAL_DATABASE_NAME)。如果开了分公司(Data Guard),还会有一个区分总公司和分公司的唯一名称(DB_UNIQUE_NAME)。

从以上的例子,我们还可以得到一个道理,就是很多技术和现实中的对象是可以映射的,而且通过这种映射可以加深我们的理解,有助于我们更好地设计系统。

下面我们逐一解释这些数据库名称:


1. DB_NAME(数据库名)

  • 是什么:数据库的内部名字,就像公司的注册名。创建数据库时指定,一般不超过8个字符,保存在控制文件中。
  • 作用:Oracle自己用这个名字来识别数据库。例如在参数文件(比如init.ora)里会写db_name='orcl',表示这个数据库叫orcl
  • 注意:这个名字不用于客户端连接,它是"内部用"的。

2. DBID(数据库标识符)

  • 是什么:数据库的唯一身份证号。创建数据库时自动生成的一串数字,写在控制文件和数据文件头部。
  • 作用:用于绝对区分不同的数据库,尤其在备份恢复(RMAN)时,Oracle靠DBID来确认你备份的是哪个数据库,防止恢复错乱。即使两个数据库名字一样,DBID也一定不同。

3. DB_UNIQUE_NAME(数据库唯一名)

  • 是什么:在Oracle Data Guard环境中使用的名字,用于区分主数据库和备数据库。如果不配置Data Guard,它默认和DB_NAME一样。
  • 作用:当你有一个主库和一个备库,它们可能DB_NAME相同(因为本是同一个数据库的副本),但为了区分,给它们起不同的"唯一名",例如主库叫orcl_primary,备库叫orcl_standby

4. INSTANCE_NAME 与 SID(实例名与系统标识符)

这两个可以一起理解,因为它们经常指向同一个东西——实例。

  • 实例(Instance):可以理解为Oracle的"运行现场",由内存(SGA)和后台进程组成。有了实例才能访问数据库。一个数据库可以被一个或多个实例挂载(比如RAC集群)。
  • SID(系统标识符):操作系统级别识别实例的代号。你在服务器上设置环境变量ORACLE_SID=orcl,操作系统就知道你要操作哪个实例。
  • INSTANCE_NAME:Oracle实例自己的名字,通常就等于SID,由初始化参数instance_name定义。例如你在SQL*Plus里执行show parameter instance_name就能看到。
  • 简单关系:SID是操作系统层面叫的,INSTANCE_NAME是数据库内部叫的,它们一般一样。在单实例环境中,SID也经常和DB_NAME相同,但这不是必须的。

5. SERVICE_NAME(服务名)

  • 是什么:客户端(例如你的应用程序)连接数据库时使用的逻辑名称。它是Oracle Net(网络层)的概念。
  • 作用:以前老版本用SID连接,但SID只能指向一个具体的实例,而服务名可以指向一个或多个实例(比如RAC中所有实例对外提供一个服务名),还可以动态注册到监听器。你会在连接字符串中看到类似SERVICE_NAME=orcl.example.com
  • 设置:由初始化参数service_names定义,可以设置多个服务名。

6. GLOBAL_DATABASE_NAME(全局数据库名)

  • 是什么:数据库在分布式环境中的全名,格式为DB_NAME.DB_DOMAIN,例如orcl.example.com
  • 作用:用于在分布式数据库中唯一标识一个数据库,特别是在使用数据库链接(dblink)时。创建数据库时可以指定GLOBAL_DATABASE_NAME,它会存储在数据字典中,并且可以通过global_names参数强制要求dblink名称必须与此一致。

因此,

  • DB_NAME 是数据库的根本名字,很多其他名字默认由此衍生。
  • DBID 是数据库的不可变身份证号,备份恢复时依赖。
  • DB_UNIQUE_NAME 是Data Guard中为了区分不同副本而起的别名。
  • SID/INSTANCE_NAME 是实例的名字,对应"运行中的程序"。
  • SERVICE_NAME 是客户端连接时使用的服务名,可以灵活对应一个或多个实例。
  • GLOBAL_DATABASE_NAME 是数据库在分布式世界里的完整域名。

举个例子:

  • 你创建了一个数据库,DB_NAME='orcl',生成DBID=1234567890
  • 服务器上设置ORACLE_SID=orcl,所以INSTANCE_NAME也是orcl
  • 你配置了监听,对外提供SERVICE_NAME=orcl.example.com,客户端通过这个服务名连接。
  • 如果你搭建了Data Guard备库,备库的DB_UNIQUE_NAME='orcl_stdby',但它的DB_NAME仍然可以是orcl,因为它是同一个数据库的副本。
  • 在分布式环境中,这个数据库的GLOBAL_DATABASE_NAME='orcl.example.com',其他数据库可以通过dblink用这个名字访问它。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bisal的个人杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. DB_NAME(数据库名)
  • 2. DBID(数据库标识符)
  • 3. DB_UNIQUE_NAME(数据库唯一名)
  • 4. INSTANCE_NAME 与 SID(实例名与系统标识符)
  • 5. SERVICE_NAME(服务名)
  • 6. GLOBAL_DATABASE_NAME(全局数据库名)
  • 因此,
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档