Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释

菜鸟雷区

在配置listener.ora 和 tnsnames.ora 连接Oracle数据库服务器时,我们需要把 以下容易混淆的概念区分开来

  • 数据库域名
  • 数据库名
  • 全局数据库名
  • SID
  • 数据库实例名
  • 服务名

有图有真相

安装Oracle数据库时我们指定的这些东西在配置时需要使用,真坑,安装的时候也不提醒我一下


脚下留心:如果默认安装的话,以下输入框中是: ORCL


在这里插入图片描述

查询SQL见附录

在这里插入图片描述


1.数据库域名(db_domain)

分布式数据库系统中,不同版本的数据库服务器之间,不论运行的操作系统是unix或是windows,各服务器之间都可以通过数据库链路进行远程复制。

数据库域名主要用于oracle分布式环境中的复制。数据库域名被写入参数文件中,该参数为db_domain。

2.数据库名(db_name)

数据库名是在安装数据库时指定的,存储在(dbhome_1/dbs/init.ora)。
在数据库安装或创建完成之后,数据库名被写入参数文件中,该参数为db_name。

创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到。

3.全局数据库名(GLOBAL_NAME)

全局数据库名(name.domain)称唯一的标识Oracle数据库。储在控制文件中的名称,它代表的是数据库,也就是数据库包含的所有的物理文件的总称。
配置 tnsnames.ora 时可能需要使用到。

4.数据库实例名(instance_nam)和ORACLE_SID

数据库至少由一个Oracle数据库实例引用,该实例由 SID(Oracle服务标识符) 唯一标识,以区别一台计算机上的任何其他Oracle数据库实例。ORACLE_SID,Oracle服务标识符(SID),Oracle系统标识符都是同一个概念。ORACLE_SID标识Oracle实例,

一个数据库可以有多个实例,例如RAC,在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。实例名用于标识数据库内的每一个实例的名称。

在一般情况下,数据库名和实例名是一对一的关系,数据库名**和实例名可以相同也可以不同。


高能警告:两者关系有些复杂,通常情况下二者是一致的,如果不想了解的请移步下一个大标题

操作系统---------OracleSID---------》数据库实例------数据库实例名-----------》数据库管理系统

数据库实例名是指响应某个数据库操作的 数据库管理系统 的名字,操作系统和数据库之间的交互用的是数据库实例名。数据库实例名是用于和操作系统进行联系的标识。从操作系统的角度访问实例名,必须通过ORACLE_SID。

在winnt不台, ORACLE_SID需存在于注册表中。实例名被写入参数文件中,该参数为instance_name。ORACLE_SID必须与 instance_name 的值一致。否则,客户端连接时将会收到一个错误,在winnt平台,是“TNS:协议适配器错误”。在unix平台,是“ORACLE not available”

  • instance_name是oracle数据库参数。
  • ORACLE_SID是操作系统的环境变量。

5.服务名 (SERVICE_NAME)

数据库对外提供的名字,好比你与陌生人时你往往会把你的姓名告诉他,而不是你的绰号或者小名告诉他。

SERVICE_NAME指的是listener中的全局数据库名:这个名字是由listener.ora中GLOBAL_DBNAME参数决定的。
SERVICE_NAME是Oracle8i新引进的,8i之前一个数据库只能有一个实例。8i之后一个数据库可以对应多个实例,例如RAC。为了充分利用所有实例,并且令客户端连接配置简单,ORACLE提出了SERVICE_NAME的概念。该参数直接对应数据库,而不是某个实例。
如果数据库有域名,则 数据库服务名=全局数据库名=数据库名【.】数据库域名
数据库服务名与数据库名相同。

配置的时候建议要默认的ORCL,不带域名

约定>配置>编码

附录

上述专业名词名字在SQLplus中用sys或system登录可以查询

数据库名
SELECT * FROM V$DATABASE;
SELECT t.NAME FROM V$DATABASE t;

实例名
SELECT * FROM V$INSTANCE;
SELECT t.INSTANCE_NAME FROM V$INSTANCE t;

SID
select * from v$thread;
select t.INSTANCE from v$thread t;

域名
select * from v$parameter t where t.name = 'db_domain';
select t.VALUE from v$parameter t where t.name = 'db_domain';

服务名
select * from v$parameter t where t.name = 'service_names';
select t.VALUE from v$parameter t where t.name = 'service_names';
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值