大佬教程收集整理的这篇文章主要介绍了Oracle中ORACLE_SID,INSTANCE_NAME,DB_NAME几个名词的区别,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
同事项目用到 Oracle,向我问起这些内容,虽本人忝列 OCP,但那是6年前的事了,这几年工作繁重,基本做了清零,受同事之托重新梳理了一遍。
涉及到的名字包括如:db_name,DB_DOMAIN,oracle_sid,INSTANCE_name, service_name 等。
提起这些名字,首先要理解 OracLE 的逻辑架构,我们通常说的可以访问的OracLE DB。其实两部分组成:实例(包括一组进程,和SGA内存等) + 物理介质。介质包括控制文件,数据文件,日志文件,参数文件等。实例进程就是一堆操作物理介质的进程。再者实例进程可以不挂载(mount)任何物理介质,这时的实例叫 IDle instance.
上面的名字先找简单的说:db_name。这两个东西创建数据库时指定,而且最具稳定性,db_name遍布在数据文件,日志文件,参数文件中,99.9%情况下不会也不需要去变他。(虽然现在版本也可以修改了)。
可以把他理解成物理介质的标记,这些物理介质都属这个DB。至于DB_DOMAIN只是为好分布式管理加的一个标识而已,意义不大,知道有这个东西即可。
oracle_sid:一般oracle_sid作环境变量用,他是个操作系统层面的东西,最常见的两个用处:
决定oracle实例 进程的名字,在linux下看,Oracle相应的进程,会发现都缀有oracle_sid。
定位Oracle的启动参数文件,Oracle在启动时要寻找其配置文件(目前以这个顺序查找spfile<oracle_sid>.ora -> spfile.ora -> init<oracle_sid>.ora)。
Oracle启动之后,这个参数也没多大用处了。
注: 相同Oracle_HOME下,oracle_sid要不同,不同Oracle_HOME下,可相同。
INSTANCE_name:db_name是物理介质的标识,INSTANCE_name就是实例进程的标识。
对OracLE数据库,非RAC情况下,物理介质可以被任意实例进程挂载(mount)和打开(open)
但同一时间,只能有一个实例进程打开他。 RAC情况下,则允许多个实例进程打开相同的物理介质。
1+1变成了n+1,也就是说RAC情况下,多个实例对应着同一个物理介质。
JAVAEE同学都记得JDBC的连接串为:jdbc:Oracle:thin:@<host>:<port>:<SID>
这个SID就是INSTANCE_name。数据库连接,其实是连接到实例进程。大多数时候我们都当成了oracle_sid, 只是因为那个时候他们相同了。(关于各个参数的default值问题,这里不说子,码字累)。
似乎有INSTANCE_name+db_name已经完美的解决的实体的定位问题。直到RAC的出现,打破了这一宁静。出了多个实例同时打开同一个db_name的情况。那个上面的JDBC的连接串就不好用了,这时service_name横空出世。
简单的说,service_name代表整个数据库(进程+DB),一个service_name下面可以有多个实例,所以无论是RAC,还是单例数据库,jdbc:Oracle:thin:@<host>:<port>:<service_name>都可以正常连接。
service_name怎么发挥做的呢,我们知道Oracle监听在1521端口,因为存在一个监听器。在oracle实例启动时,PMON进程会将该实例注册到这个监听器上,当前也所括其所属性的服务名,这种叫动态注册,可能不易理解service_name(可以用lsnrctl status命令查看存在的service及instance),看一个静态注册的listener.ora:
SID_List_ListENER= (SID_List= (SID_DESC= (SID_name=ORCL)---这里为INSTANCE_name (OracLE_HOME=/myDATAFILE2/app/Oracle/Oracle/product/11.2.0/db_1) (GLOBAL_DBname=WOO.COM)---这里为service_name。 ) )
连接到这个serviCE,监听器就会按一定算法将连接负载到相应的实例上。
综上看:访问数据库关注的大多为Instance_name和service_name.
而管理数据库用到oracle_sid和db_name
先写这么多吧,后面再补。
以上是大佬教程为你收集整理的Oracle中ORACLE_SID,INSTANCE_NAME,DB_NAME几个名词的区别全部内容,希望文章能够帮你解决Oracle中ORACLE_SID,INSTANCE_NAME,DB_NAME几个名词的区别所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。