点击标题下「蓝色微信名」可快速关注
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)。
从以上的例子,我们还可以得到一个道理,就是很多技术和现实中的对象是可以映射的,而且通过这种映射可以加深我们的理解,有助于我们更好地设计系统。
下面我们逐一解释这些数据库名称:
init.ora)里会写db_name='orcl',表示这个数据库叫orcl。orcl_primary,备库叫orcl_standby。这两个可以一起理解,因为它们经常指向同一个东西——实例。
ORACLE_SID=orcl,操作系统就知道你要操作哪个实例。instance_name定义。例如你在SQL*Plus里执行show parameter instance_name就能看到。SERVICE_NAME=orcl.example.com。service_names定义,可以设置多个服务名。DB_NAME.DB_DOMAIN,例如orcl.example.com。GLOBAL_DATABASE_NAME,它会存储在数据字典中,并且可以通过global_names参数强制要求dblink名称必须与此一致。举个例子:
DB_NAME='orcl',生成DBID=1234567890。ORACLE_SID=orcl,所以INSTANCE_NAME也是orcl。SERVICE_NAME=orcl.example.com,客户端通过这个服务名连接。DB_UNIQUE_NAME='orcl_stdby',但它的DB_NAME仍然可以是orcl,因为它是同一个数据库的副本。GLOBAL_DATABASE_NAME='orcl.example.com',其他数据库可以通过dblink用这个名字访问它。