ORACLE中的Server_name和SID概念理解

博文说明【前言】:

本文将通过个人口吻介绍在ORACLE中的Server_name和实例名SID的相关概念,在目前时间点【2017年5月22号】下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容。

本文参考文献引用链接:

1、http://blog.csdn.net/luman1991/article/details/56286371

2、http://blog.csdn.net/yaksok/article/details/52130228



正文:


SERVER_NAME参数是由oracle8i开始引进的。在8i以前,使用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样,而sid是数据库实例的名字,每个实例各不相同。

案例分析:

一、引入关系:

服务器=公司

数据库=运维支持部(数据库分为单机和集群环境,也就是部门的人数多少关系)

数据库集群环境=运维支持部门(假设部门有小丽,小美两名员工,对应SID1,SID2)

数据库连接请求=公司员工或者其他部门请求运维部提供技术支持

数据库服务器=装载了数据库的服务器,也就是拥有活跃运维部门的公司,当然服务器除了装载数据库,我还可以安装其他软件提供其他服务

二、工作过程:

1、老王是研发部门的一个员工,在连接数据库的发现无法连接,因此在公司内部沟通平台发送了一个请求,请求运维部查看下数据库服务是否异常。

2)运维部的小丽接受了这个问题,也就是小丽给老王提供了这次服务,最终顺利解决该问题

3)过了一周,老王又发现数据库连接有问题,又在公司内部沟通平台发送了一个请求,请求运维部查看下数据库服务是否异常。

4)运维部的小美接受了这个问题,也就是小美给老王提供了这次服务,最终顺利解决该问题

三、案例分析:

1、这里真实提供服务的就是SID(第一次是小丽SID1,第二次是小美SID2,第三次也是两者之一)

2、运维支持部门,在公司内部沟通平台对应有一个虚拟用户(Server_name),用户将反馈提交给该用户,然后由该虚拟用户去调度后方真实节点提供服务,使用过JIRA平台的小伙伴应该深有感触。

3、用户不用关系,真实给我提供服务的人是谁,每次只需要将问题提交给该虚拟用户(server_name),就会有支持人员来解决我的问题。

注意:在这里用户如果知道运维部里面具体有谁,也可以配置成直接将问题分配给比如小丽,也就是说,在配置数据库连接信息时,可以配置成直接连接SID,也可以配置成连接server_name,然后由server_name去调控SID去处理请求。

总结:

SID:

一个数据库可以有多个实例(如RAC集群环境),SID用来标识数据库内部每个实例的名字,就好像一个部门里,每个人都有一个自己的名字(小丽和小美等)。

SERVICE_NAME:

数据库对外宣称的名字,它就像一个部门的名字,这个部门的名称在数据库的看门大爷(listener)那里有登记。看门大爷一看你是要找SERVICE_NAME这个部门(运维部),就告诉你我们公司确实有这个部门,于是你就找到了,连接就建立了。

对于集群来说,每个节点的SID 是不一样的,但是SERVICE_NAME 可以包含所有节点。

一句话来说就是:

SID是对内部来说的,是实例级别的一个名字,用于数据库内部之间称呼。

SERVICE_是对外的,是数据库级别的一个名字,用来告诉外面的人,我数据库叫"SERVICE_NAME"。

你可以通过service_name参数指定这个名字是什么,可以有多个名字,名字随便起,叫老王,老张都没关系。如果你不指定,默认的是Db_name. Db_domain,也就是global_name。

这些易混淆的名字,你只要记住,他们不是指数据库,就是指实例,就这两个东西,别无其它。他们具体用哪个名字,要看针对对象。是对数据库,还是对操作系统,还是对外部连接请求。分清楚这点,就不容易混了



结尾:

感谢阅读,祝有收获的一天,谢谢!

时间: 2024-11-03 21:33:56

ORACLE中的Server_name和SID概念理解的相关文章

Oracle中的rowid

ROWID是ORACLE中的一个重要的概念.用于定位数据库中一条记录的一个相对唯一地址值.通常情况下,该值在该行数据插入到数据库表时即被确定且唯一.ROWID它是一个伪列,它并不实际存在于表中.它是ORACLE在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列.所以根据一行数据的ROWID能找到一行数据的物理地址信息.从而快速地定位到数据行.数据库的大多数操作都是通过ROWID来完成的,而且使用ROWID来进行单记录定位速度是最快的. 要理解索引,必须先搞清楚ROWID. B-T

深入理解Oracle中的latch

深入理解Oracle中的latch 串行化 概述 串行化 - 数据库系统本身是一个多用户并发处理系统,在同一个时间点上,可能会有多个用户同时操作数据库, 多个用户同时在相同的物理位置上写数据时,不能发生互相覆盖的情况,这叫做串行化,串行化会降低系统的并发性,但这对于保护数据结构不被破坏来说则是必需的.在Oracle数据库中,通过闩锁(latch)和锁定(lock)来解决这两个问题.闩锁和锁定既有相同点又有不同点.相同点在于它们都是用于实现串行化的资源.而不同点则在于闩锁(Latch)是一个低级别

Oracle中rownum理解及和rowid的区别

rownum,rowid都叫伪列. 但是,rownum是逻辑上的编号,且其值总是从1开始,每行的rounum不是固定的.而rowid是“物理”编号.若数据库文件没有移动,则每行的 rowid一般是固定不变的. oracle中rownum用法的总结 对于 Oracle的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=),并非说用>,>=,=,between..and时会提示SQL语法错误,而是经常是查不出一条

4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别

 事务提交过程 事务 基本概念 概念:一个或者多个DML语言组成 特点:要么都成功,要么都失败 事务的隔离性:多个客户端同时操作数据库的时候,要隔离它们的操作, 否则出现:脏读  不可重复读  幻读 Oracle默认情况下,事务是打开的 commit案例: SQL> create table t1(tid int,tname varchar2(20)); 表已创建. SQL> select * from tab; TNAME                          TABTYPE

Oracle中B-TREE索引的深入理解(转载)

索引概述 索引与表一样,也属于段(segment)的一种.里面存放了用户的数据,跟表一样需要占用磁盘空间.只不过,在索引里的数据存放形式与表里的数据存放形式非常的不一样.在理解索引时,可以想象一本书,其中书的内容就相当于表里的数据,而书前面的目录就相当于该表的索引.同时,通常情况下,索引所占用的磁盘空间要比表要小的多,其主要作用是为了加快对数据的搜索速度,也可以用来保证数据的唯一性.但是,索引作为一种可选的数据结构,你可以选择为某个表里的创建索引,也可以不创建.这是因为一旦创建了索引,就意味着o

Oracle中Error while performing database login with the XXXdriver; Listener refused the connection with the following error; ORA-12505,TNS:listener does not currently know of SID given inconnect descrip

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯! 一次连接数据库怎么也连接不上,查了多方面资料,终于找到答案,总结 首先应该保证数据库的服务启动 在myeclipse的数据库视图中点 右键->new 弹出database driver的窗口, Driver template选择oracle(thin driver), Driver name 输入oracle   connection URL=j

Oracle中用户(User)和模式(Schema)的概念

数据库理论中数据库用户和数据库模式并没有必然的联系,详细的数据库模式解释可以在这里找到: http://stackoverflow.com/questions/2674222/what-is-purpose-of-database-schema A database schema is a way to logically group objects such as tables, views, stored procedures etc. Think of a schema as a cont

Oracle中Hint深入理解

Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从 而使语句高效的运行.例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描.在Oracle 中,是通过为语句添加 Hints(提示)来实现干预优化器优化的目的. 不建议在代码

Oracle中Hint深入理解(原创)

http://czmmiao.iteye.com/blog/1478465 Hint概述  基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从 而使语句高效的运行.例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描.在Oracle 中,