
点击标题下「蓝色微信名」可快速关注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_nameorcl表示这个数据库叫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_SIDorcl操作系统就知道你要操作哪个实例。INSTANCE_NAMEOracle实例自己的名字通常就等于SID由初始化参数instance_name定义。例如你在SQL*Plus里执行show parameter instance_name就能看到。简单关系SID是操作系统层面叫的INSTANCE_NAME是数据库内部叫的它们一般一样。在单实例环境中SID也经常和DB_NAME相同但这不是必须的。5. SERVICE_NAME服务名是什么客户端例如你的应用程序连接数据库时使用的逻辑名称。它是Oracle Net网络层的概念。作用以前老版本用SID连接但SID只能指向一个具体的实例而服务名可以指向一个或多个实例比如RAC中所有实例对外提供一个服务名还可以动态注册到监听器。你会在连接字符串中看到类似SERVICE_NAMEorcl.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_NAMEorcl生成DBID1234567890。服务器上设置ORACLE_SIDorcl所以INSTANCE_NAME也是orcl。你配置了监听对外提供SERVICE_NAMEorcl.example.com客户端通过这个服务名连接。如果你搭建了Data Guard备库备库的DB_UNIQUE_NAMEorcl_stdby但它的DB_NAME仍然可以是orcl因为它是同一个数据库的副本。在分布式环境中这个数据库的GLOBAL_DATABASE_NAMEorcl.example.com其他数据库可以通过dblink用这个名字访问它。如果您认为这篇文章有些帮助还请不吝点下文章末尾的点赞和在看或者直接转发朋友圈可以到各大平台找我微信公众号bisal的个人杂货铺腾讯云开发者社区bisal的个人杂货铺头条号bisal的个人杂货铺CSDNbisalITPubbisal墨天轮bisal51CTObisal小红书bisal抖音bisal近期更新的文章《老朋友好久不见了愿你在天堂安好》《达梦set schema版本场景》《英超第二十九轮》《OpenClaw你养的是虾还是被时代落下的恐惧》《成为一名优秀DBA需要具备什么》近期Vlog《千岛湖》《Skyline Luge》《新疆之行红山体育馆 - 国际大巴扎 - 红山公园 - 天山天池》《新疆之行天马浴河 - 哈因塞 - 那拉提 - 依提根塞》《新疆之行六星街 - 伊昭公路 - 夏塔》热文鉴赏《揭开仿宋和仿宋_GB2312的神秘面纱》《Linux的aarch是多了个a》《中国队“自己的”世界杯》《你不知道的C罗-Siu庆祝动作》《大阪环球影城避坑指南和功略》《推荐一篇Oracle RAC Cache Fusion的经典论文》《红警游戏开源代码带给我们的震撼》文章分类和索引《公众号2000篇文章分类和索引》